csrf用于防止跨站请求伪造
启用csrf后,在get访问时分配给客户端一个token,客户端在提交POST时请求时需提交此token才可以正常提交,
如果没有提交或提交的token值不正确,那么提交后就会被“403: Forbidden”阻止
使用csrf时,首先在setting中开启使用csrf:
settings = {
'template_path':'views',
'static_path':'static',
'xsrf_cookies': True,
}
一、通过form表单的方式来进行POST提交
在模板的form表单中添加上获取token的输出:
<form method="post" action="/csrf/">
{% raw xsrf_form_html() %}
<p><input type="text" name="username" placeholder="用户名"></p>
<p><input type="password" name="password" placeholder="密码"></p>
<p><input type="submit" value="提交"></p>
</form>
服务端的程序:
class XcrfHandler(BaseHandler): def get(self, *args, **kwargs): self.render('login.html') def post(self, *args, **kwargs): self.write('Csrf_POST')
二、使用Ajax进行异步POST提交
启用了使用csrf后,在get方式浏览的某个页面后,服务端程序会想Cookie中写入token信息
在使用Ajax进行异步提交时可以通过获取cookie中的token信息来进行提交
function getCookie(name) { var r = document.cookie.match("\b"+name+"=([^:]*)\b"); return r ? r[1] : undefined; } function ajaxSubmit(){ $.ajax({ url: "/csrf/", type:'POST', data: {id:123, _xsrf:getCookie("_xsrf")}, success: function(r){ console.log(r) } }); }