网站安全性之js注入

原地址:http://blog.csdn.net/gisredevelopment/article/details/41778671

河北电信推出了一种阿福卡,据说特别实惠,不过我只记得各项优惠的其中一条:流量月底不清零,可累计。哥们托

给他抢一张,常规手段可以抢到,不过要脚踩好几泡狗屎才行,他已经连续十多天了都没抢到,so想到了用程序猿

的办法来解决这件事。这种卡在天猫和官网发售,天猫就算了,阿里那帮牛逼哄哄的攻城狮都不是吃素的,于是只能

上官网瞅瞅看能否揪到官网的小辫子。上网搜了攻略,果不其然,有人已经公布了官网的bug,毫无疑问,用js注入方

式,伪造请求,利用了官网的过滤漏洞。so,结果,give me five。

于是乎,想到了我现在正在做的系统,我的系统到底能不能顶住js注入呢,于是,我试了,用自己的矛攻自己的盾,

是,give me five,注入成功了,no,don't give me five。不知该高兴还是该伤悲。注入的具体方式我就不能详细说

了,下面把js注入的原理剖析下,再把防范js注入的方法给出来,以飨读者,自己也算做个笔记。


什么是javascript注入攻击?

每当接受用户输入的内容并重新显示这些内容时,网站就很容易遭受 JavaScript 注入攻击。让我们研究一个容易遭受 JavaScript 注入攻击的具体应用程序。假设已经创建了一个客户反馈网站。客户可以访问网站并输入对产品的反馈信息。当客户提交反馈时,反馈信息重新显示在反馈页面上。
客户反馈网站是一个简单的网站。不幸的是,此网站容易遭受 JavaScript 注入攻击。
假设正在将以下文本输入到客户反馈表单中:

[javascript]  view plain  copy
 print ?
  1. <script>alert(“Attack!”)</script>  

此文本表示显示警告消息框的 JavaScript 脚本。在某人将此脚本提交到客户反馈表单后,消息Attack! 会在将来任何人访问客户反馈网站时显示。

这只是一个简单的小例子,或许你会认为这种攻击根本无伤大雅嘛,但如果这个消息被注入了一个数据表,而网站的公共页面会请求这个数据表里的内容,那么不幸的是,任何人访问这个公共页面都会弹出一个框,让人一看就感觉这个网站好粗糙,不安全。

那么,还有更不幸的,如果有人利用你的js注入漏洞,不是注入的这么一行简单的代码,而是要执行一个跨站脚本,发送一个请求,就可以将你网站甚至数据表里的数据(包括一些用户信息)发送到远程服务器上了,例 如,黑客可以使用 JavaScript 注入攻击窃取来自其他用户浏览器的 Cookies 值。如果将敏感信息(如密码、信用卡帐号或社会保险号码)保存在浏览器 Cookies 中,那么黑客可以使用 JavaScript 注入攻击窃取这些信息。或者,如果用户将敏感信息输入到页面的表单字段中,而页面受到 JavaScript 攻击的危害,那么黑客可以使用注入的 JavaScript 获取表单数据并将其发送到另一个网站。


解决办法

方法一

阻止 JavaScript 注入攻击的一种简单方法是重新在视图中显示数据时,用 HTML 编码任何网站用户输入的数据 
如:<%=Html.Encode(feedback.Message)%> 
使用 HTML 编码一个字符串的含意是什么呢?使用 HTML 编码字符串时,危险字符如 < 和 > 被替换为 HTML 实体,如 &lt; 和 &gt;。所以,当使用 HTML 编码字符串 <script>alert("Boo!")</script> 时,它将转换为 &lt;script&gt;alert("Attack!")&lt;/script&gt;。浏览器在解析编码的字符串时不再执行 JavaScript 脚本。而是显示无害的页面。

方法二

除了在视图中显示数据时使用 HTML 编码数据,还可以在将数据提交到数据库之前使用 HTML 编码数据。

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. StringEscapeUtils.escapeHtml("前台提交的数据");  


通常,人们喜欢使用本教程中讨论的第一种方法,而不喜欢使用第二种方法。第二种方法的问题在于在数据库中最终会保留 HTML 编码的数据。换言之,数据库中的数据会包含奇怪的字符。这有什么坏处呢?如果需要用除网页以外的形式显示数据库数据,则将遇到问题。例如,不能轻易在 Windows Forms 应用程序中显示数据。

这里只简单记下,后面有机会会深入讨论跨站式攻击。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值