快速业务通道

Rails安全导读【三】 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

Rails安全导读【三】

时间:2011-07-18 51cto博客 blackanger译

四 重定向和文件

另一类安全问题是围饶在web应用里重定向和文件的使用。

4.1 重定向

web应用里的重定向是一个被低估的craker工具:它不仅可以让用户掉入一个陷进网站,而且还可以创造一个完备的攻击。

当用户被允许由一个URL重定向的时候,它由可能就是个漏洞。最明显的攻击是将用户重定向到一个和原始页面一模一样的假页面。这个所 谓的‘钓鱼攻击’通过给用户发送一封包含正常的不让人起疑的链接的email, 通过XSS方式往web应用里注射这个恶意链接或者把链接放到一 个虚假的网站(域名看起来差不多,页面也相同的站点)。它是毫不让人怀疑的,因为这个链接的起始URL是这个正常的web应用,指向恶意站 点的URL都被隐藏在重定向参数里:http://www.example.com/site/redirect?to= www.attacker.com. 这里由个例子:

def legacy    redirect_to(params.update(:action=>''main'')) end

如果用户访问legacy这个action,将会被重定向到mail action。这样做的意图是为了维护legacy的参数,并把这些参数传到main action。 但是,如果它包含了一个host key,就会被攻击者利用。

http://www.example.com/site/legacy?param1=xy&param2=23&host=www.attacker.com

如果它在url的尾部, 将很难被注意到,用户就被神不知鬼不觉的重定向到了攻击者的页面。一个简单的对策是,在legacy action里只包 含预期的参数(白名单的办法,不是取消所有意向不到的参数)。如果你重定向到一个网址,你需要用白名单或是正则表达式检查它。

4.1.1  Self-contained XSS(自载的xss攻击)

另一个重定向和self-contained XSS 攻击是通过firefox和opera里使用的一种数据协议。该协议直接在浏览器里显示其内容,可以使任何 内容,从html,javascript到图片。(这不是一个漏洞,而是一个功能)

data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K

这个例子是一个Base64编码的显示简单消息框的javascript。在一个重定向的URL里,一个攻击者能用它里面的恶意代码重定向这个url。

更详细的攻击原理可以参看这里:http://www.gnucitizen.org/blog/self-contained-xss-attacks/

对策:do not allow the user to supply (parts of) the URL to be redirected to.(说实话,这里我没看明白)

4.2 文件上传

- 确保文件上次不覆盖重要的文件,和同步的媒体文件进程。

很多web应用允许用户上传文件,用户可以选择的文件名字,应该随时被过滤,因为攻击者可以用恶意的文件名覆盖服务器上任意文件。如 果你在/var/www/uploads存储上传文件,用户输入一个文件名:../../../etc/passwd, 它可能覆盖一个重要文件。

当过滤用户输入的文件名时,不要试图去删除恶意的部分。想一想,如果去掉所有的../ , 攻击者输入.. .. //, 那么结果就成了../。最 好是用白名单的方式,用一套可接受的字符去检查文件名的有效性。一旦它不是一个有效的文件名,则拒绝它(或替换它),但是不删除它们 。这有一份来自attachment_fu插件的文件名清单:

def sanitize_filename(filename)    returning filename.strip do |name|        # NOTE: File.basename doesn''t work 

right with Windows paths on Unix        # get only the filename, not the whole path        name.gsub! /^.*(\\|\/)/, 

''''        # Finally, replace all non alphanumeric, underscore        # or periods with underscore        

name.gsub! /[^\w\.\-]/, ''_''    endend

Rails安全导读【三】(2)

时间:2011-07-18 51cto博客 blackanger译

一个重大的缺陷是,同步处理文件上传(比如attachment_fu插件处理多个图片上传),使其易受dos攻击。攻击者可以从很多电脑同时启动 图像上传,从而增加服务器负载,最终让服务器崩溃。

要解决这一点,最好是异步处理媒体文件。Save the media file and schedule a processing request in the database. A second process will handle the processing of the file in the background.

4.3 Executable code in file uploads

- 上传文件里的代码在特定的环境下可能被执行,如果Rails / Public 目录是Apache的主目录,请不要把文件上传到此。

如果一个攻击者上传个file.cgi, 有人下载这个文件,代码就会被执行。

4.4 File downloads

- 确保用户无法下载任意文件。

正如你必须过滤上传的文件名一样,对下载文件也应该这样做。下面这个send_file()方法发送文件到客户端,如果你用了一个文件名没有 过滤, 用户输入什么都可以被下载。

send_file(''/var/www/uploads/'' + params[:filename])

简单的通过“../../../etc/passwd”这样一个文件名去下载服务器的登陆信息。简单的解决方式是,检查请求的文件是在允许的目录下:

basename = File.expand_path(File.join(File.dirname(__FILE__), ''../../files'')) filename = File.expand_path(File.join(basename, @file.public_filename)) raise if basename =!      File.expand_path(File.join(File.dirname(filename), ''../../../'')) send_file filename, :disposition => ''inline''

另外一个方式是在数据库里存储文件名。这种方式可以避免上传文件的代码被执行。attachment_fu用的就是类似的方式。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号