内容


保护应用程序远离跨站脚本 (XSS) 攻击

在 HTML 输出中使用转义符

Comments

交互式代码: 如果在样例代码顶部看到 运行,则表明您可以运行该代码,检查运行结果,编辑和修改代码并再次运行。

跨站脚本攻击的最常用技术之一是将恶意代码注入网页中。这篇简短教程中的代码段展示了如何使用转义序列,使任何注入代码都无法运行。

备注:本教程是 Usha Ladkani 的 developerWorks 教程 “通过编码 HTML 响应来预防跨站脚本攻击” 的缩略版。请参阅相应教程了解更多细节。

跨站脚本攻击的工作原理

在跨站脚本 (XSS) 攻击中,攻击者将恶意代码注入合法的网页中,然后运行一段客户端脚本。当用户访问被感染的网页时,该脚本就会下载到用户的浏览器。

假设攻击者将这个 HTML 字符串注入一个网页中:

<script>alert("You've been attacked!")</script>

当浏览器加载该网页时,就会在呈现该页面的过程中运行该脚本。在本例中,该脚本将会运行,用户会看到一条弹出警告 “You've been attacked!”

您的防御措施:将 HTML 编码到服务器端 Java™ 应用程序中的变量中

要确保恶意脚本代码不会注入您的页面中,最好的防御措施是在页面上显示所有变量字符串之前对它们进行编码。编码仅意味着将每个潜在的危险字符转换为 HTML 实体。

上面的 HTML 字符串在转义后将类似于以下字符串:

清单 1. 转义后的 HTML
&lt;script&gt;alert(&quot;You&apos;ve been attacked!&quot;)&lt;/script&gt;

轮到您了!尝试更改清单 1 中的代码

Try icon 单击 Run 按原样执行该代码。您会看到与清单 1 相同的输出。然后更改变量 unescapedText,看看会发生什么。(请记住,您需要使用反斜杠来转义双引号:\")。

显示结果

结束语

跨站脚本攻击仍是攻击用户机器的最常见方式之一。但是,您可以在很大程度上阻止攻击者通过恶意代码感染您的 Web 应用程序。在编写应用程序时,一定要在将页面发送到用户浏览器之前对其中的所有变量输出进行编码。

补充一点

请注意,Java String.toCharArray() 方法将损坏包含表情符号和其他特殊字符的字符串。如果想深入研究此主题,可以先查阅 有关 Unicode Basic Multilingual Plane 的 Wikipedia 文章


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Security, Java technology, Web development
ArticleID=1055323
ArticleTitle=保护应用程序远离跨站脚本 (XSS) 攻击
publish-date=12132017