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

      

  • 相关阅读:
    条件判断和循环
    list 和tuple的使用
    python的五大数据类型
    简单的一个程序,猜字游戏
    redhat7 nfs的配置以及auto自动挂载
    nmcli添加网卡 并且修改设备名字 添加IP地址
    RHEL7 系统ISCSI存储环境搭建
    Java分布式锁
    24个Jvm面试题总结及答案
    最新天猫3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper
  • 原文地址:https://www.cnblogs.com/xuexue-bit/p/5110496.html
Copyright © 2011-2022 走看看