TYPO3 v10 升级流体显示器 HTML 标签

TYPO3 v10 Upgrade Fluid Displays HTML Tags

我最近从第 9 版升级到第 10 版,之后,我覆盖流体模板的一些扩展呈现普通 html,就像这样:

<center><div id="event-id-{event.uid}-arrow"class="arrow-down"></div></center>

打字稿:

plugin.tx_sfeventmgt {
  view {
    templateRootPaths {
      0 = {$plugin.tx_sfeventmgt.view.templateRootPath}
      1 = fileadmin/templates/sf_event_mgt/Templates/
    }
    partialRootPaths {
      0 = {$plugin.tx_sfeventmgt.view.partialRootPath}
      1 = fileadmin/templates/sf_event_mgt/Partials/
    }
    layoutRootPaths {
      0 = {$plugin.tx_sfeventmgt.view.layoutRootPath}
      1 = fileadmin/templates/sf_event_mgt/Layouts/
    }
  }
}

Partials/Event/ListItem.html:

<div style="cursor: pointer; margin-left: -0.75rem; margin-right: -0.75rem; " onclick="" class="list-view-item hoverbackground">
    <center><div id="event-id-{event.uid}-arrow"class="arrow-down"></div></center>
</div>
<p>&nbsp;</p>

任何提示为什么这发生在版本 10 而不是版本 9 上?

此致

您的问题的解决方案很可能是,您必须删除模板或布局文件中某处的 <f:format.html> viewHelper。

我建议您逐步删除模板文件(模板、布局和部分)中的 <f:format.html>,以便识别 ViewHelper 在何处使用“错误”。

背景:

通过安全修复 TYPO3-CORE-SA-2021-013,HTML 消毒剂组件已被引入 TYPO3 核心。该组件可确保在通过 <f:format.html> ViewHelper 呈现内容时转义潜在的恶意标记。此 ViewHelper 通常应该用于呈现富文本字段中的内容。如果您使用此 ViewHelper 来呈现普通的 HTML,那么您将遇到所描述的问题,因为 HTML 清理器将简单地转义不允许的标记。

示例:

<f:format.html>
    <style>p {font-size: 10px;}</style>

    <center>Text is centered</center>

    <strong>Text is bold</strong>

    <f:link.external uri="https://typo3.org">https://typo3.org</f:link.external>
</f:format.html>

这将呈现以下内容 HTML:

<p>&nbsp;</p>
<p>    &lt;style&gt;p {font-size: 10px;}&lt;/style&gt;</p>
<p>&nbsp;</p>
<p>    </p>&lt;center&gt;Text is centered&lt;/center&gt;
<p>&nbsp;</p>
<p>    <strong>Text is bold</strong></p>
<p>&nbsp;</p>
<p>    <a href="https://typo3.org" target="_blank" rel="noreferrer">https://typo3.org</a></p>
<p>&nbsp;</p>

你看,<style><center> 标签在渲染时都被转义了(类似于你截图中的场景)。

注意:请不要简单地将<f:format.html> viewHelper替换为<f:format.raw>,因为这可能会在ViewHelper时引入跨站点脚本安全漏洞与不受信任的用户输入一起使用。

此外,请不要通过在安装工具中设置 [SYS][features][security.frontend.htmlSanitizeParseFuncDefault] = false 在前端上下文中禁用 HTML 消毒程序。