caching - 如何处理 Sitecore 富文本字段中的图像标签,以便它可以自动处理媒体哈希?
问题描述
我的 Sitecore 网站是 7.5。我已经实现了媒体保护请求功能,但我可以在 Sitecore 日志中看到太多错误:
错误 MediaRequestProtection:遇到无效/缺失的哈希值。预期的哈希值:Media URL: , Referring URL:
我的问题是如何处理 Sitecore 富文本字段中的图像标签,以便它可以自动处理媒体哈希?
解决方案
自 7.5 版以来,Sitecore 引入了媒体请求保护,它是添加到资产 URL 的哈希值。我认为这是避免任何类型的拒绝服务攻击的一件好事。
在每个传入的媒体请求中,Sitecore 都会计算请求查询字符串参数的哈希值,并将其与给定的哈希值进行比较。如果它们相等,则 Sitecore 将根据提供的 URL 参数(例如,图像大小调整)执行所需的例程,但如果它们不相等,则 Sitecore 将抛出MediaRequestProtection错误并按原样发送原始文件。
Sitecore 富文本编辑器 (RTE) 中存在一个已知问题,带有438674 Ticket Id和“媒体请求保护不适用于 RTE 内超链接中的媒体”描述。Sitecore 支持可以提供一个补丁来覆盖从 RTE 字段呈现媒体链接的方法,以包括哈希值。请参阅此处的 Sitecore 8.2 发行说明下的参考。
如果您现在没有任何 Sitecore 支持覆盖,那么您可以实施如下解决方法:
- 在保存之前连接到
saveRichTextContent
管道以更改 RTE 内容。对于引入管道后尚未修改的项目,saveRichTextContent
您可以为富文本字段类型创建新的renderField
管道,但我宁愿建议坚持saveRichTextContent
管道方法并简单地使用包含媒体资产的 RTE 重新保存所有项目。 - 编写您的自定义代码以遍历 RTE HTML 中的图像并相应地修改图像渲染。请注意,您需要使用
Sitecore.Resources.Media.HashingUtils.ProtectAssetUrl()
方法来生成添加了哈希的完整 URL,例如:
string mediaUrl = Sitecore.Resources.Media.MediaManager.GetMediaUrl(yourMediaItem);
string safeMediaUrl = Sitecore.Resources.Media.HashingUtils.ProtectAssetUrl(mediaUrl);
推荐阅读
- mqtt - 使用 MQTT 启用规则链警报在 thingsboard 中不起作用
- laravel - cURL 错误 60:SSL 证书问题:证书链中的自签名证书
- javascript - 为什么在我的代码示例中没有调用 SIGTERM 事件处理程序?
- c++ - 为什么 lambda 上的朋友声明在 gcc 上不起作用
- android - 如何计算用户在android中使用我们的应用程序的时间
- javascript - 取消提示没有返回预期的结果
- java - 在 Android 的 MainActivity 中实现一个类有什么缺点?
- sql - 交易日期 <= @Date 参数的表上的每日增量结果
- python - 没有得到二进制列熊猫的统计分析
- c - 对于 C 的基于概率的随机数生成器,这是一个很好的设置吗?