每日一记======>(转)CSRF介绍(Cross-site request forgery)以及django中的处理方法
- CSRF:跨站请求伪造。简单的说就是用户访问了安全的网站A(比如支付宝)并登录,之后用户又访问了问题网站B,B网站包含恶意代码,访问B网站的时候B网页偷偷的向网站A发起post(get)请求进行转账操作。由于自己已经登录过网站A,A误以为请求是用户自己发起的安全请求,在操作成功后你的钱啥的就不见了。
- 当前Django的处理方法:在用户访问网站的时候为用户生成一个CSRF防范用的token并将token保存到cookie中。每次用户发起请求的时候,需要将token值作为表单字段一同提交,服务端同用户提交的token和cookie中的token进行比较,相同则认为安全。
- 由于浏览器对cookie的访问严格限制,问题网站B无法访问到网站A的cookie无法正确的设置token。
- 其他:django没有设置csrf的cookie。你可以在views前进加ensure_csrf_cookie强制django进行csrf cookie的设置。参考文档https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/#edge-cases 不需要用户登陆的请求应当是不存在csrf问题的,所以对非登陆的AJAX请求你可以加个
https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/#django.views.decorators.csrf.csrf_exempt 你在用户的登陆函数前加个ensure_csrf_cookie,确保用户登陆后csrf cookie正确设置,需要登录的ajax请求也就没问题了。
“某度”空间 http://hi.baidu.com/new/wenjiashe521
cnblogs空间 http://www.cnblogs.com/wenjiashe521/