每日一记======>(转)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请求也就没问题了。
posted @ 2012-10-29 15:17  事件轮询,回不到过去  阅读(314)  评论(0编辑  收藏  举报