Xeo*_*oss 6 html php security xss
在HTML中,有几个特殊字符< > & ' "对DOM解析器有重要意义.这些是流行函数的字符,例如PHP的htmlspecialchars转换为HTML实体,因此它们在解析时不会意外触发.
执行的翻译是:
- '&'(&符号)变成了
&"(双引号)"在未设置ENT_NOQUOTES时变为.'(单引号)'仅在设置了ENT_QUOTES 时才会出现.- '<'(小于)成为
<- '>'(大于)变为
>
但是,我记得在像IE6这样的旧浏览器中,还有其他字节序列导致浏览器的DOM解析器将内容解释为HTML.
今天这仍然是个问题吗?如果单独过滤这些5就足以防止XSS?
例如,以下是 HTML和JavaScript中的字符"<"的所有已知组合(UTF-8).
<
%3C
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
\x3c
\x3C
\u003c
\u003C
Run Code Online (Sandbox Code Playgroud)
不。实际上,当我研究使用 CSS 和属性根据内容(我的问题)自动分配样式时,我研究了这一点,简短的答案是否定的。现代浏览器不允许将“字节序列”用作 HTML。我很少使用“字节序列”,因为风险最大的代码不使用字节编码值。
XSS 站点上列出的示例涉及使用属性并将 JavaScript 解释为需要执行的字符串。但还列出了诸如&{alert('XSS')}运行括号内的代码之类的内容,并且该代码在现代浏览器中不起作用。
但要回答你的第二个问题,不,过滤这 5 个不足以防止XSS攻击。始终将您的代码放入 PHP HTML 特殊字符代码中,但是可以使用数百个字节代码,您将无法真正保证任何事情。通过 PHP 过滤器(尤其是htmlentities())发送它将为您提供在将其输出到 HTML 时输入的确切文本(IE«而不是 «)。也就是说,在大多数情况下,根据您的使用情况,使用htmlspecialchars足以应对大多数攻击。取决于您将如何使用输入,但在大多数情况下它是安全的。
XSS 是一件很难解释的事情。一般的好规则是始终过滤用户将输入的所有内容。并使用白名单而不是黑名单。您在这里谈论的是将这些值列入黑名单,而假设您的用户是恶意的并且只允许某些事情总是更安全。
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |