tornado 之 csrf

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

  

 

posted @ 2017-04-03 12:02  taibai  阅读(962)  评论(0编辑  收藏  举报