第十二章:第48节JavaScript安全问题——XSS跨站脚本攻击

更新于:2017-12-05 18:53:20

JS的知识讲完了,这节说下JS的安全问题。


楠神在前面说过JS是一门安全的脚本语言,它运行环境仅限在浏览器内,它不能去操作用户电脑硬盘里的文件,所以安全,这是从这门语言本身来说的。JS有时又不安全,它可以成为别人干坏事的帮凶。


只要一说JS的安全问题,我们必然想到的就是XSS跨站脚本攻击。


XSS跨站脚本攻击


什么是XSS攻击?其实就是在一个目标网站执行了攻击者的JS文件或代码。


比如,在一个目标网站页面引入了另一个网站(攻击者)的JS文件

<script type="text/javascript" src="攻击者的JS文件.js"></script>


我们先不讨论它是怎么写到目标网站页面中的。


假如目标网站被挂入不明的JS文件,虽然JS文件与页面不在同一域名下,JS依然会执行。JS是很强大的,它不仅能改动引用它的页面HTML元素与表单数据,还能获取页面中很多重要信息。利用这些信息,攻击者就可以做坏事。


XSS攻击的危害包括


1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

3、盗窃企业重要的具有商业价值的资料

4、非法转账

5、强制发送电子邮件

6、网站挂马

7、控制受害者机器向其它网站发起攻击


JS怎么获取用户账户?


在前面学习PHP cookie(十一章12节)时,setcookie函数第7个参数——“httponly”为true时,只能通过请求发送cookie,使用javascript无法读取httponly的cookie,安全性更高。


从这句话获取到一个信息:JS可以操作当前页面的cookie


cookie是很重要的用户数据,如果用户的cookie被攻击者知道,在服务端session数据没有被删除的情况下,攻击者就能登录用户的账户,非常可怕。


所以,XSS常见利用手段是劫持用户cookie并登陆其账户。但添加了http-only标记的cookie JS无法读取,该项技术已经成为减小XSS带来的危害的重要手段。


JS怎么操作cookie呢?


使用 document.cookie 对象,具体怎么操作cookie,大家去看手册吧,介绍很详细,有示例。


1.png


XSS攻击方法:


给大家分享一篇文章,文章中罗列了常见的XSS攻击方法


除了最普通的JS文件引入方式,还有其他的一些引入方式,大家看下。


有关XSS的危害就不多介绍了,JS可以做好多坏事的,自己网站的页面挂着来历不明的JS文件或代码总是不好的。


如何阻止 JavaScript 注入攻击?


不考虑服务器被攻破、webshell权限被人获取的前提下,自己网站的页面中怎么会出现别人的JS文件或者恶意的JS代码?


那最有可能的就是程序写得不严谨,尤其在提交表单数据时没有对数据做好处理,以至于被人把HTML标签代码当成数据提交到网站并显示出来。


比如有些网站会有留言区,可以留言,很多用户也可以查看。假如网站对这块没有做好防范,就会被JS注入。


写个小代码演示下:


1.png


直接显示数据,实际项目中都会把数据入库。


1.png


把一段JS代码写入表单


1.png

提交后,用户输入的JS代码被执行了,其实这就完成了一次简单的XSS攻击。


注意:这个示例是在IE下做的测试,有些浏览器不弹窗,主要是浏览器做了安全措施。如果是完整的流程,用户写入的JS代码先存入数据库再读出来,JS就会执行。


知道了问题所在,服务器端(PHP)怎么阻止用户输入JS代码呢?


还记得HTML字符实体吧。从《常见的XSS攻击方法》中罗列的70多个方法代码中都有尖括号、引号,如果把尖括号、引号转成实体符号,基本上用户输入的JS代码存入数据库的只是普通的字符串。


<script>alert("XSS攻击成功");</script>


变成了


&lt;script&gt;alert(&quotXSS攻击成功&quot);&lt;/script&gt;


PHP函数htmlspecialchars可以把HTML标记转成HTML字符实体。


拓展:


涉及到用户输入数据时,最好不要允许用户输入HTML标记元素。虽然有些网站,比如论坛、可以发表日志的网站,编辑器有HTML功能。其实它们后台肯定做了很多的安全工作,有危险性的HTML标记代码都被过滤了。


比如QQ空间:


1.png


不信的话,可尝试下,写入<script>alert("XSS攻击成功");</script>肯定是不成功的。


总结:


xss是一门又热门又不太受重视的Web攻击手法,主要因为:


1、耗时间

2、有一定几率不成功

3、没有相应的软件来完成自动化攻击

4、前期需要基本的html、js功底,后期需要扎实的html、js、actionscript2/3.0等语言的功底

5、是一种被动的攻击手法

6、对website有http-only、crossdomian.xml没有用


但是这些并没有影响黑客对此漏洞的偏爱,原因就是xss几乎每个网站都存在,google、baidu、360等都存在。


有关JS安全的话题楠神引出来了,这里不会介绍特多,对JS安全的学习还需大家多去搜索有关资料。


有时ajax也得注意下,不要把网站比较隐秘的数据发到前台,真正懂技术的人很容易获取到的,对网站和用户都会产生安全问题。


本节学习代码》》》