php - 用户提交的 HTML 带来的安全风险

标签 php html security contenteditable

我正在使用一个 contentEditable div,它允许用户编辑正文 HTML,然后使用 AJAX 请求将其直接发布到站点。当然,我必须对其进行一些安全检查。最明显的是确保没有通过搜索 <script 提交任何脚本标签。在提交的 HTML 中。这是在第一次运行 htmlentities 之后完成的,将数据传输到另一台服务器,然后运行 ​​html_entity_decode .此外,每个打开的标签都必须关闭,并且每个关闭的标签都必须在用户提交的 HTML 中打开。

忽略不相关的安全风险(例如 SQL 注入(inject))和非安全风险(例如用户发布不当图片),还有哪些其他安全风险(如果有)特别与允许用户将 HTML 直接添加到页面?

更具体地说,

  1. 有没有办法在不明确使用脚本标签的情况下将脚本放入页面,或者
  2. 是否可以通过在不使用脚本的情况下编辑 HTML 来危及网站或其用户的安全?

最佳答案

是的。恶意代码可以通过多种方式注入(inject)您的网站。

其他答案已经提到了所有最明显的方法,但是还有很多更微妙的方法可以进入,如果您要接受用户提交的 HTML 代码,则需要了解它们全部,因为黑客不会只尝试明显的东西然后放弃。

您需要检查所有 事件处理属性 - 不仅仅是 onclick,而是所有内容:onfocusonload , 甚至 onerroronscroll 也可以被破解。

但比这更重要的是,您需要提防旨在通过您的验证的黑客攻击。例如,使用损坏的 HTML 让您的解析器误以为它是安全的:

<!--<img src="--><img src=fakeimageurl onerror=MaliciousCode();//">

<style><img src="</style><img src=fakeimageurl onerror=DoSomethingNasty();//">

<b <script>ReallySneakyJavascript();</script>0

所有这些都可以轻松通过验证器。

并且不要忘记,真正的黑客攻击可能比这更令人困惑。他们会努力让您难以发现,或者在您确实发现它的情况下理解它在做什么。

最后我会推荐这个网站:http://html5sec.org/其中包含大量攻击向量的详细信息,其中大部分我当然不会想到。 (上面的例子都在列表中)

关于php - 用户提交的 HTML 带来的安全风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7540700/

相关文章:

php - 当我使用加盐的 CRYPT_MD5 来加密我的密码时,加密的是什么?

javascript - 通过篡改 POST 负载来远程包含文件。真的可以通过 HTTPS 实现吗?

php - 在php中显示两个值

jquery - 我有相同尺寸的笔记本电脑和平板电脑,但我想在平板电脑上隐藏一个按钮,而不是在笔记本电脑上......我该怎么做?

javascript - 日期和 Html 值

html - 在 HTML5 中正确关闭或自动关闭标签

javascript - Magento 中的 Facebook 转化跟踪

php - htaccess 强制 https 并在没有子域的情况下将非 www 重定向到 www

php - 如何在php中检查页面是从http还是https调用的

spring - 我怎样才能使移动/网络客户端和后端之间的通信完全可信?