tornado 之 csrf

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)
            }
        });
    }
相關文章
相關標籤/搜索