zoukankan      html  css  js  c++  java
  • 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)
                }
            });
        }
    

      

  • 相关阅读:
    JSOIWC2019游记
    基础网络流题单
    【题解】Luogu P2472 [SCOI2007]蜥蜴
    【题解】Luogu P2057 [SHOI2007]善意的投票
    凸包略解
    【题解】Luogu P4324 [JSOI2016]扭动的回文串
    【题解】Luogu P4054 [JSOI2009]计数问题
    kruscal重构树略解
    【题解】bzoj 4478 [Jsoi2013]侦探jyy
    【题解】4465 [Jsoi2013]游戏中的学问
  • 原文地址:https://www.cnblogs.com/crucial/p/6661594.html
Copyright © 2011-2022 走看看