Django之cfrs跨站请求伪造和xfs攻击

跨站请求伪造

一、简介

django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

全局:

  中间件 django.middleware.csrf.CsrfViewMiddleware

局部:

  • @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
  • @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

注:from django.views.decorators.csrf import csrf_exempt,csrf_protect

csrf:跨站请求伪造(生成随机字符串),每次操作访问时则检查随机的字符串
csrf:post时,需要用户携带随机字符串

二、应用

1、普通表单

veiw中设置返回值:
  return render_to_response(‘Account/Login.html‘,data,context_instance=RequestContext(request))  
     或者
     return render(request, ‘xxx.html‘, data)

html中设置Token:
  {% csrf_token %}

  

2、Ajax

对于传统的form,可以通过表单的方式将token再次发送到服务端,而对于ajax的话,使用如下方式。

示例:

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),

    # 关于csrf:跨站请求伪造(生成随机字符串),每次操作访问时则检查随机的字符串
    url(r‘^csrf1.html$‘,views.csrf1),

]

views.py

from django.shortcuts import render,HttpResponse
from django.views import View
from app01 import models
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# =============关于csrf的:
# csrf:跨站请求伪造(生成随机字符串),每次操作访问时则检查随机的字符串
# 1.将setting里面的csrf的注释去掉
@csrf_protect#这个指的是局部使用,全站禁用,(仅仅在下面的这个被装饰的函数使用csrf)需要注释setting里的csrf
@csrf_exempt#这个指的是局部禁用,全站使用,(仅仅在下面的这个被装饰的函数禁用csrf)不能注释setting里的csrf
def csrf1(request):
    if request.method=="GET":
        return render(request,"csrf1.html")
    else:
        return HttpResponse("good")

csrf1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" action="/csrf1.html">
    {% csrf_token %}
{#    {{ csrf_token }}#}
    <input id="user" type="text" name="username">
    <input type="submit" value="提交">
    <a onclick="submitForm();">Ajax提交</a>
</form>

<script src="/static/jquery-1.12.4.js"></script>
<script src="/static/jquery.cookie.js"></script>

<script>
    function submitForm() {
        var token=$.cookie("csrftoken");
{#        var token=$.cookie("csrftoken");这个根据cookie的key来取的随机生成的cookie的value值#}
        var user=$("#user").val();
        $.ajax({
            url:"/csrf.html",
            type:"POST",
            headers:{"X-CSEFToken":token},
            data:{"user":user},
            success:function (arg) {
                console.log(arg);
            }
        })

    }
</script>

</body>
</html>

三、csrf基于FBV和CBV的应用

示例:

from django.shortcuts import render,HttpResponse
from django.views import View
from app01 import models
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# =======csrf里面的CBV(基于类的方式)应用装饰器
from django.views import View
from django.utils.decorators import method_decorator
# 1、先自定义一个闭包函数做装饰器
def wrapper(func):
    def inner(*args,**kwargs):
        return func(*args,**kwargs)
    return inner
# 关于cbv的应用装饰器,方法一:在指定的方法上添加装饰器
class Foo(View):
    @method_decorator(wrapper)#仅仅在下面的函数内有效
    def get(self,request):
        # return HttpResponse("login_get")
        return render(request,"login.html")

    def post(self,request):
        print(request.POST.get("username"))
        return HttpResponse("login_post")

# 方法二:在类上面添加
# @method_decorator(wrapper,name="get")#仅仅给类里面的get函数使用
@method_decorator(wrapper,name="dispatch")#给下面所有的函数使用
class Foo(View):
    def dispatch(self, request, *args, **kwargs):
        pass
    def get(self,request):
        # return HttpResponse("login_get")
        return render(request,"login.html")

    def post(self,request):
        print(request.POST.get("username"))
        return HttpResponse("login_post")

  

xss攻击

- 慎用 safe和mark_safe
- 非要用,一定要过滤关键字

示例:

xss攻击
    跨站脚本攻击:
    防止:
        -其他人输入的内容  不用safe
        -自己输入的内容    可用safe

    <scripts>
        for(var i=0;i<9999;i++){
            alert(i)
        }
    </scripts>   

    <scripts>
        获取本地cookie,发送到别外一个网站
    </scripts>
时间: 07-01

Django之cfrs跨站请求伪造和xfs攻击的相关文章

自动化运维Python系列之Django CSRF跨站请求伪造、中间件

CSRF CSRF,跨站请求伪造是一种挟持用户在当前已登陆的web站点应用程序上执行非本意的操作攻击方法,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品). Django的CSRF中间件验证就可以有效地杜绝此类恶意攻击,原理就是Django在内部会对通过验证请求的客户端再做一次加密验证,该加密方式只有Django自己知道,客户端即使携带session反解密CSRF不成功也会拒绝访问:这是Django生

深入解析跨站请求伪造漏洞:实例讲解

本文的上篇中,我们着重介绍了跨站请求伪造的原理,并指出现有的安全模型并不能真正防御这种攻击.在下篇中,我们将向读者介绍在一些大型站点上发现的几个严重的CSRF漏洞,攻击者利用这些漏洞不仅能够采集用户的电子邮件地址,侵犯用户隐私并操控用户帐户.如果金融站点出现了跨站请求伪造漏洞的话,这些漏洞甚至允许攻击者从用户的银行帐户中划走资金.为了全面的防御CSRF攻击,建议对服务器端进行改造.此外,本文还会介绍服务器端解决方案应具备的特征,如果缺乏这些特性,就会导致CSRF保护措施不必要地妨碍典型的web浏

Python之路67-防CSRF跨站请求伪造

目录 一.简介 二.应用 三.官方示例 一.简介 django为用户实现防止跨站请求伪造的功能,通过中间件django.middleware.csrf.CsrfViewMiddleware来完成.而对于django中设置防跨站请求伪造功能有分为全局和局部. 全局: 中间件 django.middleware.csrf.CsrfViewMiddleware 局部: @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件. @csrf_exempt

跨站请求伪造CSRF(Cross-site request forgery)

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用 一般被攻击步骤: 1.登录受信任网站A,并在本地生成Cookie. 2.在不登出A的情况下,访问危险网站B. 所以没事的时候不要乱点链接不是随便说着玩的. 常见场景分析: 假设你有一个这样的Action,因为已经加了[Authorize(Roles = "Admins")]标记

跨站请求伪造(防护)

跨站请求伪造(防护) 任何Web应用所面临的一个主要安全漏洞是跨站请求伪造,通常被简写为CSRF或XSRF,发音为"sea surf".这个漏洞利用了浏览器的一个允许恶意攻击者在受害者网站注入脚本使未授权请求代表一个已登录用户的安全漏洞. 为了防范伪造POST请求,我们会要求每个请求包括一个参数值作为令牌来匹配存储在cookie中的对应值.我们的应用将通过一个cookie头和一个隐藏的HTML表单元素向页面提供令牌.当一个合法页面的表单被提交时,它将包括表单值和已存储的cookie.如

crsf 跨站请求伪造

[crsf 跨站请求伪造] CSRF(Cross-site request forgery),中文名称:跨站请求伪造.核心为利用浏览器帮助提交cookie.采用随机数方可防御.估计大部小站均无CSRF的防御. 参考: 1.http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html 2.<深入浅出Node>,8.2.4.2,csrf.

CSRF简单介绍及利用方法-跨站请求伪造

0x00 简要介绍 CSRF(Cross-site request forgery)跨站请求伪造,由于目标站无token/referer限制,导致攻击者可以用户的身份完成操作达到各种目的.根据HTTP请求方式,CSRF利用方式可分为两种. 0x01 GET类型的CSRF 这种类型的CSRF一般是由于程序员安全意识不强造成的.GET类型的CSRF利用非常简单,只需要一个HTTP请求,所以,一般会这样利用: <img src=http://wooyun.org/csrf.php?xx=11 />

跨站请求伪造

1. 什么是跨站请求伪造(CSRF)  CSRF(Cross-site request forgery跨站请求伪造,也被称为"One Click Attack"或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用.尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左.XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站.与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少

深入解析跨站请求伪造漏洞:原理剖析

当存心不良的Web站点导致用户的浏览器在可信的站点上进行非意愿的活动时,我们就说发生了跨站请求伪造(CSRF)攻击.这些攻击被誉为基于Web的漏洞中的“沉睡的巨人”,因为互联网上的许多站点对此毫无防备,同时还因为这类攻击一直为web开发和安全社区所忽视. 一.概述 当存心不良的Web站点导致用户的浏览器在可信的站点上进行非意愿的活动时,我们就说发生了跨站请求伪造(CSRF)攻击.跨站请求伪造攻击亦称跨站引用伪造(XSRF),会话叠置和混淆代理人攻击.我们之所以使用术语CSRF,是因为它是描述这类