Tornado Web 防止xsrf攻击
2016-01-07 17:05
197 查看
一、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保护:
当xsrf_cookies的值为true时,Tornado将拒绝请求参数中不包含正确的_xsrf值的POST、PUT和DELETE请求,即你必须在每次的post、put、delete请求中添加_xsrf参数。form表单和ajax请求的实现分别如下:
在使用xsrf_form_html时XSRF的cookie自动被设置,但是如果你的应用程序全部使用ajax的请求方式,则还需添加 self.xsrf_token ,否则cookie("_xsrf")的值会为undefined。
可重写一个BaseHandler实现。
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值的POST、PUT和DELETE请求,即你必须在每次的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
相关文章推荐
- java左移右移运算符
- 2016/1/7 菱形图 上下两个外循环 各自套三个内循环 规律总结
- 自动获取地理位置
- Java线程池
- Ubuntu系统中安装MongoDB及其启动命令mongod的教程
- mysql,show processlist,查询一直sending data,影响查询性能
- Jekyll:解决Auto-regeneration can no longer be set from your configuration file(s)
- Git学习
- 让python类的方法或特性变成私有
- IAR version and Crack Downloads
- JPA游离态问题
- css3-动画
- android BroadcastReceiver动态监听网络连接
- 多表连接查询
- Oracle行转列、列转行的Sql语句总结
- php数据库链接
- 安装并配置基于虚拟用户的vsftpd
- MySQL Proxy使用
- Qt 5入门指南之Qt Quick编程示例
- 自定义NSOperation