我正在使用Java OWASP HTML Sanitizer(HtmlPolicyBuilder
)来清理由第三方服务提供的web应用程序中呈现的HTML。
使用一些开箱即用的选项,我注意到<form>
标记已被删除。我知道我可以将它们包含在allowElements("form")
中,但有充分的理由不允许使用表单吗?
在我的网站上呈现他人的表单时,我应该考虑什么样的XSS攻击?
作为参考,我的消毒政策是:
new HtmlPolicyBuilder()
.allowCommonBlockElements()
.allowCommonInlineFormattingElements()
.allowStyling()
.allowStandardUrlProtocols()
.toFactory()
网络钓鱼就是一个例子。显示用户名/密码表单,将操作参数指向攻击者的web服务器,并诱使用户相信他们需要重新验证。此外,如果用户启用了自动填充功能,则表单可以自动填充用户名/密码详细信息。
正如Sean所指出的,有人可以成功地从你的用户那里窃取一些信息。不过,为了添加更多信息,只使用这些固定的方法,你会有一个非常有限的白名单,但也许这就是你想要的。
你会允许的元素是:
"b"、"i"、"font"、"s"、"u"、"o"、"sub"、"ins"、"del"、"strong"、"strike"、"tt"、"code"、"big"、"small"、"br"、"span"、"em"、"p"、"div"、"h1"、。
allowStyling只允许全局使用样式属性。allowStandardUrlProtocols将允许使用"http"、"https"、"mailto"协议的url,无论您在哪里引用url(a:href img:src q:cite等),但无论如何都不允许使用这些元素或属性,因此它基本上是无用的。
你可能想花时间在线查看示例白名单(不仅仅是OJHS),以了解常见的允许元素&属性,以更好地开发您的白名单。