You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress仪表盘XSS防护:如何禁止编辑器保存script标签?

WordPress仪表盘XSS防护:拦截编辑器保存<script>标签的实现方案

完全可以实现,通过后端强制过滤为主、前端校验为辅的方案,就能彻底阻止文章/页面编辑器提交保存恶意脚本内容,阻断对应XSS风险。

已知风险场景

未做额外防护时,拥有管理员、编辑权限的账号在编辑器代码视图插入<script>alert(1)</script>这类恶意脚本,提交后内容会被直接存入数据库,前台页面加载对应内容时就会执行脚本,触发XSS漏洞。
编辑器中注入恶意script标签示例

具体实现方式

1. 利用WordPress原生权限过滤机制

WordPress自带KSES内容安全过滤机制,默认会对投稿者、作者等非管理员角色提交的内容做标签校验,自动剥离<script>、<iframe>这类危险标签,日常运营中只要不给非可信用户分配编辑及以上权限,就能覆盖大部分低权限账号的注入风险。
注意:默认配置下单站点模式的管理员、编辑角色提交内容不会经过KSES过滤,需要额外加规则做强制拦截。

2. 后端强制过滤(必做,核心防护)

将下面的代码添加到当前主题的functions.php文件,或者自定义功能插件中,即可实现全角色无差别拦截,不管是管理员还是其他角色,保存文章/页面内容时都会自动剥离script标签及内联事件属性,从入库层面阻断恶意脚本存储:

// 保存文章/页面内容前强制过滤script标签及XSS常用内联事件
add_filter('content_save_pre', 'wp_strip_xss_tags_in_content', 10, 1);
function wp_strip_xss_tags_in_content($content) {
    // 移除所有script标签及标签内的脚本内容
    $content = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $content);
    // 移除onclick/onload/onerror等on开头的事件注入属性
    $content = preg_replace('/\son[a-z]+\s*=\s*("|\')[^"\']*("|\')/i', '', $content);
    return $content;
}

这段代码优先级高于编辑器提交逻辑,哪怕前端绕过了校验,后端入库前也会把恶意脚本清理干净。

3. 可选:编辑器前端前置提示

如果需要提升使用体验,可以额外添加古腾堡/经典编辑器的前端校验逻辑,检测到内容里包含script标签时直接提示用户不允许提交,不用等后端返回结果,但这层校验仅做体验优化,不能替代上面的后端过滤规则。

额外加固建议

  • 严格管控后台角色权限,非必要不分配编辑、管理员权限
  • 避免使用来源不明的破解主题、插件,这类组件经常自带后门绕过WordPress原生过滤规则
  • 不要为了方便全局放开内容标签权限,确需嵌入第三方脚本的场景单独做白名单校验

内容的提问来源于stack exchange,提问作者Ajil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:18:20