NodeJS中如何防止用户输入引号破坏字符串且保留字符使用权限?
Node.js服务端处理含引号的用户输入:保留字符同时防止注入
要实现保留用户输入的单/双引号,同时避免引号跳出字符串结构,核心是对引号进行转义处理——在引号前添加反斜杠,让解析器将其识别为字符串内容而非结束符。以下是具体实现方式:
1. 针对双引号的转义(适用于生成JS双引号字符串场景)
直接用正则全局替换双引号为转义后的\":
const unfilteredInput = 'I am a hacker and I will "break" out of this string! Muhahahaha!'; const filteredInput = unfilteredInput.replace(/"/g, '\\"'); // 输出结果:I am a hacker and I will \"break\" out of this string! Muhahahaha!
2. 同时处理单引号和双引号
如果你的场景需要兼容两种引号,比如要生成同时包含单双引号的字符串,可以分别转义:
function escapeQuotes(str) { // 转义双引号和单引号 return str.replace(/"/g, '\\"').replace(/'/g, "\\'"); } const userInput = 'I said "hello" to \'everyone\''; const sanitizedInput = escapeQuotes(userInput); // 输出结果:I said \"hello\" to \'everyone\'
关键注意事项
- 转义规则要匹配使用场景:如果是将输入存入数据库,优先用参数化查询(如MySQL的
?占位符、MongoDB的参数化方法),比手动转义更安全;如果是生成前端JS代码或JSON字符串,上述转义方法完全适用。 - 必须在服务端处理:客户端转义可能被篡改,服务端处理才能从根源避免注入风险。
内容的提问来源于stack exchange,提问作者Bananos
相关产品推荐
相关产品推荐

