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

Antisamy 1.5未编码@符号的XSS防护问题咨询

解决Antisamy 1.5处理含@的角括号内容时的截断问题

咱们先理清楚问题根源:Antisamy 1.5会把<>包裹的内容默认识别为HTML标签,当它判定这是未知标签时,虽然你设置了onUnknownTag="encode",但默认的内部处理逻辑会对标签内的特殊字符(比如@)做截断处理,才导致你看到的结果只剩<name>。

要实现@符号的正确编码(转成&#64;),同时保留完整的内容,可以通过修改策略文件来搞定,具体步骤如下:

1. 调整全局指令,确保标签内字符被编码

在策略文件的<directives>区块,补充或调整以下指令,强化字符编码的规则:

<!-- 保留你原有的配置 -->
<directive name="onUnknownTag" value="encode"/>
<!-- 添加这两个指令,确保标签内的特殊字符和空格都被正确编码 -->
<directive name="entityEncodeIntraTagWhitespace" value="true"/>
<directive name="encodeQuotes" value="true"/>

这些指令会让Antisamy对未知标签内部的所有特殊字符(包括@)进行实体编码,而不是粗暴截断。

2. 可选:添加自定义规则精准匹配邮箱场景

如果希望Antisamy能识别<>包裹的邮箱(或带额外文本的邮箱格式)是合法内容而非标签,可以在<rules>区块添加自定义正则规则:

<rule name="allow-email-in-angle-brackets" description="Permit email addresses (with optional extra text) wrapped in angle brackets">
  <regexp pattern="^&lt;[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\s+.+)?&gt;$" />
  <directive name="onMatch" value="allow"/>
</rule>

这个正则会匹配两种场景:

  • 纯邮箱:<name@mail.com>
  • 邮箱加额外文本:<name@mail.com testing>

匹配到这类内容时,Antisamy会直接允许保留,同时你可以结合全局编码指令,让@符号被编码。

3. 验证修改效果

修改完策略后,重新测试你的输入:

  • 原输入firstname,lastname<name@mail.com>会被处理为firstname,lastname&lt;name&#64;mail.com&gt;
  • 原输入firstname,lastname<name@mail.com testing>会变成firstname,lastname&lt;name&#64;mail.com testing&gt;

这样既实现了@符号的编码,又不会截断内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:30:04