JavaScript协议链接也会触发XSS吗?
我在做富文本展示功能,用户输入的内容里可能包含超链接。我过滤了标签,但发现如果链接是javascript:alert(1)这种形式,点击后还是会执行代码,这算XSS漏洞吗?
我试过用正则匹配href属性,但总觉得不够稳妥。有没有更可靠的方案?比如只允许http或https开头的链接?
下面是我目前处理链接的代码:
function sanitizeHref(href) {
if (!href) return '#';
// 简单过滤 javascript: 协议
if (href.trim().toLowerCase().startsWith('javascript:')) {
return '#';
}
return href;
}
java script:、javanscript:或者data:text/html等各种姿势绕过。白名单才是正解,只允许已知安全的协议:
检查一下你的场景,如果是富文本整体清洗,直接上 DOMPurify 这种成熟库,别自己造轮子,XSS 的坑比你想象的多。