CSRF(Cross-site request forgery) 中文名是跨站请求伪造。
简单的说是用户访问了安全的网站A(比如支付宝)并登录,之后用户又访问了问题网站B。网站B包含恶意代码,在访问网站B的时候,网站B的网页偷偷的向网站A发起post(get)请求进行转账操作。由于你已经登录过网站A,网站A误以为请求是用户自己发起的安全请求。在操作成功后你的钱啥的也不见了。
当前Django的处理方法:
在用户访问网站时为用户生成一个CSRF防范用的token并将token保存到cookie中。每次用户发起请求时需要将token的值作为表单字段一同提交。服务端对用户提交的token值同cookie中的token进行比较,如果相同则认为安全。
由于浏览器对cookie的访问有严格的限制,问题网站B无法访问到网站A的cookie无法正确的设置token。
不错。学习了!
用这么简洁的文字就能把CSRF说清楚,厉害。
在ajax 使用csrf感觉蛮麻烦的
这几天整合django + DWZJs(一个jquery UI框架)
根据官方文档使用js那段代码
结果chrome下面没有问题
ie和firefox下cookies值总是为空,老是报403错误
请教博主,有没有什么解决思路呢?亦或是否遇到过ie下csrf报403错误的问题
应当是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请求也就没问题了。
非常感觉回复
我试试看先
看完这篇文章让我想起了那句话:大师通常是能把复杂的事情说的简单明了的