跨站点请求伪造保护

跨站请求伪造保护

CSRF 中间件和模板标签提供对跨站请求伪造简单易用的防护。某些恶意网站上包含链接、表单按钮或者JavaScript ,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作,这就是跨站攻击。还有另外一种相关的攻击叫做“登录CSRF”,攻击站点触发用户浏览器用其它人的认证信息登录到其它站点。

防护CSRF 攻击的第一道防线是保证GET 请求(以及在9.1.1 Safe Methods, HTTP 1.1, RFC 2616 中定义的其它安全的方法)不会产生副作用。通过例如POST、PUT 和DELETE不安全的请求方法,可以通过以下步骤进行防护。

如何使用

想在你的视图中使用CSRF 防护,请遵循以下步骤:

  1. CSRF 中间件在MIDDLEWARE_CLASSES 设置中默认启用。如果你要覆盖这个设置,请记住'django.middleware.csrf.CsrfViewMiddleware' 应该位于其它任何假设CSRF 已经处理过的视图中间件之前。

    如果你关闭了它,虽然不建议,你可以在你想要保护的视图上使用csrf_protect()(见下文)。

  2. 在使用POST 表单的模板中,对于内部的URL请在<form> 元素中使用csrf_token 标签:

    <form action="." method="post">
    

    它不应该用于目标是外部URL 的POST 表单,因为这将引起CSRF 信息泄露而导致出现漏洞。

  3. 在对应的视图函数中,确保使用 'django.template.context_processors.csrf' Context 处理器。通常可以用两种方法实现:

    1. 使用RequestContext,它会始终使用'django.template.context_processors.csrf'(无论TEMPLATES 设置中配置的是什么模板上下文处理器)。如果你正在使用通用视图或Contrib 中的应用,你就不用担心了,因为这些应用通篇都使用RequestContext。

    2. 手工导入并使用处理器来生成CSRF token,并将它添加到模板上下文中。例如:

      from django.shortcuts import render_to_response
      from django.template.context_processors import csrf
      
      def my_view(request):
          c = {}
          c.update(csrf(request))
          # ... view code here
          return render_to_response("a_template.html", c)
      



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值