Rails安全导读【五】

7. 用户管理

— 几乎每个web应用都必须去处理授权和认证。避免你自己重复造轮子,建议你去使用通用的插件。但是请保持它们是最新的。一些额外的 预防措施可以让你的应用更加安全。

有一些Rails可用的授权和认证插件。密码加密以后保存好于直接保存纯文本密码。最流行的插件是可以避免session定制的 restful_authentication。 然而早期的版本在某些情况下你即使没有用户名和密码也可以登陆。

每个新用户可以通过一个带激活码链接的电子邮件来激活他的帐户。帐户激活之后,数据库里激活码那一列的值会被设为NULL, 如果某人发 送一个这样的请求,他将被以第一次激活的用户身份记录到数据库里。 (有机会成为管理员):

http://localhost:3006/user/activate
http://localhost:3006/user/activate?id=

这是可能的,因为在某些服务器上, 以id为参数的这种方式,如params[:id], 将会是nil。然而,这里有以个activation action里的 finder方法:

User.find_by_activation_code(params[:id])

如果参数是nil,那么SQL查询的结果会是:

SELECT * FROM users WHERE (users.`activation_code` IS NULL) LIMIT 1

这样,在数据库记录里的第一个激活用户就被查到,返回这个结果,攻击者就登陆了. 你能找到更多的信息在我的blog帖子里。 不时的更 新你的插件是明智的. 此外,你可以查看你的应用找到更多的这样的漏洞。

7.1.暴力猜解帐户

— 暴力猜解帐户攻击是使用错误的登陆证书去尝试。用更通用的错误信息来阻断这种攻击,可能需要输入一个验证码.

你web应用的用户名列表可能会被拿去用一组密码来做暴力猜解, 因为大多数的人不使用复杂的密码。大多数的密码是字典里单词和数字组 合。因此配备一组用户名名单和一个黑客字典,一个自动程序,可能在几分钟之内就能找到正确的密码。

因为这个,大多数的web应用会在它们不正确的时候显示一个通用的错误信息 “用户名或密码不正确”。如果显示的错误信息是“用户名没 有被找到”,那么攻击者就会自动编制一份用户名名单。

然而,大多数的web应用设计者都忽视了忘记密码页。 当输入用户名或email地址的时候,这些网页往往很诚实的就显示找到(没有找到) 的消息。这使攻击者能够编制一份可以暴力猜解帐号的用户名名单。

在忘记密码这个网页上也显示一个通用的错误消息可以减轻这种攻击。此外,在某一个ip地址多次登陆失败之后你可以要求输入一个验证码 。但是请注意,这不是一个完全防弹的做法, 这些自动的程序也可以频繁的改变自己的ip地址。只是给攻击增加障碍。

7.2.帐户劫持

— 很多web应用很容易劫持帐户。为什么不能使它变得更困难呢 ?

7.2.1. 密码

想想这种情况,一个攻击者窃取了一个用户的session cookie,因此他们可以共用同一个应用。如果这个应用可以很容易就修改了密码,那 么攻击者只需要几个鼠标点击就劫持了这个用户的帐号。或者,如果修改密码的表单容易受到CSRF攻击的话,那么攻击者就会通过引诱受害者 到一个藏有制作好的CSRF IMG -TAG的网页来修改他的密码。对策是,让修改密码的表单不能被CRSF攻击,当然在改变密码的时候,也需要用户 去输入旧密码。

7.2.2. E-Mail

然而,攻击者也可以通过修改email地址来接管帐户。当他修改email地址之后,他会去一个忘记密码网页,可能一个新的密码就会被发送到 攻击者的电子邮箱里了。对策是,当修改email地址的时候,也需要输入一个密码。

7.2.3. 其他

依靠不同的web应用,可能有更多的劫持用户帐户的方法。在许多情况下,CSRF和XSS都有助于这样做。例如,Google Mail的一个CSRF漏洞 ,在这个概念验证的攻击中,受害者会被引诱到一个被攻击者控制的站点。在这个站点有一个制作好的IMG-tag, 该tag的结果是,发送一个 http get请求去改变Google Mail的邮件过滤器设置。如果这个受害者登陆到Google Mail,攻击者会改变过滤器设置将他的所有邮件转发到攻 击者的邮箱里。这几乎和劫持整个帐户一样邪恶。对策是, 审核你的web应用逻辑来堵上所有的XSS和CSRF漏洞。

时间: 2024-11-27 15:38:00

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

Rails安全导读【三】

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

Rails测试《五》实战单元测试

用factory-girl替换fixtures来创建模拟数据 fixtures 在前面我们介绍了,rails的测试系统默认使用fixtures来创建模拟数据,这些数据以yaml的格式书写,放在db/fixtures文件夹中,每个model都有一个对应的文件,test/fixtures/users.yml. 在测试启动的时候这些fixtures中的数据会加载到测试数据库,并且加载到变量中,供单元测试和功能测试使用. 使用fixtures有几个不利的因素,使得他们处于不利的位置. 最主要的一个因素是

Rails安全导读【完】

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

Rails安全导读【四】

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

Rails安全导读【二】

可以接着上一章来看: 三 Cross-Site Reference Forgery (CSRF) - 这个攻击方法包含恶意代码或是一个用户信任的已验证的web应用页面的链接.如果session没有过期,攻击者就可能执行未授权的命令 . 在session那一章里,你已经了解,大多数的Rails应用都使用基于cookie的session.要么他们在cookie里存储一个session id,服务端有 个session hash,要么整个session hash都在客户端.当向一个域名发送请求时,如果

Rails安全导读【一】

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

中移动要求4G手机五模 国产芯片商集体抱怨

[导读]五模十频虽然是未来发展趋势,但欲速则不达. 腾讯科技 郭晓峰 3月7日报道随着中国联通于18日启动4G服务,国内三大运营商正式进入4G竞赛.而中国移动近期的策略更是显出势不可挡,但这样的做法却遭到产业链的抱怨.据知情人士向腾讯科技透露,中国移动近期对芯片商下发的一条通知称,从5月开始,中国移动要求入库的TD-LTE 4G手机必须支持五模(入库是指中移动定制类产品),三模手机入库只截止到4月30日.对于不入库的产品中移动将给予补贴,但是对渠道的补贴.目前提供五模芯片的厂商只有高通,此举极大

Ruby on rails开发从头来(五十七)- ActiveRecord基础(多对多关联关系)

在Rails中多对多关联通过在关联表对应的类中声明has_and_belongs_to_many来实现. 在数据库中,多对多关联使用中间表来实现,表中包括关联表的主键,Active Record假定这个中间表的名字是由关联表的名字根据字母的顺序串联起来得到的.例如,关联表为categories和products,中间表的名字就是categories_products. 开发从头来(五十七)- ActiveRecord基础(多对多关联关系)-rails activerecord"> 注意我们

Ruby on rails开发从头来(五十六)- ActiveRecord基础(一对多关联关系)

一对多关联可以使我们表示一组对象,例如,一个order可以包含有任意多个line item,在数据库中,所有的line item记录都通过外键关联到特定的order. 在Active Record中,通过在父对象中的has_many来定义到子对象的关联,在子对象中使用belongs_to来指定父对象.我们已经在上一篇中了解了belongs_to声明,实际上,在一对多的情况下,和一对一是相同的,所以我们来了解has_many声明. 开发从头来(五十六)- ActiveRecord基础(一对多关联关