gpt4 book ai didi

php - 是否有其他序列浏览器解释为 HTML 特殊字符?

转载 作者:太空狗 更新时间:2023-10-29 15:02:11 24 4
gpt4 key购买 nike

在HTML中,有几个特殊字符< > & ' "这对 DOM 解析器具有重要意义。这些是PHP的htmlspecialchars等流行函数的字符转换为 HTML 实体,以便它们在解析时不会意外触发。

The translations performed are:

  • '&' (ampersand) becomes &amp;
  • " (double quote) becomes &quot; when ENT_NOQUOTES is not set.
  • ' (single quote) becomes &#039; only when ENT_QUOTES is set.
  • '<' (less than) becomes &lt;
  • '>' (greater than) becomes &gt;

但是,我记得在像 IE6 这样的旧浏览器中,还有 其他字节序列 导致浏览器的 DOM 解析器为 interpret content as HTML .

今天这仍然是个问题吗?如果仅过滤这 5 个是否足以防止 XSS?

例如,这里是字符“<”在 HTML 和 JavaScript(UTF-8 格式)中的所有已知组合。

<
%3C
&lt
&lt;
&LT
&LT;
&#60
&#060
&#0060
&#00060
&#000060
&#0000060
&#60;
&#060;
&#0060;
&#00060;
&#000060;
&#0000060;
&#x3c
&#x03c
&#x003c
&#x0003c
&#x00003c
&#x000003c
&#x3c;
&#x03c;
&#x003c;
&#x0003c;
&#x00003c;
&#x000003c;
&#X3c
&#X03c
&#X003c
&#X0003c
&#X00003c
&#X000003c
&#X3c;
&#X03c;
&#X003c;
&#X0003c;
&#X00003c;
&#X000003c;
&#x3C
&#x03C
&#x003C
&#x0003C
&#x00003C
&#x000003C
&#x3C;
&#x03C;
&#x003C;
&#x0003C;
&#x00003C;
&#x000003C;
&#X3C
&#X03C
&#X003C
&#X0003C
&#X00003C
&#X000003C
&#X3C;
&#X03C;
&#X003C;
&#X0003C;
&#X00003C;
&#X000003C;
\x3c
\x3C
\u003c
\u003C

最佳答案

没有。当我研究使用 CSS 和属性根据内容自动分配样式时,我实际上研究过这个 (my question),简短的回答是否定的。现代浏览器不允许将“字节序列”用作 HTML。我很少使用“字节序列”,因为风险最大的代码不使用字节编码值。

XSS 站点上列出的示例是关于使用属性并将 javascript 解释为需要执行的字符串。但也列出了诸如 &{alert('XSS')} 之类的东西,它运行括号内的代码,并且该代码在现代浏览器中不起作用。

但要回答您的第二个问题,不,过滤这 5 个不足以防止 XSS 攻击。始终通过 PHP HTML 特殊字符代码抛出您的代码,但有一个 hundreds of byte codes that can be used你真的无法保证任何事情。通过 PHP 过滤器(尤其是 htmlentities())发送它会为您提供输出为 HTML 时输入的准确文本(IE « 而不是 «)。也就是说,在大多数情况下,根据您的使用情况,使用 htmlspecialchars 足以覆盖大多数 攻击。取决于您将如何使用输入,但在大多数情况下它是安全的。

XSS 是一个棘手的问题。一般的好规则总是过滤用户将输入的所有内容。并使用白名单而不是黑名单。你在这里谈论的是将这些值列入黑名单,而假设你的用户是恶意的并且只允许某些事情总是更安全。

关于php - 是否有其他序列浏览器解释为 HTML 特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8626337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com