aspcms审核元素

 人参与 | 时间:2026-10-17 07:07:28

AspCMS 的审核审核元素,说白了就是元素一套过滤机制。你后台提交的审核内容,不管是元素文章、评论还是审核自定义表单,在入库前都要过这道关。元素很多人以为审核就是审核简单的“敏感词替换”,真去翻源码会发现,元素它分了好几层,审核每层干的元素事不一样。

先说最外层的审核 CheckBadWord 函数。这玩意儿在 inc/AspCms_Common.asp 里,元素逻辑粗暴:把用户提交的审核字符串跟数据库里 badword 表的内容逐个比对。匹配上了就替换成你后台设置的元素“替代字符”,默认是审核 ***。我见过一个站点,管理员把“杀”字加进了敏感词库,结果用户写“杀毒软件”全变成了“***毒软件”,哭笑不得。这层过滤不区分上下文,纯粹字符串匹配,效率高但容易误伤。

再往里走是 HTML 标签过滤。AspCMS 默认允许一部分标签,比如 <p>、<br>、<img>,但 <script>、<iframe> 这些直接干掉。实现方式在 inc/AspCms_Editor.asp 里,用正则把危险标签整段删掉。注意,是删掉,不是转义。这意味着你写 <script>alert(1)</script>,提交后连标签带内容全没了,页面上只剩空白。有些老版本存在绕过漏洞,比如用 <scr 这种嵌套写法,过滤一次后剩下的片段又拼成了合法标签。后来官方加了循环过滤才堵上。

第三层是参数化查询。这层不直接管“审核”,但决定了审核后的数据怎么进数据库。AspCMS 早期版本拼 SQL 字符串,后来改成用 Command 对象加参数。我实测过,在文章标题里写 ' or 1=1 --,老版本直接报错暴露表名,新版本会把它当普通文本存进去。这层跟审核元素的关系是:它保证了即使前两层漏了,注入攻击也打不进来。但别高兴太早,参数化只防注入,不防 XSS。

实际运营中,最头疼的是自定义表单。后台可以建“留言”“报名”等表单,每个字段都能单独设审核规则。比如“手机号”字段可以强制正则匹配 ^1[3-9]\d{ 9}$,不匹配就拒绝提交。但很多管理员不知道这个功能,默认全开“仅过滤敏感词”,结果用户往“姓名”栏里填一段 HTML,前台直接渲染出弹窗。我帮人排查过一例:留言板里有人提交 <img src=x onerror=alert(1)>,因为“姓名”字段没开 HTML 过滤,页面一加载就弹窗。修复方法很简单,在表单字段设置里把“允许 HTML”关掉。

还有个坑是审核状态。AspCMS 的文章有“待审核”“已审核”“未通过”三种状态。但“待审核”的文章,如果管理员直接访问 /admin/ 下的预览链接,照样能看到内容。更隐蔽的是,有些模板在列表页用 where checked=1 过滤,但详情页忘了加,导致未审核文章能被猜到 ID 直接访问。我见过一个政府站,后台设了“所有文章需审核”,结果前台 show.asp?id=123 能打开未审核的会议记录。这不算漏洞,算逻辑疏忽。

最后提一句 Session 验证。AspCMS 后台登录后,审核操作会检查 Session("AdminName") 是否存在。但有些二次开发的版本,把审核接口单独抽出来做 API,忘了加 Session 判断,导致任何人 POST 一个 action=check 就能把文章状态改成“已审核”。这种案例在 2018 年前后特别多,现在少了,但老站还在跑。

用 AspCMS 做站,审核元素别全信默认配置。敏感词库要自己维护,HTML 过滤要按字段单独设,审核状态在前台每个出口都验一遍。花半小时翻翻 inc 目录下的几个 asp 文件,比看十篇教程管用。

顶: 32194踩: 3