在SDL中如何防止表单提交时的XSS攻击? 程序猿熙恩 提问于 2026-01-30 13:32:35 阅读 67 安全 我在用Vue做用户反馈表单时,按照SDL要求加了输入过滤,但测试时发现恶意脚本还是能执行… 表单代码是这样的: 提交 我在提交前用正则替换了<script>标签: userInput.replace(/<script>/gi, '') 但用测试字符串<script>alert('xss')</script>提交后,页面还是弹窗了。 尝试过在后端也加了htmlspecialchars转义,但不确定是否符合SDL规范。有没有更标准的防护流程?是不是还需要做输入长度限制和白名单验证? 安全开发生命周期 我来解答 赞 3 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 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 的要求了。别忘了测试的时候多试试不同的攻击向量,确保防护到位。 回复 点赞 11 2026-01-30 15:00 加载更多 相关推荐 1 回答 91 浏览 前端应急响应时如何快速定位XSS漏洞的攻击入口? 最近在处理一个紧急安全事件,发现有人利用表单提交功能注入了XSS脚本。我们用了OWASP ZAP扫描,但始终找不到具体漏洞点。前端代码里有个动态渲染的评论区,像这样: <div id="comm... 慕容昕彤 安全 2026-02-19 09:06:33 1 回答 20 浏览 前端用JWT时,如何防止Token被XSS攻击窃取? 我在项目里用localStorage存JWT token,但同事说这样容易被XSS攻击,我试过把token加密存进去,但后端验证时解密失败了。现在改成用httpOnly的cookie,但axios发请... 百里国娟 前端 2026-02-09 16:08:30 1 回答 62 浏览 React表单提交时如何防止XSS攻击?IDS/IPS配置有什么建议? 我在做一个用户反馈表单时发现,如果用户输入带标签的内容,提交后服务器IDS直接拦截请求了。但前端已经用了DOMPurify处理输入内容,为什么还是被拦截? 这是我的表单组件代码: import { u... FSD-义霞 安全 2026-02-02 08:01:36 2 回答 19 浏览 CSS样式中的expression()如何绕过事件属性过滤导致XSS? 我在开发评论系统时发现,即使过滤了所有on开头的事件属性,用户提交的CSS代码还是能触发XSS。比如有人写了个这样的样式: div { width: expression(alert('XSS'));... 打工人尚勤 安全 2026-02-12 21:11:25 2 回答 24 浏览 用户输入渲染到HTML时如何防止XSS攻击?我的表单代码可能有漏洞 我在做一个表单,用户输入的内容会直接显示在页面上,但测试时发现可以注入脚本。比如用户输入alert(1)就会执行。现在用handleInput处理输入,但不知道该怎么安全转义: <div>... 极客凌熙 安全 2026-02-03 19:19:29 1 回答 32 浏览 React中如何防止使用window.location.search导致的DOM型XSS? 我在React组件里用URL参数显示用户输入,发现这样写可能有XSS漏洞: function SearchResults() { const searchParam = new URLSearchPa... 东方爱菊 安全 2026-01-31 08:19:29 2 回答 24 浏览 React中使用dangerouslySetInnerHTML时如何有效防止XSS攻击? 我在做一个可以渲染富文本内容的功能,直接用dangerouslySetInnerHTML渲染用户提交的HTML字符串时,发现能被注入恶意脚本。虽然用了htmlspecialchars转义,但页面样式完... 司马怡博 安全 2026-02-11 10:21:34 2 回答 34 浏览 前端如何有效过滤输入框中的特殊字符防止XSS攻击? 我在做登录表单时发现,用户可以通过输入框发送类似;alert(1)的恶意代码。尝试用正则表达式过滤,但发现当用户快速输入时,分号还是能通过。还试过在CSS里加了这段样式: input { /* 尝试用... 茜茜的笔记 安全 2026-02-08 11:26:54 2 回答 35 浏览 设置了X-XSS-Protection后CSS样式被过滤导致页面错乱怎么办? 我在开发页面时启用了X-XSS-Protection: 1; mode=block头,但发现动态生成的用户提交内容里的CSS样式被过滤了。比如用户输入的标签带内联样式时,浏览器直接移除了style属性... 程序员亚美 安全 2026-01-29 16:50:32 1 回答 14 浏览 设置了X-XSS-Protection头还是被Chrome提示XSS防护已禁用? 最近在配置安全头的时候发现了个怪事,明明在Express里设置了X-XSS-Protection: 1; mode=block,但Chrome控制台还是弹出“XSS 防护已禁用”的警告,这是怎么回事啊... 春萍酱~ 安全 2026-02-18 12:01:29
标签是不够的,恶意用户完全可以换种花样绕过你这个简单的过滤。### 前端
先说前端吧,Vue里可以考虑用
的时候要特别小心,直接插值绑定可能会导致XSS。你可以试试 Vue 自带的过滤机制,或者用一些成熟的库来清理输入,比如 DOMPurify。v-html简单示例:
在提交前对用户输入调用一下
sanitizeInput方法。### 后端
再看后端,
htmlspecialchars是个不错的选择,但它只是把特殊字符转义了,并不能完全防止所有 XSS 攻击。建议用 WordPress 提供的函数来增强安全性。比如:-
wp_kses_post():允许一部分 HTML 标签通过,适合内容型输入。-
esc_html():完全转义 HTML,适合普通文本输入。如果是反馈表单这种场景,一般推荐用
esc_html()来确保输入是纯文本。代码可以这么写:### 长度限制和白名单
你说得没错,长度限制和白名单验证也很重要。可以用钩子函数来实现这些逻辑。比如在表单提交时加个校验:
总结一下,前端用 DOMPurify 过滤,后端用 WordPress 的安全函数处理,再加上长度限制和必要的白名单验证,这样基本就能满足 SDL 的要求了。别忘了测试的时候多试试不同的攻击向量,确保防护到位。