前端如何有效过滤输入框中的特殊字符防止XSS攻击? 茜茜的笔记 提问于 2026-02-08 11:26:54 阅读 55 安全 我在做登录表单时发现,用户可以通过输入框发送类似;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, ''); }); 真正安全得靠后端过滤+前端输出转义,前端输入过滤只是第一道提醒。 回复 点赞 9 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); 回复 点赞 5 2026-02-08 11:31 加载更多 相关推荐 2 回答 30 浏览 前端输入过滤真能防XSS吗?我这样写安全吗? 我在React项目里做用户评论功能,担心XSS攻击,就对输入做了个简单过滤,但不确定这样够不够。比如把script标签替换成空字符串,但听说还有其他绕过方式? 下面是我现在的处理代码: const s... 开发者玉聪 安全 2026-03-25 11:41:19 2 回答 70 浏览 前端做XSS输入过滤到底该在哪儿处理? 我最近在用 Vue 写一个评论功能,用户输入的内容会直接渲染到页面上。我知道要防 XSS,但不确定是在输入时就过滤掉危险字符,还是在渲染时转义?试过在提交前用正则替换 script 标签,但好像还是能... Code°秀云 安全 2026-03-19 08:44:24 2 回答 79 浏览 xss库过滤后内容变空白是怎么回事? 我用 xss 库对用户输入做过滤,但有些内容直接变成空字符串了,比如输入 alert(1) 确实该被清掉,但像 test 这种,为啥连 "test" 都没了? 我试过默认配置和自定义白名单,还是不行。... Mr-熙然 安全 2026-03-18 14:13:19 2 回答 57 浏览 CSS样式中的expression()如何绕过事件属性过滤导致XSS? 我在开发评论系统时发现,即使过滤了所有on开头的事件属性,用户提交的CSS代码还是能触发XSS。比如有人写了个这样的样式: div { width: expression(alert('XSS'));... 打工人尚勤 安全 2026-02-12 21:11:25 2 回答 63 浏览 安全需求文档该怎么写才能防XSS漏洞? 我们在做用户评论功能时,测试发现XSS漏洞,但安全需求文档里只写了“过滤危险字符”,具体该怎么做才能有效防范呢? 之前尝试用正则表达式过滤了<script>标签和特殊字符,但测试人员用Un... UX-彩云 安全 2026-01-29 21:23:26 2 回答 32 浏览 前端如何用安全沙箱防止XSS攻击? 最近在做一个富文本编辑器的功能,用户可以输入HTML内容,但我担心XSS问题。听说可以用沙箱隔离,比如把内容放到iframe里?我试过动态创建iframe然后写入内容,但样式全乱了,而且有些脚本还是能... UP主~静静 安全 2026-03-27 18:24:25 1 回答 37 浏览 前端如何在Vue项目中安全地处理用户输入以防止XSS攻击? 我在做DevSecOps集成时,安全扫描工具报了一个高危XSS漏洞,说用户输入直接渲染到页面上了。我试过用v-text,但有些地方必须用v-html展示富文本,结果就被扫出问题了。 比如下面这段代码,... 长孙艳杰 安全 2026-03-24 10:12:22 2 回答 33 浏览 白盒测试时如何检测前端代码中的XSS漏洞? 我在做项目的安全自查,听说白盒测试要查XSS,但不太清楚具体该看哪些地方。比如用户输入的内容在页面上展示时,是不是只要用了innerHTML就有风险? 我试过用ESLint的security插件,但它... UI雯婧 安全 2026-03-23 19:25:20 2 回答 50 浏览 前端代码审查时如何发现XSS漏洞? 最近在做安全Code Review,看到一段动态插入HTML的代码,担心有XSS风险。比如这种: element.innerHTML = userContent; 有没有什么具体的检查点或者工具能帮我... Code°洋泽 安全 2026-03-21 03:05:17 1 回答 50 浏览 前端做渗透测试时怎么测XSS漏洞? 我最近在学Web安全,想自己动手测下项目里的XSS漏洞。但作为前端,不太清楚具体该从哪下手,比如哪些输入点要重点检查? 我在本地试过往表单里输alert(1),但页面没弹窗,是被框架自动转义了吗?比如... 公孙毓珂 安全 2026-03-20 21:03:19
输入框可以加oninput实时过滤,但不能只依赖它:
真正安全得靠后端过滤+前端输出转义,前端输入过滤只是第一道提醒。
示例代码:
function escapeHtml(str) {
return str.replace(/[&<>"'
]/g, function(match) {': '`'return ({
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'
})[match];
});
}
// 使用时
const userInput = document.querySelector('input').value;
const safeValue = escapeHtml(userInput);