Rails安全导读【四】

5. 企业内联专用网和管理安全

— 企业内联网和管理界面是最流行的攻击目标, 因为它们有特殊的访问权限. 虽然它会有一些额外的安全措施,可是现实里并非如此。

2007年,在线招聘站点Monster.com遭受了一起定制木马(Tailor-made Trojans)攻击,这是第一只专门从企业内联网偷窃信息的定制木马 。定制木马是非常罕见的,迄今为止,发生率比较低, 但是它也确实是可能发生的,这也是一个客户端主机安全何等重要的例子. 然而,企业 内联网和管理应用程序面对的最大威胁还是XSS和CSRF.

XSS 如果你的应用重现了恶意用户从外网的输入,那么你的应用会受到XSS的危害。用户名,评论,垃圾邮件等是容易被XSS攻击的常见的 例子。

在管理界面或是内网只要一个地方没有被消毒(sanitized)就会导致整个应用遭受危害。可能的漏洞包括窃取有特权管理员的cookie, iframe注入(Monster.com就是被这样攻击的)窃取管理员密码或者是通过浏览器的安全漏洞安装一款恶意软件来接管管理员的计算机。

参看Injection章节,有XSS的对策,以及推荐了一款在内网和管理员界面使用的SafeErb的插件。

CSRF 跨站点 Reference 伪造 (CSRF) 是一个强大的攻击方法,它允许攻击者能做内网用户和管理员能做的一切事情。正如你已经看到上面 几部分里CSRF如何工作的,这里也有一些例子,说明攻击者能在内网和管理界面做些什么。

一个现实世界的例子是一个通过CSRF重新配置路由的例子。这个攻击者发送了一封包含CSRF的恶意的电子邮件给墨西哥的用户。电子邮件声 称有一个电子贺卡等着他们,但是它也包含了一个可以造成一个HTTP- GET请求去重新设置用户路由的图像标记(image tag)(这在墨西哥比 较流行)。这个请求改变了DNS设置以便到墨西哥银行的请求可以映射到攻击者的站点。每个访问银行网站的人通过这个路由都能看到攻击者的 伪造站点,并且他的证书被盗。

另一个例子是通过GSRF改变Google Adsense的email地址和密码。如果受害者是登陆到Google Adsense,一个Google竞投广告的管理界面, 攻击者可能会改变他的安全证书。

另一种流行的攻击是你的web应用上的垃圾, 在你的blog或者论坛传播恶意XSS. 当然,攻击者必须知道URL结构,但是大多数的Rails URLS 是相对简单,或者,如果它是一个开源应用的管理界面,是很容易被他们找出的。攻击者甚至可以做1000个仅包括恶意img tags的幸运的猜测 去尝试每一个可能的组合。

对于在管理界面和内网应用的CSRF对策,请参考CSRF章节里的对策。

5.1. 额外的预防措施

一般的管理界面是这样工作的: 它的位置是www.example.com/admin, 可只有在用户模式被设置了admin tag的才能访问。重现用户的输入, 然后删除,增加,修改想要的任何数据。这里有一些想法:

考虑最坏的情况是非常重要的: 如果某人真的掌握了我的cookie或是用户证书。你能控制角色为管理界面去限制攻击者的可能性。或者除了 哪些用于公共部分的应用,为管理界面提供一个专门的登陆证书如何,或者对于每次重要的action提供一个密码 ?

是否这个管理员真的必须能从世界各地访问这个接口? 考虑一下根据ip地址段来限制登陆。检测request.remote_ip 了解用户的IP地址. 这并不是防弹的,而只是制造一个障碍。但请记住,有可能有人在使用代理。

把管理界面放到一个专门的子域,例如admin.application.com,使其用户管理成为一个单独的应用程序。这使得攻击者不可能从通常的 www.application.com窃取cookie。这是因为在你的浏览器里存在同一个原生标准: 在www.application.com的注入脚本(XSS)不能读取 admin.application.com的cookie,反之亦然。

6. Mass assignment

— 是指对Model.new(params[:model]) 允许攻击者设置任意数据库列的值没有任何防范措施。

这个mass-assignment可能变成一个问题, 因为它允许攻击者通过操作hash传到一个model的new()方法里来设置model的任意属性 :

def signup
  params[:user] #=> {:name => “ow3ned”, :admin => true}
  @user = User.new(params[:user])
end

Mass-assignment为你省去了大量的工作, 因为你不必要去设置每个单独的值。只需要给new()方法传一个hash,或者是指定attributes= (attributes)hash值,就可以在hash里设置一个model的属性。问题是,在controller里经常使用可用的hash参数会被攻击者操纵。 他可能会 这样改变URL:

http://www.example.com/user/signup?user[name]=ow3ned&user[admin]=1

这样会在controller里设置如下的参数 :

params[:user] #=> {:name => “ow3ned”, :admin => true}
如果你通过mass-assignment这种方式创建一个新用户,那么这个用户很有可能会变成一个管理员。

时间: 2024-08-02 01:43:19

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

Rails安全导读【三】

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

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

缓存和页面显示,这是最后一个部分了,真没想到一个连载竟然用了几个小时.累了... 外部链接和跟踪 如果想对外部网站资源进行链接和跟踪,可以使用如下的helper方法: Ruby代码 external_link_to(text,url) external_link_to(image_tag(image),url) 这两种生成链接的方法(一种是文字链接,一种是图形链接)都可以对链接情况进行日志记录.如果将environment.rb文件中的$USE_EXTERNAL_LINK_POPUPS 参数设置

Rails测试《四》实战单元测试unit test

之前的博客介绍了一些rails测试相关的知识.测试文件的位置,测试的类型,测试常用命令,以及可用的一些资源,以及如何利用fixtures生成模拟数据. 今天我们来实际的写一下单元测试,用到的知识主要是fixtures和unit test.fixtures用来模拟数据,unit test就是我们今天的主角-单元测试. 今天的代码将以blog项目为背景,为这个项目写一些单元测试. 这个项目的代码可以在https://github.com/woaigithub/blog获取到,而且项目已经部署到htt

Rails安全导读【完】

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

Rails安全导读【五】

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

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.只是浏览一个站点,怎么就有安全问题

提升Ruby on Rails性能的几个解决方案_ruby专题

简介 Ruby On Rails 框架自它提出之日起就受到广泛关注,在"不要重复自己","约定优于配置"等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率. ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可实现非常易用的持久化,Github 和 Rubygems 上丰富多样的 Rails 插件是 Rails 开发高效率的又一有力保障.Rails 是一个真正彻底的 MVC(Model-View-Controller) 框

Ruby on rails开发从头来(四十三)- ActiveRecord基础(连接数据库)

Active Record抽象了数据库连接的概念,帮助应用程序来处理底层的数据库链接的细节,作为替代,Active Record使用通用的调用,将细节委托给一组数据库适配器. 可以使用establish_connection( )方法来制定连接,下面的例子创建了一个mysql数据库连接,数据库的名字是railsdb,服务器的Host名为dbserver.com,用户名为railsuser,密码为railspw. ActiveRecord::Base.establish_connection( :