csrf用於防止跨站請求僞造javascript
啓用csrf後,在get訪問時分配給客戶端一個token,客戶端在提交POST時請求時需提交此token才能夠正常提交,html
若是沒有提交或提交的token值不正確,那麼提交後就會被「403: Forbidden」阻止java
使用csrf時,首先在setting中開啓使用csrf:python
settings = {
'template_path':'views',
'static_path':'static',
'xsrf_cookies': True,
}
1、經過form表單的方式來進行POST提交ajax
在模板的form表單中添加上獲取token的輸出:cookie
<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')
2、使用Ajax進行異步POST提交post
啓用了使用csrf後,在get方式瀏覽的某個頁面後,服務端程序會想Cookie中寫入token信息url
在使用Ajax進行異步提交時能夠經過獲取cookie中的token信息來進行提交spa
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) } }); }