我正在创建一个警报插件(纯JavaScript,没有jQuery),允许用户在其警报框中输入自定义HTML。但是,XSS攻击和DOM攻击是一个主要问题,因为我使用.innerHTML来实现这一目标。我对输入卫生的尝试如下。问题是HTML标记包含在输出中。有没有办法防止这些攻击,同时仍然执行请求的innerHTML更改并且输出中没有显示标记?
<!--Example-->
//HTML
<div id='div'></div>
//JavaScript
var name = '<h1>james</h1>';
function sanitizeHTML(unsafeString) {
return unsafeString.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/\"/g, '"')
.replace(/\'/g, ''')
.replace(/\//g, '/');
};
document.getElementById('div').innerHTML = sanitizeHTML(name);
//Outputs '<h1>james</h1>' with tags showing