免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1150 | 回复: 0
打印 上一主题 下一主题

通过提交脚本来进行攻击 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-20 11:15 |只看该作者 |倒序浏览

                另外一种常见的攻击方式就是通过提交一些脚本:
例如我们在网页上显示comments, 并且有一个表格供用户提交新的comments, 那么用户如果在提交的内容中加入脚本命令,而我们没有做escape,那么这个脚本命令就会作为文本写入数据库,下次用户刷新网页的时候,这个脚本就会被执行。
例如用户提交的是:
alert('hello')
那么以后刷新的时候,就会弹出一个hello的框框。
当然如果单单弹出一个窗口,没有什么好怕的,但是黑客可以利用这一点做更坏的事情,例如用户登陆之后,通过在提交的表单中加入一些脚本,可以将用户的cookie截获,发送到黑客的服务器,从而获得用户的cookie中的信息,例如session_id, 然后黑客就可以用cookie中的session信息来hijack 这个user。
要防止这种类型的攻击并不难,就是在将用户的输入显示在网页上的时候,将其escape一下,例如:
   
h这个辅助方法的作用,就是在网页上显示其中的文本之前,escape其中的敏感字符,例如""等等。
这样他们就不会作为脚本被网页执行了。
例如alert('a')经过h之后,就会变成
alert('a');
h在ROR中起什么作用呢?它是 html_escape的alias(别名)
但是这种做法也有问题,所有的html tag都被搞掉了,如果我们故意要放行一些tag呢?
这样h这个方法就行不通了,还好我们有sanitize方法,
ROR API中:
        Sanitizes the given HTML by making
form and script tags into regular text, and removing all "onxxx"
attributes (so that arbitrary Javascript cannot be executed). Also
removes href attributes that start with "javascript:".
它会砍掉script这个tag,以及onXxxx之类的attribut,你没有机会执行javascript,但是你还可以塞一些div或iframe之类的tag让你的版面烂掉。
所以我们需要自定义一个html filter,可以自由的指定我们放行的那些tag。网上发现了这个sanitize.rb,完美的帮我们实现愿望。
除了在网页display的时候h一下以外,当然还有另外一种处理方式,就是用户提交的时候,就做一下h,但是这样的的话h就会出现在controller中了,但是controller是不能访问helper方法的,那么我们可以使用另外一个方法:
CGI::escapeHTML()
如果你只是需要在网页中显示这些文本的话,这种先escape,然后在存入数据的方法就很好用。但是如果你在其他地方会用到,那么escape也许就不好了,最好还是在output的时候escape。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/25407/showart_1933495.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP