TYPO3 工作区预览不适用于表单和 HTTP POST 数据

TYPO3 workspace preview not working with forms and HTTP POST data

以下问题已在 #typo3-cms Slack 频道中提出:

A customer of us wants to use the workspaces feature. Thats working fine. But he cannot test his forms because workspaces are not supporting POST requests. (POST requests are incompatible with keyword preview), does anyone have an idea how to make plugins which are working with POST method testable in workspaces or any other workaround?

场景和行为的解释

防止 HTTP POST 请求被执行的检查可以追溯到 2006 年的 TYPO3 CMS 4.0,当时 TYPO3 中引入了工作区功能(参见当时的一致 Git revision)。

由于工作区预览 link 在不受信任的应用程序上下文中初始化后端用户,检查已被用于防止执行管理操作 - 今天,人们会以不同的方式来做,并为此使用 XSRF 保护令牌.

这些工作区预览 link 的处理也是 sprint 2016 中安全问题的一部分,目的是进一步消除这方面可能的安全副作用(有关详细信息,请参阅 TYPO3-CORE-SA-2016-012) .

预览工作区更改有多种可能性:

从工作区模块

预览link

在TYPO3后端的工作区模块top-bar中,预览link可以发送给没有凭据访问TYPO3后端的其他方。这种机制基本上导致了上面提到的 HTTP POST 的问题。

此行为在 class PreviewHook 系统扩展 version(直到并包括 TYPO3 CMS 7)或 workspaces(自并包括TYPO3 内容管理系统 8)。目前没有简单的方法来 by-pass HTTP POST 检查,除非允许可能的预览者使用有效的用户帐户对 TYPO3 后端进行真实和有限的访问。

直接从页面模块预览内容

有权访问 TYPO3 后端的编辑器应在页面模块中使用 TYPO3 的常规预览机制 - 这对于实时版本和工作区更改是相同的。在工作空间中工作的唯一区别是,网站前端会显示其他与工作空间相关的小部件以比较更改。

使用此机制,不会出现本答案开头提到的 HTTP POST 问题,例如可以不受任何限制地使用表格。

如果之前创建工作区预览的方法 link 已经在同一个浏览器中使用,则会创建一个 cookie ADMCMD_prev,它仍然会触发预览 link 行为,并且仍然会导致 HTTP POST 出现问题 - 即使按照本节所述使用常规预览机制。为避免这种情况,必须在浏览器中手动清除此 cookie。