问题描述
我正在使用DOMPurify对HTML进行清理以防止XSS。
const sanitizedHtml = DOmpurify.sanitize(htmlString);
问题是默认情况下,DOmpurify不支持HTML标记的属性。就我而言,我有一个具有target
属性的锚元素,并且经过清理的HTML删除了target
属性。
const sanitizedHtml = DOmpurify.sanitize(htmlString,{ ADD_ATTR: ['target'] });
但是,我的问题是,如果DOmpurify删除了所有属性,则背后必须有一些原因。因此,如果我允许如上所述的某些特定属性,我是否会开放任何安全风险(XSS攻击)?
解决方法
虽然这可能有点晚了,但我目前正在自己对该主题进行一些研究。也许将来会对某人有所帮助。
简单地允许属性 target
会导致您面临 here 所述的安全问题。
允许 target=_blank
的问题确实存在,但已关闭,因为作者不认为这是他们想要实现的功能。
似乎建议使用钩子(可以在链接中找到示例)来实现此功能。