我只是在创建一个用户可以用 html 编写的表单,我想知道出于安全原因我应该删除哪些 html 标签。这个表单被发送到一个 PHP 文件,所以我想通过使用strip_tags删除不需要的标签。
到目前为止,我唯一的想法是删除 script 和 div (以避免破坏布局)标签。
我还应该解析什么以避免安全和布局问题?
提前致谢
我只是在创建一个用户可以用 html 编写的表单,我想知道出于安全原因我应该删除哪些 html 标签。这个表单被发送到一个 PHP 文件,所以我想通过使用strip_tags删除不需要的标签。
到目前为止,我唯一的想法是删除 script 和 div (以避免破坏布局)标签。
我还应该解析什么以避免安全和布局问题?
提前致谢
这些 HTML 会导致代码注入,如本文所述:
<SCRIPT>
:添加要在文档中使用的脚本。
<OBJECT>
:将对象(如小程序、媒体文件等)放置在文档上。该标记通常包含用于检索 IE 用于显示对象的 ActiveX 控件的信息。
<APPLET>
:用于在文档上放置 Java 小程序。它在 HTML 4.0 规范中被贬低以支持标签。
<EMBED>
:将对象嵌入到文档中。嵌入式对象通常是需要特殊插件才能显示的多媒体文件。特定媒体类型及其各自的插件可能具有用于控制文件播放的附加专有属性。结束标签并非总是必需的,但建议使用。HTML 4.0 规范放弃了该标签,取而代之的是该标签。
<FORM>
: 表示表格的开始和结束。
并且还看看htmlentities()
php的功能。此函数htmlspecialchars()
在所有方面都相同,除了 htmlentities() 之外,所有具有 HTML 字符实体等效项的字符都被转换为这些实体。在这里查看更多信息。
答案可能取决于您想要达到的“安全”级别。
如果您想真正安全,恐怕您必须删除所有 html 标签。正如文档strip_tags
所说,您允许的任何标签都可能被style
andonmouseover
属性滥用。
http://php.net/manual/en/function.strip-tags.php
如果要允许格式化,我建议改用降价编辑器。您会在另一个问题中找到好主意:
https://stackoverflow.com/questions/2357022/what-is-a-good-client-side-markdown-editor
我想真的是语义,但直接的答案应该是“所有这些”。
您的问题应该更像“我允许使用哪些标签?”。
不同之处在于:除了您想要允许的内容(来自“白名单”)之外,您对所有内容进行核对,而不是允许除“黑名单”中的内容之外的所有内容。
所以,旋转你的问题,你就会走在正确的轨道上。
然后去阅读 PHP 类HTMLPurifier。
补充:如果你想知道你想要保护自己的真实程度,那么请仔细阅读OWASP的这个定义
如果您的服务器启用了 SSI(服务器端包含),您可能还希望禁止 SSI 包含。
SSI 看起来像<!--# something here -->
.
例如,<!--#exec cmd="del *.*"-->
如果您在某个页面上显示来自用户的输入,则将从您的服务器中删除所有内容。
希望这会有所帮助。