么是消毒(逃逸)?
清理是将 HTML 中有意义的字符替换为另一个字符串的过程。在 HTML 中,字符串“<”或“>”被浏览器识别为标签的一部分。清理是将这些替换为诸如“& lt;”和“& gt;”之类的字符串并在浏览器中将它们简单地显示为“<”和“>”而不是标签的过程。
在上面的例子中,被“<”和“>”包围的“script”标签被清理了。它是一个 HTML 标签,在净化处理之前作为脚本标签运行,但在净化处理之后,“<”和“>”被替换为字符串“<”和“>”,因此它们显示在浏览器。当你这样做时,你可以将它显示为一个字符串,而不是 HTML。
据说清理作为 XSS(跨站点脚本)对策是有效的。为什么是这样?
XSS(Cross-Site Scripting)是利用网页中的漏洞向网页中注入恶意JavaScript程序并将信息泄露到攻击目标以外的网页的漏洞。XSS(Cross-Site Scripting)在本站另一篇文章中有详细说明,请参考。
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 中,您可以使用 htmlspecialchars 函数轻松清理。例如,如果用户从输入表单中发送的字符串存储在 $str 变量中,用法如下。
返回 $out 变量中 htmlspecialchars 函数的返回值。这个 $ out 变量将包含经过清理的字符串。您可以为此函数的第二个参数指定各种常量。通常,通常会指定“ENT_QUOTES”,它不仅会过滤“<”和“>”,还会过滤“'(单引号)”和“”(双引号)。
JavaScript 没有像 PHP 中的 htmlspecialchars 函数那样执行清理的内置函数,但它定义并使用了使用字符串替换执行清理的原始函数。
在上述函数“htmlentities”中,不仅“<”和“>”,而且“”(双引号)和“&”分别被替换为不同的字符串“& quot;”和“&”。这是因为“”(双引号)和“&”也是具有 HTML 含义的字符串,因此有必要在清理过程中将它们仅显示为字符串。
我们已经介绍了如何通过清理和显示将“<”和“>”转换为“<”和“>”。或者,当场检查在浏览器中输入的数据以防止保存无效字符串是有效的。
例如,在输入邮政编码的表格中,这是一个无法输入数字以外的字符的过程。
在服务器上检查输入的数据很重要,而不是在浏览器上。对浏览器的检查是通过 JavaScript 进行的检查,但是通过在浏览器中禁用 JavaScript,可以避免对浏览器的检查。在检查输入值作为 XSS 对策时,让我们通过 PHP 等在服务器端工作的方法进行检查。
如上所述,作为对抗 XSS 攻击的对策,清理(逃逸)是必不可少的。XSS 攻击是一种自互联网诞生以来就存在的攻击方式,但仍被报道为各种 Web 应用程序中的漏洞之一。
从浏览器输入的字符串并不总是安全的。恶意攻击者一直在考虑利用已发布 Web 应用程序中的漏洞。
在开发 Web 应用程序时,重要的是不要假设输入字符串是安全的,而是要彻底检查是否正确实施了清理(转义)。..