'tel'属性在AEM 6.1中的经典UI中的富文本编辑器中的锚标记的href中不起作用

时间:2017-07-28 10:57:11

标签: xss cq5 aem sightly htl

我正在使用AEM 6.1 SP2,我正在尝试在锚标记的href中启用'tel'属性,以使点击呼叫功能起作用。我已经添加了'htmlRules'节点 并在htmlRules节点下链接节点,其中'protocols'属性为[http://,https://,ftp://,tel:,mailto:,file://]

链接中指定的

- http://labs.6dglobal.com/blog/2013-01-11/configuring-telephone-tags-within-rich-text-components-and-link-checker/

rte.js中的'validateHref'函数确实读取'protocols'属性并将'tel'属性验证为有效,但不确定为什么'tel'属性在单击'ok'时不会在标记中保留在作者对话框中。

这是锚标记 -

<a style="color: #6c6c6c; text-decoration: underline;" class="tel" href="tel:1234 567 891">1234 567 89</a>

这就是它在页面上呈现为标记的方式 -

<a style="color: rgb(108,108,108);text-decoration: underline;" class="tel">1234 567 89</a>

这是'htmlRules'节点xml -

<htmlRules jcr:primaryType="nt:unstructured">
   <serializer jcr:primaryType="nt:unstructured">
      <cleanup jcr:primaryType="nt:unstructured">
         <pre
            jcr:primaryType="nt:unstructured"
            tagsToRemove="[\0]"/>
         <post
            jcr:primaryType="nt:unstructured"
            tagsToRemove="[\0]"/>
         <paste
            jcr:primaryType="nt:unstructured"
            tagsToRemove="[\0]"/>
      </cleanup>
   </serializer>
   <links
      jcr:primaryType="nt:unstructured"
      protocols="[http://,https://,ftp://,tel:,mailto:,file://]"/>
</htmlRules>

3 个答案:

答案 0 :(得分:1)

修复后将xssprotection配置文件覆盖在 -

/libs/cq/xssprotection/config.xml

/apps/cq/xssprotection/config.xml

并添加&#39; tel&#39;正则表达式列表中的属性

<regexp name="telURL" value="tel:[0-9]+"/>

<attribute name="href">
 <regexp-list>
  <regexp name="onsiteURL"/>
  <regexp name="offsiteURL"/>
  <regexp name="telURL"/>
 </regexp-list>
</attribute>

这已在

的博客中描述

https://experience-aem.blogspot.com.au/2015/05/aem-6-sp2-handling-custom-protocol-in-link-href-in-rte.html

虽然在博客和其他地方已经提到

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

https://forums.adobe.com/thread/2329552

对于配置文件,配置文件存在于 -

/libs/sling/xss/config.xml

而不是

/libs/cq/xssprotection/config.xml

即使我使用了一个明显的组件,

/libs/wcm/foundation/components/text/text.html

即便如此,在/libs/sling/xss/config.xml上覆盖配置文件没有任何效果,我不得不将文件覆盖在/libs/cq/xssprotection/config.xml。我正在使用aem 6.1 SP2。 AEM的神秘方式

答案 1 :(得分:0)

您在问题中链接的解决方案似乎不适用于最新版本的AEM。

现在负责从href开始删除tel的机制是HTL XSS保护,它在写入之前扫描属性。避免这种情况的最简单方法是在Rich Text组件中禁用它:${properties.text @ context='unsafe'}。这不是最安全的解决方案,相反,最好通过以下步骤扩展XSS保护配置:

  1. 通过将XSS配置文件从libs复制到应用程序来覆盖它们:
  2. /libs/cq/xssprotection/config.xml - &gt; /apps/cq/xssprotection/config.xml /libs/sling/xss/config.xml - &gt; /apps/sling/xss/config.xml

    1. 使用新的regexp为tel:
    2. 添加协议

      <regexp name="telURL" value="tel:[0-9]+"/>

      1. telURL添加到regexp-listhref属性的<regexp name="telURL"/>
      2. x-cq-linkchecker="skip"

        1. 执行这些更改后,可能还需要重新启动AEM实例。
        2. 如果出现问题,您可以在this blog page和此Stackoverflow post上详细了解相关信息。

          此外,链接检查器机制仍可能在编辑模式下将您的链接标记为无效,并且在发布时,它可以被删除。

          根据您是否需要它使其适用于您应用中的一个或所有特定锚点或所有锚点,您可以:

          • tel属性添加到您的主播,正如i.net在帖子
          • 下的评论中所建议的那样
          • 或者如果您希望允许将tel:添加到网页上的任何可能的锚点,请在日CQ链接检查服务中添加例外/entitled-attribs 特殊链接前缀 OSGI服务。请注意,然后需要在所有作者和发布实例上应用服务配置。

答案 2 :(得分:0)

我们按照你分享的参考链接做了同样的事情,但我们正在传递&#34; href&#34;对话框中的值。 ex href =&#34; tel:$ {properties.propertyname}&#34;。 或者您可以尝试像href =&#34; $ {properties.propertyname}&#34;并传递对话框中的值&#34; tel:123456789&#34;。 不确定这是否会对你有所帮助。 感谢。