XSS(Cross Site Scripting,跨站脚本攻击)
xss全称“跨站脚本”,是注入攻击的一种。其特点是不对服务器端造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论,提交含有JavaScript的内容文本。这时服务器端如果没有过滤或转义掉这些脚本,作为内容发布到了页面上,其他用户访问这个页面的时候就会运行这些脚本。
运行预期之外的脚本带来的后果有很多中,可能只是简单的恶作剧————一个关不掉的窗口:
也可以盗号或者其他未授权的操作。
Xss是实现CSRF的诸多途径中的一条,但绝对不是唯一的一条。一般习惯吧通过Xss来实现的CSRF称为XSRF。
如何防御XSS攻击?
理论上,所有可输入的地方没有对输入数据进行处理的话,都存在XSS漏洞,漏洞的危害取决于攻击代码的威力,攻击代码也不局限与script。防御XSS攻击攻击最简单直接的方法,就是过滤用户的输入。
如果不需要用户输入HTML,可以直接对用户的输入进行HTMLescape。
下面一小段脚本
<script>window.location.href=”http://www.baidu.com”;</script>
经过 escape 之后就成了:
<script>window.location.href="http://www.baidu.com"</script
>
它现在会像普通文本一样显示出来,变得无毒无害,不能执行了。当我们需要用户数据html的时候,需要用户输入的内容做更加小心细致的处理。仅仅粗暴地去掉scriot标签是没用的。任何一个合法html标签都可以添加onclick一类的事件属性来执行JavaScript。更好的方法可能是,将用户的输入使用html解析库进行解析,获取其中的数据。然后根据用户原有的标签属性,重新构建html元素树。构建过程中,所有的标签、属性都只从白名单中拿取