Tornado Web 防止xsrf攻擊

1、xsrf概念html

  xsrf 中文名稱爲跨站請求僞造,也被稱爲csrf(Cross-site request forgery)。因爲目標站無token/referer限制,致使攻擊者能夠用戶的身份完成操做達到各類目的。web

  hyddd(陳曦明)的文章很詳細地描述了這種攻擊的發起方式:http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html ajax

2、Tornado Web防止xsrf攻擊的方式json

  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請求的實現分別以下:cookie

<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。app

可重寫一個BaseHandler實現。函數

class BaseHandler(tornado.web.RequestHandler):
    def __init__(self,  *argc, **argkw):
        self.xsrf_token
相關文章
相關標籤/搜索