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)
}
});
}