Tornado Web 防止xsrf攻击

一、xsrf概念

  xsrf 中文名称为跨站请求伪造,也被称为csrf(Cross-site request forgery)。由于目标站无token/referer限制,导致攻击者可以用户的身份完成操作达到各种目的。

  hyddd(陈曦明)的文章很详细地描述了这种攻击的发起方式:http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html 

二、Tornado Web防止xsrf攻击的方式

  Tornado Web服务器从设计之初就在安全方面有了很多考虑,使其能够更容易地防范那些常见的漏洞。

  开启防止xsrf攻击方式的方法很简单,首先在应用的构造函数中包含xsrf_cookies参数来开启XSRF保护:

settings = {
    "cookie_secret": "bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E=",
    "xsrf_cookies": True
}
application = tornado.web.Application([
    (r'/', MainHandler),
    (r'/purchase', PurchaseHandler),
], **settings)

  当xsrf_cookies的值为true时,Tornado将拒绝请求参数中不包含正确的_xsrf值的POSTPUTDELETE请求,即你必须在每次的post、put、delete请求中添加_xsrf参数。form表单和ajax请求的实现分别如下:

<form action="/purchase" method="POST">
    {% raw xsrf_form_html() %}
    <input type="text" name="title" />
    <input type="text" name="quantity" />
    <input type="submit" value="Check Out" />
</form>
function getCookie(name) {
    var c = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return c ? c[1] : undefined;
}

jQuery.postJSON = function(url, data, callback) {
    data._xsrf = getCookie("_xsrf");
    jQuery.ajax({
        url: url,
        data: jQuery.param(data),
        dataType: "json",
        type: "POST",
        success: callback
    });
}

在使用xsrf_form_html时XSRF的cookie自动被设置,但是如果你的应用程序全部使用ajax的请求方式,则还需添加 self.xsrf_token ,否则cookie("_xsrf")的值会为undefined。

可重写一个BaseHandler实现。

class BaseHandler(tornado.web.RequestHandler):
    def __init__(self,  *argc, **argkw):
        self.xsrf_token

 

  

转载于:https://www.cnblogs.com/xuexue-bit/p/5110496.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值