# django使用(CsrfMiddleware)进行Csrf防护,原理如下:
1.它修改当前处理的请求,向所有的 POST 表单增添一个隐藏的表单字段,使用名称是 csrfmiddlewaretoken,
值为当前会话 ID 加上一个密钥的散列值。 如果未设置会话 ID ,该中间件将不会修改响应结果,
因此对于未使用会话的请求来说性能损失是可以忽略的。
2.对于所有含会话 cookie 集合的传入 POST 请求,它将检查是否存在 csrfmiddlewaretoken 及其是否正确。
如果不是的话,用户将会收到一个 403 HTTP 错误。 403 错误页面的内容是检测到了跨域请求伪装。 终止请求。
该步骤确保只有源自你的站点的表单才能将数据 POST 回来。
另外要说明的是,未使用会话 cookie 的 POST 请求无法受到保护,但它们也不 需要 受到保护,
因为恶意网站可用任意方法来制造这种请求。为了避免转换非 HTML 请求,中间件在编辑响应结果之
前对它的 Content-Type 头标进行检查。 只有标记为 text/html 或 application/xml+xhtml 的页面才会被修改。
CSRF设置步骤:
第一步: 在settings.py中的MIDDLEWARE_CLASSES部分添加’django.middleware.csrf.CsrfViewMiddleware’,如果使用普通方式创建的django项目,这一项一般都已经存在了不用额外设置。
第二步:在POST表单的template中加入csrf_token。这一步很简单,在模板中添加如下代码:
第三步:在请求处理方法中添加context processor。
使用RequestContext,RequestContext始终都使用了’django.core.context_processors.csrf’。
- 本文固定链接: http://www.wpython.com/361.html
- 转载请注明: Ted 2014年07月23日 于 小强的博客 发表