显示HTML用户输入,安全问题

显示HTML用户输入,安全问题,html,security,input,Html,Security,Input,在我的网站上,用户可以输入内容的html标签,这样文本可以是粗体、斜体或链接和图像。我计划使用ckeditor或tinymce,它们实际上使用HTML标记(而不是BBC代码或wiki语法) 如果我允许HTML,当文本显示时,它将被解释,它可能包含一些“黑客”,如javascript或XSS。。。。 如何避免此安全问题? 我是否必须列出想要的html标记并删除所有不需要的标记和内容? 我可以用条纹标签吗 例如,如何在stackoverflow上执行此操作 你知道一些php/jquery插件可以安全

在我的网站上,用户可以输入内容的html标签,这样文本可以是粗体、斜体或链接和图像。我计划使用ckeditor或tinymce,它们实际上使用HTML标记(而不是BBC代码或wiki语法) 如果我允许HTML,当文本显示时,它将被解释,它可能包含一些“黑客”,如javascript或XSS。。。。 如何避免此安全问题? 我是否必须列出想要的html标记并删除所有不需要的标记和内容? 我可以用条纹标签吗

例如,如何在stackoverflow上执行此操作

你知道一些php/jquery插件可以安全地保存和解释有限的html标签吗


提前感谢您的帮助

您需要同时使用服务器端HTML净化剂和防止在线脚本、eval和远程托管脚本

根据您在服务器端使用的语言,请使用HtmlSanitiser或python漂白剂

使用客户端验证或原始筛选都不会保护您:

  • 如果用户手动提交表单,@Smamatti建议的客户端验证对您没有帮助

  • 原始筛选,例如
    str_replace(“”,,$str)
    警报('foo')时,@user1477388建议的code>不会保护您
    我认为您可以配置CKEditor中允许哪些元素。-最简单的修复方法是运行一个
    str_替换(“”,,$str)或类似的东西。你也可以为iFrames做这件事。看看HtmlSanitizer,它是的一部分。我完全同意Thomas的观点。对恶意代码进行编码的方法太多了,以至于几乎不可能想出一个安全的方法来过滤(黑名单)。例如,看看这个,了解一下注入脚本的疯狂方式。事实上这很可怕。例如,尝试将此代码检测为恶意代码:
    ,或此代码:
    。谢谢大家的回答。事实上,ckeditor正在转义不允许的html标记或特殊字符,因此当您选择标记时,例如它将按原样发送到表单,但如果您键入,则“@user:如Thomas在(1)中所述”,CKeditor是一个客户端工具。您不能信任客户端上发生的任何验证措施。攻击者可以更改或绕过CKeditor并提交危险的HTML。您必须在服务器端清除HTML。如果您使用PHP,通常的工具是.FWIW,仅用于粗体/斜体/图像/链接。我会使用更小、更友好、更简单的工具语言比HTML好。@bobince感谢HTML净化器。你只会用什么来做那些标记。BBCode?如果你知道一个好的且易于使用的工具,它将是nice@user1496486如果您使用的是CKEditor,请坚持使用HTML,只需确保与客户端和服务器端验证具有奇偶性即可。