专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Ruby教程 » rails:Rails安全导读【 4】 »正文

rails:Rails安全导读【 4】

来源: 发布时间:星期四, 2009年1月8日 浏览:2次 评论:0
  5. 企业内联专用网和管理安全  — 企业内联网和管理界面是最流行攻击目标, 它们有特殊访问权限. 虽然它会有些额外安全措施可是现实里并非如此

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

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

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

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

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

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

  另个例子是通过GSRF改变Google Adsenseemail地址和密码如果受害者是登陆到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.comcookie反的亦然

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

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

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


  Mass-assignment为你省去了大量工作, 你不必要去设置每个单独只需要给思路方法传个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这种方式创建个新用户那么这个用户很有可能会变成个管理员


  6.1. 对策  为了避免这个问题 Rails在ActiveRecord类里提供了两个类思路方法去控制访问你那些model属性attr_protected思路方法可以设置个不被mass-assignment方式访问属性清单(黑名单):

attr_protected :admin

  attr_accessible是个更好方式它遵循了白名单原则 这和attr_protected是完全相反它列出是可被访问属性清单 所有其他属性会被保护这样你就不会忘记去保护在开发过程中增加属性这里有个例子:



attr_accessible :name

  如果你想要保护个属性你就必须独立去指定它 :

params[:user] #=> {:name => "ow3ned", :admin => true}
@user = User.(params[:user])
@user.admin #=> false # not mass-assigned
@user.admin = true
@user.admin #=> true




相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: