我是XSS和HTML Purifier的新手(研究了几天)。然而,多年来我一直是编程和网络开发人员。 (是的,我知道我没有遇到XSS的耻辱。我认为类似的东西。但只是没有深入研究。)
AFAIK,攻击者可以在IMG的SRC等地方加载邪恶的外部JS,也可以在其他有效标签的属性中加载。所以我想到一个想法,如果我禁止用户的html加载我的域外的资源,(和我的文档/数据库中已有的净化器),我可以说我的网站没有XSS攻击吗?
让我重新构思并构建我的查询。
首先,我要建立一个网站,允许用户输入(直接或通过上传)HTML代码。很典型。
我将使用HTML Purifier来“清除”用户代码。
第一个问题:(Q1)即使使用HTML Purifier,攻击者仍然可以通过有效的html属性加载他们的邪恶脚本。这是真的吗?
(Q2)我想我不能允许< script> HTML Purifier设置中的标记,因为任何邪恶的事情都可以在< script>中的JS中发生。标签。这是真的吗?
(Q3) HTML Purifier是否可以在文本的任何位置删除所有不指向我信任的域的链接?
最后,一个理论问题(Q4)如果文本已被HTML纯化,并且没有外部链接,我们可以说它完全免于XSS吗?
P.S。还有一件事是,我想允许某些(非常有限的)JS。你觉得在最后的过程中将(ajax:getUserName)这样的(我的自定义)标签转换成真正的JS可以吗?
非常感谢!
答案 0 :(得分:1)
让我们暂时假设HTML Purifier没有安全漏洞(一般来说,假设软件没有错误,这是一个不好的选择,所以要小心。)
Q1:如果你按照文档的描述使用HTML Purifier(用它来净化HTML,只在HTML上下文中放置HTML Purifier的结果,正确配置你的字符编码),那么攻击者就不应该加载他们的脚本。它是开箱即用的“安全”。
Q2:HTML Purifier不允许你允许>脚本&lt ;;它将拒绝它作为未知。
问题3:不幸的是,HTML Purifier目前仅直接支持主机名中的黑名单字符串(使用%URI.HostBlacklist),并且只允许本地链接(%URI.DisableExternal)。但您可以为更复杂的策略定义URI过滤器。
问题4:不需要外部链接限制,它应该没有XSS。
PS:没关系,只要你正确处理包含在JS中的用户输入。