TYPO3:如何通过 curl post fe_login 所需的登录数据?
TYPO3: How can I post required login data for fe_login via curl?
我创建了一个受保护的页面并添加了一些受保护的文件。文件保护由扩展名 "fal_securedownload" 完成。因此,前端用户必须登录才能获取文件,而前端用户需要访问这些文件。默认情况下效果很好。
此外,我还创建了一个扩展,它应该为每个前端用户动态生成一个包含可访问文件的 zip 存档。为此,我需要传递通过 curl 登录的用户的前端用户数据,但是我该怎么做呢?
我的收集函数如下所示:
protected function collectFile($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
return($result);
}
文件收集的相关代码如下:
foreach ($files as $file) {
$downloadFile = $this->collectFile($file);
DebuggerUtility::var_dump($downloadFile);
}
如您所见,我只是尝试通过 url 获取文件。此 urls 将由 "fal_securedownload" 自动生成,如下所示:
http://example.com/index.php?eID=dumpFile&t=f&f=3&token=8cfae76eae5b13ad01e83031f52208c988f80940
所以没有什么特别的,我收到了每个文件的以下消息:
Extbase Variable Dump
'Authentication required!' (24 chars)
此消息将由扩展程序"fal_securedownload"生成并且完全可以,因为curl目前不知道授权数据,所以我如何传递当前登录的登录数据在前端用户到 curl?
据我了解,您想为特定的前端用户或前端用户组触发 HTTP 请求。在这方面,如果会话尚不存在,您需要注意会话传输或登录过程。
请求方式
但是,您也可以使用 TYPO3 AdminPanel 中使用的前端用户模拟。此组件定义 $GLOBALS['TSFE']->simUserGroup
并允许为特定用户组预览内容。您可以使用您的 eID 脚本或 TypoScriptFrontendController
(TSFE) 中的相应挂钩来使用它。查看以下方法可能对您的情况有所帮助:
TypoScriptFrontendController::initFEuser()
& "initFEuser" hook
TypoScriptFrontendController::determineId()
& $this->simUserGroup
property
可以从 $GLOBALS['TSFE']->fe_user->id
中检索当前会话 ID。在自定义 cURL 请求中将会话作为 cookie 转发的替代方法可能是使用保存会话哈希的 ftu
参数(有关详细信息,请参阅 TSref documentation)。
一般来说,将用户会话转移到某个外部系统或使用不安全的传输(例如非 HTTPS 连接)是您应用程序的潜在攻击媒介,因为它可能会泄露信息,从而允许会话劫持任何人。请从 Web 应用程序安全的角度考虑这一点。
检索方法
但是,由于您似乎已经拥有对数据库的完全访问权限,因此在我看来,通过前端渲染过程的往返行程是多余的。
更好的方法是已经收集和聚合域模型中的文件并解析那里的权限。使用前端渲染过程只是将解释和查询部分委托给其他控制器。
如果您使用普通的 TYPO3 核心,您只需评估数据库 tables tt_content
和 sys_file
(如果安装了系统扩展 filemetadata
) 关于 table 字段中的前端权限 fe_groups
.
你需要做的是打开开发者工具,加载只有登录用户才能访问的页面,然后通过'Copy as cURL'右键菜单复制网络选项卡中的link物品。这将做的是将一个 curl 命令复制到您的剪贴板中,该命令包含需要发送到 TYPO3 的所有内容,以允许访问仅供用户访问的页面。由此您可以轻松自定义它,以便能够为每个登录用户生成相同的 curl 命令。
我创建了一个受保护的页面并添加了一些受保护的文件。文件保护由扩展名 "fal_securedownload" 完成。因此,前端用户必须登录才能获取文件,而前端用户需要访问这些文件。默认情况下效果很好。
此外,我还创建了一个扩展,它应该为每个前端用户动态生成一个包含可访问文件的 zip 存档。为此,我需要传递通过 curl 登录的用户的前端用户数据,但是我该怎么做呢?
我的收集函数如下所示:
protected function collectFile($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
return($result);
}
文件收集的相关代码如下:
foreach ($files as $file) {
$downloadFile = $this->collectFile($file);
DebuggerUtility::var_dump($downloadFile);
}
如您所见,我只是尝试通过 url 获取文件。此 urls 将由 "fal_securedownload" 自动生成,如下所示:
http://example.com/index.php?eID=dumpFile&t=f&f=3&token=8cfae76eae5b13ad01e83031f52208c988f80940
所以没有什么特别的,我收到了每个文件的以下消息:
Extbase Variable Dump
'Authentication required!' (24 chars)
此消息将由扩展程序"fal_securedownload"生成并且完全可以,因为curl目前不知道授权数据,所以我如何传递当前登录的登录数据在前端用户到 curl?
据我了解,您想为特定的前端用户或前端用户组触发 HTTP 请求。在这方面,如果会话尚不存在,您需要注意会话传输或登录过程。
请求方式
但是,您也可以使用 TYPO3 AdminPanel 中使用的前端用户模拟。此组件定义 $GLOBALS['TSFE']->simUserGroup
并允许为特定用户组预览内容。您可以使用您的 eID 脚本或 TypoScriptFrontendController
(TSFE) 中的相应挂钩来使用它。查看以下方法可能对您的情况有所帮助:
TypoScriptFrontendController::initFEuser()
& "initFEuser" hookTypoScriptFrontendController::determineId()
&$this->simUserGroup
property
可以从 $GLOBALS['TSFE']->fe_user->id
中检索当前会话 ID。在自定义 cURL 请求中将会话作为 cookie 转发的替代方法可能是使用保存会话哈希的 ftu
参数(有关详细信息,请参阅 TSref documentation)。
一般来说,将用户会话转移到某个外部系统或使用不安全的传输(例如非 HTTPS 连接)是您应用程序的潜在攻击媒介,因为它可能会泄露信息,从而允许会话劫持任何人。请从 Web 应用程序安全的角度考虑这一点。
检索方法
但是,由于您似乎已经拥有对数据库的完全访问权限,因此在我看来,通过前端渲染过程的往返行程是多余的。 更好的方法是已经收集和聚合域模型中的文件并解析那里的权限。使用前端渲染过程只是将解释和查询部分委托给其他控制器。
如果您使用普通的 TYPO3 核心,您只需评估数据库 tables tt_content
和 sys_file
(如果安装了系统扩展 filemetadata
) 关于 table 字段中的前端权限 fe_groups
.
你需要做的是打开开发者工具,加载只有登录用户才能访问的页面,然后通过'Copy as cURL'右键菜单复制网络选项卡中的link物品。这将做的是将一个 curl 命令复制到您的剪贴板中,该命令包含需要发送到 TYPO3 的所有内容,以允许访问仅供用户访问的页面。由此您可以轻松自定义它,以便能够为每个登录用户生成相同的 curl 命令。