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,大家去看手册吧,介绍很详细,有示例。
XSS攻击方法:
给大家分享一篇文章,文章中罗列了常见的XSS攻击方法。
除了最普通的JS文件引入方式,还有其他的一些引入方式,大家看下。
有关XSS的危害就不多介绍了,JS可以做好多坏事的,自己网站的页面挂着来历不明的JS文件或代码总是不好的。
如何阻止 JavaScript 注入攻击?
不考虑服务器被攻破、webshell权限被人获取的前提下,自己网站的页面中怎么会出现别人的JS文件或者恶意的JS代码?
那最有可能的就是程序写得不严谨,尤其在提交表单数据时没有对数据做好处理,以至于被人把HTML标签代码当成数据提交到网站并显示出来。
比如有些网站会有留言区,可以留言,很多用户也可以查看。假如网站对这块没有做好防范,就会被JS注入。
写个小代码演示下:
直接显示数据,实际项目中都会把数据入库。
把一段JS代码写入表单
提交后,用户输入的JS代码被执行了,其实这就完成了一次简单的XSS攻击。
注意:这个示例是在IE下做的测试,有些浏览器不弹窗,主要是浏览器做了安全措施。如果是完整的流程,用户写入的JS代码先存入数据库再读出来,JS就会执行。
知道了问题所在,服务器端(PHP)怎么阻止用户输入JS代码呢?
还记得HTML字符实体吧。从《常见的XSS攻击方法》中罗列的70多个方法代码中都有尖括号、引号,如果把尖括号、引号转成实体符号,基本上用户输入的JS代码存入数据库的只是普通的字符串。
<script>alert("XSS攻击成功");</script>
变成了
<script>alert("XSS攻击成功");</script>
PHP函数htmlspecialchars可以把HTML标记转成HTML字符实体。
拓展:
涉及到用户输入数据时,最好不要允许用户输入HTML标记元素。虽然有些网站,比如论坛、可以发表日志的网站,编辑器有HTML功能。其实它们后台肯定做了很多的安全工作,有危险性的HTML标记代码都被过滤了。
比如QQ空间:
不信的话,可尝试下,写入<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也得注意下,不要把网站比较隐秘的数据发到前台,真正懂技术的人很容易获取到的,对网站和用户都会产生安全问题。