在SDL中如何防止表单提交时的XSS攻击? 程序猿熙恩 提问于 2026-01-30 13:32:35 阅读 76 安全 我在用Vue做用户反馈表单时,按照SDL要求加了输入过滤,但测试时发现恶意脚本还是能执行… 表单代码是这样的: 提交 我在提交前用正则替换了<script>标签: userInput.replace(/<script>/gi, '') 但用测试字符串<script>alert('xss')</script>提交后,页面还是弹窗了。 尝试过在后端也加了htmlspecialchars转义,但不确定是否符合SDL规范。有没有更标准的防护流程?是不是还需要做输入长度限制和白名单验证? 安全开发生命周期 我来解答 赞 9 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 UX翌岍 Lv1 你在前后端都做了处理,但还是中招了,这问题确实得好好说道说道。光靠正则替换 标签是不够的,恶意用户完全可以换种花样绕过你这个简单的过滤。 ### 前端 先说前端吧,Vue里可以考虑用 v-html 的时候要特别小心,直接插值绑定可能会导致XSS。你可以试试 Vue 自带的过滤机制,或者用一些成熟的库来清理输入,比如 DOMPurify。 简单示例: import DOMPurify from 'dompurify'; methods: { sanitizeInput(input) { return DOMPurify.sanitize(input); } } 在提交前对用户输入调用一下 sanitizeInput 方法。 ### 后端 再看后端,htmlspecialchars 是个不错的选择,但它只是把特殊字符转义了,并不能完全防止所有 XSS 攻击。建议用 WordPress 提供的函数来增强安全性。比如: - wp_kses_post():允许一部分 HTML 标签通过,适合内容型输入。 - esc_html():完全转义 HTML,适合普通文本输入。 如果是反馈表单这种场景,一般推荐用 esc_html() 来确保输入是纯文本。代码可以这么写: function sanitize_feedback($input) { return esc_html($input); } // 在保存数据时调用 $safe_input = sanitize_feedback($_POST['feedback']); ### 长度限制和白名单 你说得没错,长度限制和白名单验证也很重要。可以用钩子函数来实现这些逻辑。比如在表单提交时加个校验: add_filter('preprocess_feedback', 'validate_feedback_length'); function validate_feedback_length($input) { if (strlen($input) > 500) { // 假设最大长度为500 wp_die('输入太长啦!'); } return $input; } 总结一下,前端用 DOMPurify 过滤,后端用 WordPress 的安全函数处理,再加上长度限制和必要的白名单验证,这样基本就能满足 SDL 的要求了。别忘了测试的时候多试试不同的攻击向量,确保防护到位。 回复 点赞 13 2026-01-30 15:00 加载更多 相关推荐 1 回答 106 浏览 前端应急响应时如何快速定位XSS漏洞的攻击入口? 最近在处理一个紧急安全事件,发现有人利用表单提交功能注入了XSS脚本。我们用了OWASP ZAP扫描,但始终找不到具体漏洞点。前端代码里有个动态渲染的评论区,像这样: <div id="comm... 慕容昕彤 安全 2026-02-19 09:06:33 2 回答 52 浏览 前端用JWT时,如何防止Token被XSS攻击窃取? 我在项目里用localStorage存JWT token,但同事说这样容易被XSS攻击,我试过把token加密存进去,但后端验证时解密失败了。现在改成用httpOnly的cookie,但axios发请... 百里国娟 前端 2026-02-09 16:08:30 2 回答 77 浏览 React表单提交时如何防止XSS攻击?IDS/IPS配置有什么建议? 我在做一个用户反馈表单时发现,如果用户输入带标签的内容,提交后服务器IDS直接拦截请求了。但前端已经用了DOMPurify处理输入内容,为什么还是被拦截? 这是我的表单组件代码: import { u... FSD-义霞 安全 2026-02-02 08:01:36 1 回答 26 浏览 前端如何安全地处理用户输入避免XSS攻击? 我在做一个评论功能,用户提交的内容直接用 innerHTML 插入到页面,结果被安全扫描工具报了 XSS 风险。我试过用 DOMPurify,但不确定是不是用对了,比如下面这样写安全吗? const ... 丽萍(打工版) 安全 2026-03-05 21:53:18 2 回答 27 浏览 前端被XSS攻击了,应急响应该怎么做? 我们线上 Vue 项目突然收到用户反馈,页面里弹出了奇怪的 alert,怀疑是 XSS 攻击。我看了下代码,确实有个地方直接用了 v-html 渲染用户输入的内容,但之前没做任何过滤。现在想知道:一旦... 设计师红芹 安全 2026-02-24 19:23:19 2 回答 32 浏览 CSS样式中的expression()如何绕过事件属性过滤导致XSS? 我在开发评论系统时发现,即使过滤了所有on开头的事件属性,用户提交的CSS代码还是能触发XSS。比如有人写了个这样的样式: div { width: expression(alert('XSS'));... 打工人尚勤 安全 2026-02-12 21:11:25 2 回答 38 浏览 用户输入渲染到HTML时如何防止XSS攻击?我的表单代码可能有漏洞 我在做一个表单,用户输入的内容会直接显示在页面上,但测试时发现可以注入脚本。比如用户输入alert(1)就会执行。现在用handleInput处理输入,但不知道该怎么安全转义: <div>... 极客凌熙 安全 2026-02-03 19:19:29 1 回答 37 浏览 React中如何防止使用window.location.search导致的DOM型XSS? 我在React组件里用URL参数显示用户输入,发现这样写可能有XSS漏洞: function SearchResults() { const searchParam = new URLSearchPa... 东方爱菊 安全 2026-01-31 08:19:29 1 回答 20 浏览 前端项目中如何用SAST工具检测XSS漏洞? 最近在做安全开发生命周期的实践,想在CI里集成SAST工具自动扫描XSS问题。但试了几个工具(比如SonarQube、ESLint插件)都没能准确识别出我这段模板里的危险用法,是我写法太隐蔽还是配置不... Designer°奕诺 安全 2026-02-28 14:48:26 1 回答 52 浏览 前端项目中如何规范处理安全漏洞修复流程? 我们团队最近在做SDL(安全开发生命周期),但对前端这块的漏洞管理有点懵。比如发现一个XSS风险,改完代码后,怎么确保它被正确记录、验证和关闭? 试过在Jira里建个ticket,但不知道要不要关联c... 上官正利 安全 2026-02-24 01:48:18
标签是不够的,恶意用户完全可以换种花样绕过你这个简单的过滤。### 前端
先说前端吧,Vue里可以考虑用
的时候要特别小心,直接插值绑定可能会导致XSS。你可以试试 Vue 自带的过滤机制,或者用一些成熟的库来清理输入,比如 DOMPurify。v-html简单示例:
在提交前对用户输入调用一下
sanitizeInput方法。### 后端
再看后端,
htmlspecialchars是个不错的选择,但它只是把特殊字符转义了,并不能完全防止所有 XSS 攻击。建议用 WordPress 提供的函数来增强安全性。比如:-
wp_kses_post():允许一部分 HTML 标签通过,适合内容型输入。-
esc_html():完全转义 HTML,适合普通文本输入。如果是反馈表单这种场景,一般推荐用
esc_html()来确保输入是纯文本。代码可以这么写:### 长度限制和白名单
你说得没错,长度限制和白名单验证也很重要。可以用钩子函数来实现这些逻辑。比如在表单提交时加个校验:
总结一下,前端用 DOMPurify 过滤,后端用 WordPress 的安全函数处理,再加上长度限制和必要的白名单验证,这样基本就能满足 SDL 的要求了。别忘了测试的时候多试试不同的攻击向量,确保防护到位。