Rails安全导读【二】

可以接着上一章来看:

三 Cross-Site Reference Forgery (CSRF)

- 这个攻击方法包含恶意代码或是一个用户信任的已验证的web应用页面的链接。如果session没有过期,攻击者就可能执行未授权的命令 。

在session那一章里,你已经了解,大多数的Rails应用都使用基于cookie的session。要么他们在cookie里存储一个session id,服务端有 个session hash,要么整个session hash都在客户端。当向一个域名发送请求时,如果能找到这个域名的cookie,浏览器会自动附带上这个 cookie。但是,问题是,来自于不同域名的站点的请求,也会发送这个cookie。来看这个例子:

1.Bob同志浏览了一个留言板和一个由hacker制作的html标签内容。这个元素引用的是一个bob的项目管理应用程序里的命令,而不是一个图 片。

2.<img src="http://www.webapp.com/project/1/destroy">

3.Bob的session在www.webapp.com还是活的,因为他刚刚离开几分钟还没有注销。

4.当浏览器发现这个img标签,他试图从www.webapp.com加载这个图像,正如前面所说,他将会发送一个带有有效session id的cookie(bob 的cookie, 他刚登陆www.webapp.com)。

5.位于www.webapp.com的web应用验证了对应session hash的用户信息并且删除了id为一的那个project。之后它返回了一个出乎浏览器意料 的结果,所以它没有显示图像。

6.Bob并没有注意到这次攻击,但是一些天以后,他发现id为一的那个project离他而去了。

有重要的一点要注意,实际制作的图像或链接不一定必须位于Web应用的网域,它可以在任何地方-在一个论坛,博客帖子或电子邮件。

CSRF是一个不可忽略的重要的安全问题。

3.1 CSRF对策

- 第一点,遵循W3C标准,正确使用GET和POST,第二点,在non-GET请求中使用一个安全token将使你远离CSRF.

HTTP协议提供两种类型的请求 - GET和POST(还有其他,但是大多数浏览器不支持),万维网联盟( W3C )为HTTP GET或POST提供了一个选 择清单:

Use GET if:

这个Interaction更像是问题,它是一个安全操作,比如,如查询,读操作,或查阅

Use POST if:

这个Interaction更像是命令,或者

这个Interaction依用户期望的方式改变资源状态,比如订阅一个服务。

用户为这个interaction产生的结果负责。

如果你的应用是restful的,你可能会用额外的http动词,例如 PUT ,DELETE。 然而今天大多数的浏览器并不支持它们,仅仅支持GET和 POST。Rails使用一个隐藏的_method来处理这一障碍(我在这篇文章http://blackanger.blog.51cto.com/140924/108678最后一段引用DHH的话 也说过)。

在一个controller里的验证方法确保具体的actions不会过度使用GET.

时间: 2024-12-03 11:13:09

Rails安全导读【二】的相关文章

Rails测试《二》单元测试unit test

单元测试 单元测试针对model,主要是测试model中的业务规则,测试model中的验证validates规则. 单元测试的文件存放在test/unit文件夹,针对user的model的单元测试文件是user_test.rb. 常用命令 从db/schema.rb中同步测试数据库的结构. 在数据库结构变化之后,就需要执行这个命令,保持测试数据库的结构和最新的数据库结构一致. rake db:test:prepare 还有其他的一些相关命令. 如何编写并进行单元测试 在使用rails g mod

Rails安全导读【三】

四 重定向和文件 另一类安全问题是围饶在web应用里重定向和文件的使用. 4.1 重定向 web应用里的重定向是一个被低估的craker工具:它不仅可以让用户掉入一个陷进网站,而且还可以创造一个完备的攻击. 当用户被允许由一个URL重定向的时候,它由可能就是个漏洞.最明显的攻击是将用户重定向到一个和原始页面一模一样的假页面.这个所 谓的'钓鱼攻击'通过给用户发送一封包含正常的不让人起疑的链接的email, 通过XSS方式往web应用里注射这个恶意链接或者把链接放到一 个虚假的网站(域名看起来差不

Rails安全导读【一】

原文地址:http://guides.rubyonrails.org/security.html 这个指南描述的是在web应用里普遍的安全问题,同时也给出了在Rails里如何避免这些问题.如果你有任何问题,请mail作者,Heiko Webers, at 42 {et} rorsecurity.info. 读完此文后,你应该会了解: 1.所有的对策已经被高亮显示了 2.在Rails里session的概念, 该放什么在session里,以及一些流行的攻击方法 3.只是浏览一个站点,怎么就有安全问题

建立一个典型的Ruby On Rails网站(二)

这是第二部分,主要是Mysql数据库的分布式设计.我建立环境的时候,基本上没有把数据库分开.为用到的时候,做准备吧. 主从结构的数据库设计 www.eol.org 项目本身有主从数据库和读写分开的数据库设计. (Master/Slave)和Rails核心数据库与应用核心数据库分离.主要依靠以下插件实现: use_db : 主要功能是将不同的models 分布到不同的数据库.详细说明见下:(http://rails.elctech.com/blog/using-and-testing-rails-

Rails安全导读【完】

8.注入 - 注入这类攻击是给一个web应用引入恶意的代码或是参数,以便在其安全的上下文里运行.注入的著名的例子就是跨 站点脚本(XSS)和SQL注入. 注入是非常棘手的,因为相同的代码或参数在一个环境是恶意的,但是换个环境却是完全无害的.一个上 下文可以是一个脚本,查询或是程序语言,shell或是Ruby/Rails方法. 下面的章节会涵盖所有重要的注入攻击可能发生的所有上下文.然而 第一部分只涉及一个与注入相关的架构决策. 8.1. 白名单 vs 黑名单 - 当净化(sanitizing),

Rails安全导读【五】

7. 用户管理 - 几乎每个web应用都必须去处理授权和认证.避免你自己重复造轮子,建议你去使用通用的插件.但是请保持它们是最新的.一些额外的 预防措施可以让你的应用更加安全. 有一些Rails可用的授权和认证插件.密码加密以后保存好于直接保存纯文本密码.最流行的插件是可以避免session定制的 restful_authentication. 然而早期的版本在某些情况下你即使没有用户名和密码也可以登陆. 每个新用户可以通过一个带激活码链接的电子邮件来激活他的帐户.帐户激活之后,数据库里激活码那

Rails安全导读【四】

5. 企业内联专用网和管理安全 - 企业内联网和管理界面是最流行的攻击目标, 因为它们有特殊的访问权限. 虽然它会有一些额外的安全措施,可是现实里并非如此. 2007年,在线招聘站点Monster.com遭受了一起定制木马(Tailor-made Trojans)攻击,这是第一只专门从企业内联网偷窃信息的定制木马 .定制木马是非常罕见的,迄今为止,发生率比较低, 但是它也确实是可能发生的,这也是一个客户端主机安全何等重要的例子. 然而,企业 内联网和管理应用程序面对的最大威胁还是XSS和CSRF

特斯拉联合创始人离职之后的创业之路

◆ ◆ ◆ 导读 二十多年前,一名高性能赛车制造专家从新西兰来到美利坚,进入了一家叫做 Altamar Networks 的优化开关系统公司工作,就这样默默无闻的在美国干了十年. 2003年,他的一个名叫Martin Eberhard的邻居创办了一家公司,并邀请他加入,他随即接受了邀请,成为了这家公司的创始人之一.后来这家公司随着一位投资者的加入,在随后的十几年中成长为一家世界范围家喻户晓的科技公司. ◆ ◆ ◆ 离开特斯拉 上文说的专家名叫Ian Wright ,这家公司就是世界知名电动车品牌

Ruby on rails开发从头来(windows)(十二)-订单(Order)

在上次的内容里,我们创建了订单的Model,和表示页面,这次继续编写CHECKOUT的处理. 1.在checkout.rhtml的页面上,有一个CHECKOUT按钮,上次还没有给它编写处理代码,现在在store_controller中添加save_order方法,代码如下: def save_order @cart = find_cart @order = Order.new(params[:order]) @order.line_items <<@cart.items if @order.s