前端如何有效过滤输入框中的特殊字符防止XSS攻击? 茜茜的笔记 提问于 2026-02-08 11:26:54 阅读 34 安全 我在做登录表单时发现,用户可以通过输入框发送类似;alert(1)的恶意代码。尝试用正则表达式过滤,但发现当用户快速输入时,分号还是能通过。还试过在CSS里加了这段样式: input { /* 尝试用CSS阻止特殊字符 */ content: replace(/;/g, ''); caret-color: red; /* 输入时显示红光标提醒*/ } 结果样式虽然生效了,但输入框依然能正常输入分号。这是不是说明CSS根本无法拦截输入?有没有更可靠的前端参数过滤方法? 我来解答 赞 5 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 南宫静怡 Lv1 CSS确实没法拦截输入,content属性也不能这么用。前端防XSS光靠过滤输入不可靠,你应该在输出时转义,比如用下面这个函数: function escapeHtml(str) { return str.replace(/[&<>'"]/g, tag => ({ '&': '&', '<': '<', '>': '>', "'": ''', '"': '"' }[tag])); } 输入框可以加oninput实时过滤,但不能只依赖它: input.addEventListener('input', () => { input.value = input.value.replace(/[;<>"']/g, ''); }); 真正安全得靠后端过滤+前端输出转义,前端输入过滤只是第一道提醒。 回复 点赞 4 2026-02-10 08:13 夏侯海宇 Lv1 对输入内容做XSS过滤不能依赖CSS,应该在JavaScript中对输入值进行处理。可以用正则表达式过滤特殊字符,同时结合HTML转义处理输出内容。 示例代码: function escapeHtml(str) { return str.replace(/[&<>"']/g, function(match) { return ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '': '`' })[match]; }); } // 使用时 const userInput = document.querySelector('input').value; const safeValue = escapeHtml(userInput); 回复 点赞 1 2026-02-08 11:31 加载更多 相关推荐 2 回答 19 浏览 CSS样式中的expression()如何绕过事件属性过滤导致XSS? 我在开发评论系统时发现,即使过滤了所有on开头的事件属性,用户提交的CSS代码还是能触发XSS。比如有人写了个这样的样式: div { width: expression(alert('XSS'));... 打工人尚勤 安全 2026-02-12 21:11:25 2 回答 43 浏览 安全需求文档该怎么写才能防XSS漏洞? 我们在做用户评论功能时,测试发现XSS漏洞,但安全需求文档里只写了“过滤危险字符”,具体该怎么做才能有效防范呢? 之前尝试用正则表达式过滤了<script>标签和特殊字符,但测试人员用Un... UX-彩云 安全 2026-01-29 21:23:26 1 回答 91 浏览 前端应急响应时如何快速定位XSS漏洞的攻击入口? 最近在处理一个紧急安全事件,发现有人利用表单提交功能注入了XSS脚本。我们用了OWASP ZAP扫描,但始终找不到具体漏洞点。前端代码里有个动态渲染的评论区,像这样: <div id="comm... 慕容昕彤 安全 2026-02-19 09:06:33 1 回答 15 浏览 Nessus扫描显示React组件存在XSS漏洞,但代码已经过滤输入了怎么办? 大家好,我在用Nessus扫描公司前端项目时,发现一个React组件被标记为XSS漏洞。但代码明明已经用了DOMPurify过滤输入,这是怎么回事? 我的代码是这样的: import DOMPurif... 设计师锦灏 安全 2026-02-10 12:07:31 1 回答 18 浏览 前端用JWT时,如何防止Token被XSS攻击窃取? 我在项目里用localStorage存JWT token,但同事说这样容易被XSS攻击,我试过把token加密存进去,但后端验证时解密失败了。现在改成用httpOnly的cookie,但axios发请... 百里国娟 前端 2026-02-09 16:08:30 1 回答 32 浏览 React中如何防止使用window.location.search导致的DOM型XSS? 我在React组件里用URL参数显示用户输入,发现这样写可能有XSS漏洞: function SearchResults() { const searchParam = new URLSearchPa... 东方爱菊 安全 2026-01-31 08:19:29 2 回答 35 浏览 设置了X-XSS-Protection后CSS样式被过滤导致页面错乱怎么办? 我在开发页面时启用了X-XSS-Protection: 1; mode=block头,但发现动态生成的用户提交内容里的CSS样式被过滤了。比如用户输入的标签带内联样式时,浏览器直接移除了style属性... 程序员亚美 安全 2026-01-29 16:50:32 2 回答 57 浏览 修复XSS漏洞后怎么验证是否彻底解决了? 刚处理完前端页面的XSS漏洞,用两个不同工具测试结果却不一样,一个显示干净一个还能注入,这时候该怎么确认漏洞到底修好了没? 之前在评论区输入,修复后用OWASP ZAP扫描没问题,但自己手动测试居然还... a'ゞ雨辰 安全 2026-01-26 23:49:24 1 回答 14 浏览 设置了X-XSS-Protection头还是被Chrome提示XSS防护已禁用? 最近在配置安全头的时候发现了个怪事,明明在Express里设置了X-XSS-Protection: 1; mode=block,但Chrome控制台还是弹出“XSS 防护已禁用”的警告,这是怎么回事啊... 春萍酱~ 安全 2026-02-18 12:01:29 1 回答 20 浏览 React密码强度验证如何有效检测特殊字符? 我在做一个密码强度验证的React组件,要求密码必须包含至少一个特殊字符。写了正则表达式检测,但检测总是失败,明明输入了@符号也没反应,哪里出问题了? 这是我的表单处理代码,用了onChange实时验... 皇甫凌硕 安全 2026-02-17 13:04:30
输入框可以加oninput实时过滤,但不能只依赖它:
真正安全得靠后端过滤+前端输出转义,前端输入过滤只是第一道提醒。
示例代码:
function escapeHtml(str) {
return str.replace(/[&<>"'
]/g, function(match) {': '`'return ({
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'
})[match];
});
}
// 使用时
const userInput = document.querySelector('input').value;
const safeValue = escapeHtml(userInput);