Rails安全导读【完】 - 编程入门网
ter_html]).to_html
=> "alert(1)"
然而它也不是过滤所有的HTML, 通过一些设计,一些标记还是会被留下,例如 <a>:
8.5.1. 对策 推荐使用RedCloth结合白名单输入过滤器的功能。 8.6. Ajax 注入 — 在Ajax actions里,并不会出现类似的安全问题. 这至少是个例外。然而,如果你的这个action没有渲染一个页面,那么必须在 controller里转义这些输出。 如果你用 in_place_editor plugin, or 或者是返回一个字符串的actions, 而不是渲染一个页面,你就必须转义那些action里返回来的值 。否则,如果返回来的值包含一个XSS脚本,恶意代码会被执行后返回浏览器。使用h()方法转义每一个输入的值。 8.7. RJS 注入 — 也不要忘记在JavaScript (RJS) 模板进行转义。 这个RJS API是基于Ruby代码来生成JavaScript块的,因此允许你可以在服务端操作一个页面或者页面的一部分。如果你允许用户在RJS模板 里输入,请用在javascript函数里使用escape_javascript(), 在HTML这部分使用h()。否则攻击者能执行任意的JavaScript代码。 Rails安全导读【完】(6)时间:2011-07-18 51cto博客 blackanger译8.8. 命令行注入 — 谨慎使用用户提供的命令行参数。 如果你的应用必须在操作系统上执行命令,这样几个Ruby方法: exec(command), syscall(command), system(command) 和 `command`。如 果用户可以输入整个命令或其一部分,你必须要特别小心用这些函数。这是因为大多数的shell,可以执行使用分号(;)和管道符(|)连接的 两个命令。 一个对策是使用system(command, parameters) 来安全的传送命令行参数。 system("/bin/echo","hello; rm *") # 输出的是 "hello; rm *" 但是不会删除文件 8.9. Header 注入 — HTTP headers 是动态生成的,在某些情况下可能是被注入的用户输入。这会导致错误的重定向,XSS 或 HTTP 响应截断攻击。 HTTP请求头有一个Referer, User-Agent (客户端软件) 和 Cookie域等等。响应头比如有一个状态码,cookie和Location (重定向目标 URL) 域。所有的这些都是用户提供的,并或多或少可以被操作。记住去过滤这些header域。例如当你在管理员区域显示user agent。 此外,还有一点很重要,就是当你构建一个基于用户输入响应头部分的时候你应该知道自己在做什么。例如你想把用户重定向到一个特别的 页面。为了做到这一点,你在一个form表单里引入了referer字段去重定向到指定的地址 :
Rails把这些字符串放到Location头里,并且给浏览器发送一个302(重定向)状态码 。那么恶意用户首先会这样做:
Rails2.1.2以下版本都有这个bug (不包括此版本), 一个黑客可能注入任意的header域; 例如这样的:
注意这个 "%0d%0a" 是"\r\n"的URL编码。因此,第二个例子的HTTP header结果就是下面这样,因为第二个Location 覆盖了第一个的。
所以头注入的攻击感染 是基于在header域的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |