无<字符的用户生成内容是否能确保不会被渲染为HTML标签?
背景
我维护着一个允许用户生成包含HTML标签内容的现有Web应用。为缓解XSS攻击及其他风险,我使用HTML Purifier库,将内容解析为HTML后,在服务器端渲染前移除不在白名单内的标签。
我希望通过低成本检测优化性能:仅对存在<字符(可能存在HTML标签的标识)的高风险字符串调用资源消耗较高的Purifier库。
核心问题
那么,用户生成字符串中若不存在<字符,是否能确保该字符串在服务器端嵌入HTML文档后不会被渲染为HTML标签?换句话说,攻击者是否能通过某种子字符串,在原字符串不含<字符的情况下,让浏览器渲染出如<script></script>这类标签?
我所考虑的是字符编码技巧:无需原字符串包含字面<字符,就能让浏览器将其处理为标签的起始字符。
使用场景说明
我可以接受解析用户输入的HTML实体并渲染为对应字符,例如将&渲染为&。我仅需确保不会渲染出白名单外的HTML标签。
对字符串中所有HTML实体(如<、>、&)进行编码的常规方案不适用于本应用:必须允许白名单内的HTML标签。
内容的提问来源于stack exchange,提问作者Cooper Labinger
相关产品推荐
相关产品推荐

