字符串处理与用户输入清洗的实用技巧

{"title":"字符串处理与用户输入清洗的实用技巧","content":"

开发一个网页表单时,用户在搜索框里输入“北京 <script>alert('XSS')</script>”这样的内容,如果不做处理,轻则页面显示错乱,重则被植入恶意脚本。这就是典型的需要字符串处理和用户输入清洗的场景。

\n\n

为什么必须清洗用户输入

\n

用户输入不可信是软件开发的基本前提。无论是注册用户名、填写地址,还是提交评论,都可能夹带特殊字符、SQL 注入片段或跨站脚本代码。直接使用这些数据,系统就容易出问题。

\n\n

比如后台用拼接方式执行 SQL 查询:
'SELECT * FROM users WHERE name = '' + userName + '''
如果 userName 是 admin'; DROP TABLE users; --,整个用户表可能就被删了。

\n\n

常见清洗手段

\n

最基础的做法是去除或转义危险字符。例如把 < 替换成 &lt;> 替换成 &gt;,防止 HTML 标签解析。

\n\n
function sanitizeInput(str) {\n  return str\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/"/g, '&quot;')\n    .replace(/'/g, '&#x27;');\n}
\n\n

这个函数能在前端初步过滤,但不能完全依赖前端。后端依然要再检查一遍,毕竟请求可以绕过页面直接发。

\n\n

利用正则限制输入格式

\n

手机号只能是11位数字,邮箱必须包含@符号,这类规则可以用正则表达式提前拦截错误输入。

\n\n
const phoneRegex = /^1[3-9]\\d{9}$/;\nif (!phoneRegex.test(userPhone)) {\n  throw new Error('手机号格式不正确');\n}
\n\n

这样既提升了数据质量,也减少了后续处理负担。

\n\n

使用成熟库更省心

\n

自己写清洗逻辑容易遗漏边界情况。推荐使用像 validator.js 这样的工具库,它内置了邮箱、URL、IP 等多种校验方法。

\n\n
const validator = require('validator');\n\nif (validator.isEmail(userInput)) {\n  console.log('邮箱合法');\n} else {\n  console.log('邮箱格式错误');\n}
\n\n

对于富文本内容,可选用 DOMPurify 清理 HTML 中的 script、iframe 等危险标签,保留安全的排版元素。

\n\n

别忘了 trimming 和空值处理

\n

用户复制粘贴时容易带出前后空格,比如用户名“  jack  ”,直接存进去会导致后续比对失败。用 trim() 处理一下更稳妥。

\n\n
const 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注入,正则表达式,数据清洗"}