概念
跨站脚本攻击(Cross-site scripting,简称XSS),是一种最常见的web攻击。
用户在使用通讯软件、访问网页或者阅读邮件时,通常会点击页面中包含的链接,这些链接便成为了攻击者获取用户信息所利用的工具。攻击者可以在网页上发插入一条含恶意代码的数据,当用户点开此页面链接时,特定的脚本就会以用户权限来执行。
假设,用户A在一个论坛上发布了一篇包含恶意脚本的帖子:
之后该内容可能会被渲染成以下形式:
当用户B点进来浏览时,这条恶意脚本就会被触发,将会跳转到domain.com并携带当前作用域的Cookie,从而获取用户B的session信息。
危害
攻击者经常会在有漏洞的代码中插入ActiveX、JavaScript、Flash等欺骗用户,一旦获取到用户账户信息,就可以通过所盗取的账户来盗取Cookie、修改用户设置甚至发布虚假文章等。
解决思路
保证所有输入到HTML页面中的数据以HTML的方式进行转义(HTMLescape)。
例如PHP输出:
如果这个articleText是由用户自行输入的,那么攻击者很有可能输入一段包含Javascript恶意攻击代码的文本,使得最终输出变成:
上述代码在浏览器中渲染,将会执行JavaScript代码并在屏幕上alert hello。当然这个代码是无害的,但攻击者完全可以创建一个JavaScript来修改用户资料或者窃取cookie数据。
解决方法很简单,就是将输出的值的值进行html escape,转义后的输出代码如下:
这样就不会有任何危害了。