HTML 清理(逃逸)对抗 XSS 攻击

么是消毒(逃逸)?

清理是将 HTML 中有意义的字符替换为另一个字符串的过程。在 HTML 中,字符串“<”或“>”被浏览器识别为标签的一部分。清理是将这些替换为诸如“& lt;”和“& gt;”之类的字符串并在浏览器中将它们简单地显示为“<”和“>”而不是标签的过程。

HTML 清理(逃逸)对抗 XSS 攻击_第1张图片

在上面的例子中,被“<”和“>”包围的“script”标签被清理了。它是一个 HTML 标签,在净化处理之前作为脚本标签运行,但在净化处理之后,“<”和“>”被替换为字符串“<”和“>”,因此它们显示在浏览器。当你这样做时,你可以将它显示为一个字符串,而不是 HTML。

为什么清理(逃逸)对 XSS 有效

据说清理作为 XSS(跨站点脚本)对策是有效的。为什么是这样?

XSS(Cross-Site Scripting)是利用网页中的漏洞向网页中注入恶意JavaScript程序并将信息泄露到攻击目标以外的网页的漏洞。XSS(Cross-Site Scripting)在本站另一篇文章中有详细说明,请参考。

HTML 清理(逃逸)对抗 XSS 攻击_第2张图片

什么是跨站脚本 (XSS)?攻击伤害示例和对策的通俗易懂的解释
2018.4.25
跨站脚本(XSS)是近年来国内外报道最多的网络攻击之一。跨站脚本攻击是一种利用专业知识相对容易实施的攻击,网站运营商必须采取应对措施。本文

sanitizing 对 XSS 有效的原因在于,即使从输入表单发送到 Web 页面的数据中包含 script 标签,“<”和“>”也会更改为“<”和“>”。 ” 通过清理过程。因为它被替换为“”,所以可以防止它作为脚本运行。

如果标签没有被其他字符替换,恶意脚本将在网页上运行,这可能会导致意外损坏。那么,如果不消毒会怎样?从现在开始我会详细解释。

如果您不进行消毒(逃生)会发生什么

如果你没有正确消毒会发生什么?如前所述,如果您不进行清理,您可能会成为 XSS(跨站点脚本)攻击的目标。

XSS(跨站脚本)攻击带来的威胁包括:

会话劫持

如果 cookie 没有 httponly 属性,攻击者可以通过读取 JavaScript document.cookie 来窥探 cookie 中包含的会话信息。cookie 是存储在访问者计算机上的一小段数据。它用于存储登录特定网站所需的登录和会话信息。

上面的代码是将用户的cookie信息作为参数传递给攻击服务器上安装的CGI的示例。如果上述 JavaScript 代码写在易受 XSS 攻击的网页上,用户的 cookie 信息将被非法发送到攻击站点。

输入表单标签被嵌入,个人信息被盗

通过在网页上嵌入输入表单来窃取个人信息,访问者可能会在输入表单中输入个人或机密信息,这些信息可能会被非法发送给攻击者。

在网页上显示虚假信息

嵌入不当的 JavaScript 可能会导致网页上出现最初未显示在网页上的虚假信息。

强制在网页上操作

页面转换等操作可能会被非法嵌入的 JavaScript 强行执行。

消毒(逃逸)方法

我介绍了如何将“<”和“>”替换为“& lt;”和“& gt;”作为对 HTML 进行清理的一种方法。此外,我们将介绍 PHP 和 JavaScript 编程语言的清理过程。

如何在 PHP 中清理(转义)

在 PHP 中,您可以使用 htmlspecialchars 函数轻松清理。例如,如果用户从输入表单中发送的字符串存储在 $str 变量中,用法如下。

返回 $out 变量中 htmlspecialchars 函数的返回值。这个 $ out 变量将包含经过清理的字符串。您可以为此函数的第二个参数指定各种常量。通常,通常会指定“ENT_QUOTES”,它不仅会过滤“<”和“>”,还会过滤“'(单引号)”和“”(双引号)。

JavaScript 中的清理(转义)方法

JavaScript 没有像 PHP 中的 htmlspecialchars 函数那样执行清理的内置函数,但它定义并使用了使用字符串替换执行清理的原始函数。

HTML 清理(逃逸)对抗 XSS 攻击_第3张图片

在上述函数“htmlentities”中,不仅“<”和“>”,而且“”(双引号)和“&”分别被替换为不同的字符串“& quot;”和“&”。这是因为“”(双引号)和“&”也是具有 HTML 含义的字符串,因此有必要在清理过程中将它们仅显示为字符串。

还有一种方法可以在输入阶段检查数据

我们已经介绍了如何通过清理和显示将“<”和“>”转换为“<”和“>”。或者,当场检查在浏览器中输入的数据以防止保存无效字符串是有效的。

例如,在输入邮政编码的表格中,这是一个无法输入数字以外的字符的过程。

在服务器上检查输入的数据很重要,而不是在浏览器上。对浏览器的检查是通过 JavaScript 进行的检查,但是通过在浏览器中禁用 JavaScript,可以避免对浏览器的检查。在检查输入值作为 XSS 对策时,让我们通过 PHP 等在服务器端工作的方法进行检查。

概括

如上所述,作为对抗 XSS 攻击的对策,清理(逃逸)是必不可少的。XSS 攻击是一种自互联网诞生以来就存在的攻击方式,但仍被报道为各种 Web 应用程序中的漏洞之一。

从浏览器输入的字符串并不总是安全的。恶意攻击者一直在考虑利用已发布 Web 应用程序中的漏洞。

在开发 Web 应用程序时,重要的是不要假设输入字符串是安全的,而是要彻底检查是否正确实施了清理(转义)。..

你可能感兴趣的:(javascript,java,开发语言)