基于富文本小部件的输入在 HTL 中呈现电话链接

Rendering telephone links in HTL based on input from a Rich Text widget

我的项目中有一个使用富文本编辑小部件 (xtype="richtext") 的组件,该组件在整个站点中用作默认文本组件。

用户希望能够使用 tel URI 方案将 phone link 插入到使用此组件输入的文本中。

该对话框允许他们这样做,但是稍后在 Sightly/HTL 中呈现富文本编辑的内容时,将使用 html 上下文:

{$text @ context='html'}

完成后,我的属性值将被忽略。

存储在存储库中的HTML是:

 <a href="tel:04242424242">Call us!</a>

在作者实例的页面上实际呈现的内容是:

 <a>Call us!</a>

在发布实例上,由于 link 检查器,标签被完全删除。

将上下文更改为 unsafe 会导致 href 呈现,但这不是我愿意接受的解决方案。组件用处很多,我想确保XSS防护足够。

有什么方法可以影响 HTL 中 html 上下文处理 telephone links 的方式?

我尝试在 apps/cq/xssprotection/config.xml:

的叠加层中添加一个额外的正则表达式
<regexp name="onsiteURL" value="([\p{L}\p{N}\\.\#@$%\+&amp;;\-_~,\?=/!]+|\#(\w)+)"/>
<regexp name="offsiteURL" value="(\s)*((ht|f)tp(s?)://|mailto:)[\p{L}\p{N}]+[\p{L}\p{N}\p{Zs}\.\#@$%\+&amp;;:\-_~,\?=/!]*(\s)*"/>
<regexp name="telephoneLink" value="tel:\+?[0-9]+"/>

进一步:

<attribute name="href">
    <regexp-list>
        <regexp name="onsiteURL"/>
        <regexp name="offsiteURL"/>
        <regexp name="telephoneLink"/>
    </regexp-list>
    <!-- Skipped for brevity -->
</attribute>

但这似乎并不影响 Sightly/HTL 在 html 上下文中转义字符串的方式。

我也试过覆盖 /libs/sling/xss/config.xml 中的 Sling xss 规则,但也没有成功。

如何做到?

有两个xss保护配置文件:

  1. /libs/cq/xssprotection/config.xml
  2. /libs/sling/xss/config.xml

Sightly使用的是第二个,这意味着你需要在路径/apps/sling/xss/config.xml

上覆盖它

值得一提的是,新配置似乎只有在您的 aem 实例重启后才能应用。