开发一个网页表单时,用户在搜索框里输入“北京 <script>alert('XSS')</script>”这样的内容,如果不做处理,轻则页面显示错乱,重则被植入恶意脚本。这就是典型的需要字符串处理和用户输入清洗的场景。
\n\n为什么必须清洗用户输入
\n用户输入不可信是软件开发的基本前提。无论是注册用户名、填写地址,还是提交评论,都可能夹带特殊字符、SQL 注入片段或跨站脚本代码。直接使用这些数据,系统就容易出问题。
\n\n比如后台用拼接方式执行 SQL 查询:
'SELECT * FROM users WHERE name = '' + userName + '''
如果 userName 是 admin'; DROP TABLE users; --,整个用户表可能就被删了。
常见清洗手段
\n最基础的做法是去除或转义危险字符。例如把 < 替换成 <,> 替换成 >,防止 HTML 标签解析。
function sanitizeInput(str) {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '"')\n .replace(/'/g, ''');\n}\n\n这个函数能在前端初步过滤,但不能完全依赖前端。后端依然要再检查一遍,毕竟请求可以绕过页面直接发。
\n\n利用正则限制输入格式
\n手机号只能是11位数字,邮箱必须包含@符号,这类规则可以用正则表达式提前拦截错误输入。
\n\nconst phoneRegex = /^1[3-9]\\d{9}$/;\nif (!phoneRegex.test(userPhone)) {\n throw new Error('手机号格式不正确');\n}\n\n这样既提升了数据质量,也减少了后续处理负担。
\n\n使用成熟库更省心
\n自己写清洗逻辑容易遗漏边界情况。推荐使用像 validator.js 这样的工具库,它内置了邮箱、URL、IP 等多种校验方法。
const validator = require('validator');\n\nif (validator.isEmail(userInput)) {\n console.log('邮箱合法');\n} else {\n console.log('邮箱格式错误');\n}\n\n对于富文本内容,可选用 DOMPurify 清理 HTML 中的 script、iframe 等危险标签,保留安全的排版元素。
别忘了 trimming 和空值处理
\n用户复制粘贴时容易带出前后空格,比如用户名“ jack ”,直接存进去会导致后续比对失败。用 trim() 处理一下更稳妥。
\n\nconst cleanName = userInput.trim();\nif (cleanName === '') {\n throw new Error('用户名不能为空');\n}\n\n空字符串、null、undefined 都要统一判断,避免程序崩溃。
\n\n输入清洗不是一次性任务,而是贯穿从前端到后端、从数据库到接口响应的完整链条。每个环节多检查一步,系统就多一分安全。”,"seo_title":"字符串处理与用户输入清洗实战指南","seo_description":"了解如何通过字符串处理技术清洗用户输入,防止XSS、SQL注入等安全问题,提升软件配置安全性与稳定性。","keywords":"字符串处理,用户输入清洗,输入验证,安全防护,XSS防御,SQL注入,正则表达式,数据清洗"}