tornado利用check_xsrf_cookie()防止XSRF

tornado利用check_xsrf_cookie()防止XSRFtornado利用check_xsrf_cookie()防止XSRF

大家好,又见面了,我是你们的朋友全栈君。

跨站请求伪造:xsrf或csrf。
tornado开启xsrf_cookies验证。

xsrf_cookies=True

tornado的RequestHandler中的有一个check_xsrf_cookie()方法。它会从请求中获取_xsrf参数,并提供校验。
前端模板中添加{% raw xsrf_form_html() %}。

def xsrf_form_html(self):
    return '<input type="hidden" name="_xsrf" value="' + \
        escape.xhtml_escape(self.xsrf_token) + '"/>'

ajax post,从cookie中获取_xsrf。

function getCookie(name) { 
   
    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return r ? r[1] : undefined;
}
function set_xsrf(data){ 
   
    var secure_key = getCookie("__xsrf") || "";
    if (isNotEmpty(secure_key)) {
        data["__xsrf"] = secure_key;
    }
    return data;
}
var data = {
  
  'name': 'JianW'};
set_xsrf(data);
$.ajax({
    url : url,
    data : data,
    dataType : "JSON",
    type : "POST",
    async : false,
    success : function(ret) { 
   
        code_list.push(ret.code);
    }
});

后台RequestHandler中check_xsrf_cookie方法。

def check_xsrf_cookie(self):
    token = (self.get_argument("_xsrf", None) or
             self.request.headers.get("X-Xsrftoken") or
             self.request.headers.get("X-Csrftoken"))
    if not token:
        raise HTTPError(403, "'_xsrf' argument missing from POST")
    _, token, _ = self._decode_xsrf_token(token)
    _, expected_token, _ = self._get_raw_xsrf_token()
    if not _time_independent_equals(utf8(token), utf8(expected_token)):
        raise HTTPError(403, "XSRF cookie does not match POST argument")

在__execute()方法中,有如下代码片段。若开启了xsrf_cookies则会来执行之前的check_xsrf_cookie()

# If XSRF cookies are turned on, reject form submissions without
# the proper cookie
if self.request.method not in ("GET", "HEAD", "OPTIONS") and \
        self.application.settings.get("xsrf_cookies"):
    self.check_xsrf_cookie()

可以通过继承Basehandler并重写check_xsrf_cookie(),来对部分请求去除xsrf_cookie防御,如去除/rest开头的请求的校验。

def check_xsrf_cookie(self):
    if not self.request.path.startswith('/rest'):
        ...
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144374.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月12日 上午10:20
下一篇 2022年5月12日 上午10:20


相关推荐

  • vue.config.js打包优化(有效)「建议收藏」

    vue.config.js打包优化(有效)「建议收藏」//百度上的资料五花八门让人眼花缭乱,别急,这时候我替你亲身经历了,有需要的可以参考下,先上效果图,以免你们以为我吹牛逼,嘻嘻未优化之前的//感觉太大了抬它优化之后的废话不多说了,上代码是重点这些是必要的下载/*cnpminstallimage-webpack-loader–save-devcnpminstallcompression-webpack-plugin–save-devcnpminstalluglifyjs-webpack-plugin–sa

    2022年6月12日
    93
  • 2022年想做后端开发学Java还是C++更有前景?

    2022年想做后端开发学Java还是C++更有前景?不知道大家在大学的时候有没有这样的疑惑,做后端开发学Java还是C++呢?可能大家和我一样,都有过这种二选一的疑惑,如果我毕业后想从事Java后端开发,那么应该按照怎么样的路线学习呢?网上关于这个话题的文章很多,但是大部分只是对知识点和模块的简单罗列,只是让大家知道有这么些东西要学,我从校招生的角度来谈一下这个话题,介绍一下我从学习C++转向学习Java的学习历程,主要讨论Java的学习路线和找工作相关的情况,谈谈我是如何在短时间内通过自学Java进入阿里和美团的。当初选择语言的纠结我大一大二的

    2022年7月17日
    49
  • 广告平台精准推送系统解决方案架构「建议收藏」

    广告平台精准推送系统解决方案架构「建议收藏」以上就是广告精准推送的一个架构图。广告联盟是由多家广告提供商提供形成的一个组织,提供了多个平台的收集到的数据进行整合,数据的分析、清理,计算、统计等,提供向需要投放广告的广告主提供了一个投放系统平台。当用户进入门户网站或者app时,不同的用户看到的是不同的广告,广告联盟的系统计算出了不同用户或者用户群体的不同需求,通过广告推荐引擎系统和数据仓库中的统计数据以及用户的需求,展示给对应需求的用户观看,…

    2022年10月5日
    4
  • 关于防范OpenClaw(“龙虾”)开源AI智能体安全风险的预警提示

    关于防范OpenClaw(“龙虾”)开源AI智能体安全风险的预警提示

    2026年3月13日
    3
  • 百度发布Ernie 4.5 Turbo和X1 Turbo:更快、更便宜、更强大

    百度发布Ernie 4.5 Turbo和X1 Turbo:更快、更便宜、更强大

    2026年3月12日
    3
  • 收音机fm和am的区别是什么_FM收音机

    收音机fm和am的区别是什么_FM收音机1、频率区别FM=FrequencyModulation调频,微波;微波传输,信号质量高,传输成本低,发射功率小,覆盖范围小,受地理因素影响较大,一般作为城市广播的首选。比如你的家乡城市台,

    2022年8月6日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号