首页 > 解决方案 > 如何处理 Sitecore 富文本字段中的图像标签,以便它可以自动处理媒体哈希?

问题描述

我的 Sitecore 网站是 7.5。我已经实现了媒体保护请求功能,但我可以在 Sitecore 日志中看到太多错误:

错误 MediaRequestProtection:遇到无效/缺失的哈希值。预期的哈希值:Media URL: , Referring URL:

我的问题是如何处理 Sitecore 富文本字段中的图像标签,以便它可以自动处理媒体哈希?

标签: cachingsitecoremediarte

解决方案


自 7.5 版以来,Sitecore 引入了媒体请求保护,它是添加到资产 URL 的哈希值。我认为这是避免任何类型的拒绝服务攻击的一件好事。

在每个传入的媒体请求中,Sitecore 都会计算请求查询字符串参数的哈希值,并将其与给定的哈希值进行比较。如果它们相等,则 Sitecore 将根据提供的 URL 参数(例如,图像大小调整)执行所需的例程,但如果它们不相等,则 Sitecore 将抛出MediaRequestProtection错误并按原样发送原始文件。

Sitecore 富文本编辑器 (RTE) 中存在一个已知问题,带有438674 Ticket Id“媒体请求保护不适用于 RTE 内超链接中的媒体”描述。Sitecore 支持可以提供一个补丁来覆盖从 RTE 字段呈现媒体链接的方法,以包括哈希值。请参阅此处的 Sitecore 8.2 发行说明下的参考。

如果您现在没有任何 Sitecore 支持覆盖,那么您可以实施如下解决方法:

  1. 在保存之前连接到saveRichTextContent管道以更改 RTE 内容。对于引入管道后尚未修改的项目,saveRichTextContent您可以为富文本字段类型创建新的renderField管道,但我宁愿建议坚持saveRichTextContent管道方法并简单地使用包含媒体资产的 RTE 重新保存所有项目。
  2. 编写您的自定义代码以遍历 RTE HTML 中的图像并相应地修改图像渲染。请注意,您需要使用Sitecore.Resources.Media.HashingUtils.ProtectAssetUrl()方法来生成添加了哈希的完整 URL,例如:
string mediaUrl = Sitecore.Resources.Media.MediaManager.GetMediaUrl(yourMediaItem);
string safeMediaUrl = Sitecore.Resources.Media.HashingUtils.ProtectAssetUrl(mediaUrl);

推荐阅读