JavaScript无法直接防止代码注入,核心是禁止执行不可信字符串:禁用eval()、Function()、setTimeout(string)等;插入HTML时用textContent或DOMPurify转义;JSON解析用JSON.parse()而非eval;启用CSP禁用'unsafe-eval'和'unsafe-inline'。
JavaScript本身不能直接防止代码注入攻击,关键在于不执行不可信的字符串作为代码。常见错误是用
eval()、Function()、setTimeout(string)或setInterval(string)动态运行用户输入的内容。
这是最核心的防护原则。任何来自用户、URL参数、表单、API响应或本地存储的数据,都不能直接传给以下函数:
eval()new Function(...)setTimeout(string, ...) 或 setInterval(string, ...)
document.write()(尤其拼接用户数据时)例如,不要这样写:
❌ 错误示例const userInput = 'alert("xss")';
eval(userInput); // 危险!
向页面插入用户内容时,必须防止XSS(跨站脚本)——本质也是一种代码注入。
textContent代替innerHTML,当只需显示纯文本时 → zuojiankuohaophpcn),或使用可信的库如DOMPurify
document.createElement() + appendChild() + textContent
例如:
✅ 推荐方式const el = document.createElement('div');
el.textContent = userInput; // 自动转义,安全
JSON.parse()本身安全(只要输入是合法JSON),但注意别用eval()模拟解析;模板引擎如Handlebars、Mustache默认会自动转义变量,但需确认未关闭转义(如Handlebars中{{{ }}}是不转义的,慎用)。
JSON.parse(),不用eval('(' + jsonStr + ')')
CSP不是JS代码层面的修复,但能大幅降低注入成功后的危害。通过HTTP响应头设置:
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'
应移除'unsafe-eval'和'unsafe-inline',改用外部JS文件和事件委托。
、onclick="...")eval类函数执行