跨站点脚本攻击的最常见技术之一是将恶意代码注入网页。 本简短教程中的代码片段向您展示了如何使用转义序列,以使任何注入的代码都无法运行。
注意:本教程是Usha Ladkani的developerWorks教程的缩写版,“ 通过对HTML响应进行编码来防止跨站点脚本攻击 ”。 有关更多详细信息,请参见该教程。
跨站点脚本攻击如何工作
在跨站点脚本(XSS)攻击中,攻击者将恶意代码注入到合法的网页中,然后该网页运行客户端脚本。 当用户访问受感染的网页时,该脚本将下载到用户的浏览器中。
假设攻击者将此HTML字符串注入网页:
<script>alert("You've been attacked!")</script>
当浏览器加载网页时,它将运行脚本作为呈现页面的一部分。 在这种情况下,脚本将运行,并且用户会看到一个弹出警报,提示“您已受到攻击!”。
您的辩护:在服务器端Java™应用程序的变量中编码HTML
为了确保不会将恶意脚本代码注入到您的页面中,最好的防线是在所有变量字符串显示在页面上之前对其进行编码。 编码仅意味着将每个潜在危险的字符转换为HTML实体。
转义后,上面HTML字符串将如下所示:
清单1.转义HTML
<script>alert("You've been attacked!")</script>
轮到你! 尝试更改清单1中的代码
unescapedText
以查看会发生什么。
(请记住,您需要使用反斜杠转义所有双引号: \"
)。
摘要
跨站点脚本编写仍然是攻击用户计算机的最常用方法之一。 但是,您可以在很大程度上阻止攻击者使用恶意代码感染Web应用程序的能力。 在编写应用程序时,请确保将所有变量输出编码到页面中,然后再将其发送到用户的浏览器。
还有一件事
请注意,Java String.toCharArray()
方法将破坏包含表情符号和其他特殊字符的字符串。 如果您真的想深入了解此主题,请先阅读Unicode Basic Multilingual Plane上的Wikipedia文章 。
翻译自: https://www.ibm.com/developerworks/java/library/se-prevent-cross-site-scripting-attacks/index.html