Rails安全导读【三】 - 编程入门网
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. 这里由个例子:
如果用户访问legacy这个action,将会被重定向到mail action。这样做的意图是为了维护legacy的参数,并把这些参数传到main action。 但是,如果它包含了一个host key,就会被攻击者利用。 http://www.example.com/site/legacy?param1=xy¶m2=23&host=www.attacker.com 如果它在url的尾部, 将很难被注意到,用户就被神不知鬼不觉的重定向到了攻击者的页面。一个简单的对策是,在legacy action里只包 含预期的参数(白名单的办法,不是取消所有意向不到的参数)。如果你重定向到一个网址,你需要用白名单或是正则表达式检查它。 4.1.1 Self-contained XSS(自载的xss攻击) 另一个重定向和self-contained XSS 攻击是通过firefox和opera里使用的一种数据协议。该协议直接在浏览器里显示其内容,可以使任何 内容,从html,javascript到图片。(这不是一个漏洞,而是一个功能)
这个例子是一个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()方法发送文件到客户端,如果你用了一个文件名没有 过滤, 用户输入什么都可以被下载。
简单的通过“../../../etc/passwd”这样一个文件名去下载服务器的登陆信息。简单的解决方式是,检查请求的文件是在允许的目录下:
另外一个方式是在数据库里存储文件名。这种方式可以避免上传文件的代码被执行。attachment_fu用的就是类似的方式。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |