You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 11.5旧扩展登录表单HMAC验证失败日志泛滥,如何解决?

TYPO3 11.5 扩展升级后表单HMAC验证错误日志泛滥的解决方法

将旧扩展升级至TYPO3 11.5版本后,遭遇机器人/黑客频繁非法填充自定义登录表单,导致「表单的HMAC无法验证」错误日志大量产生。相关表单代码及机器人提交的请求体如下:

登录表单代码

<f:form action="login" enctype="multipart/form-data" additionalParams="{uriParams}">
      <label for="vraag1"><f:translate key='tx_yyyyyy_domain_model_login.username' /><span class="required">*</span></label>
      <f:form.textfield property="user" name="user" value="" additionalAttributes="{class:'validate', id:'vraag1', placeholder:'', mendatory_message:'<f:translate key=\'tx_yyyyyy_domain_model_login.blank_username\' />'}" />

      <label for="vraag2"><f:translate key='tx_yyyyyy_domain_model_login.password' /><span class="required">*</span></label>
      <f:form.password property="password" name="password" value="" additionalAttributes="{class:'validate', id:'vraag2', placeholder:'', mendatory_message:'<f:translate key=\'tx_yyyyyy_domain_model_login.blank_password\' />'}" />

      <input type="hidden" placeholder="<f:translate key='tx_yyyyyy_domain_model_login.alert' />" class="alert" />
      <f:form.submit name="login" additionalAttributes="{class:'submit'}" value="<f:translate key='tx_yyyyyy_domain_model_login.login' />" onclick="return validateLogin();" />
</f:form>

机器人提交的请求体

__referrer: {
@action: login, 
@controller: Login, 
@extension: Registration, 
@request: {&quot;@extension&quot;:&quot;Yyyyyy&quot;,&quot;@controller&quot;:&quot;Login&quot;,&quot;@action&quot;:&quot;login&quot;}f1b2b3cd8814b4e0a55da1f2b3ad184c47f0116a, 
arguments: YTowOnt97cfe48aef06e5629af4b66052e2c2a11b2b02f68
}, 
__trustedProperties: [Filtered], 
login: Inloggen, 
password: [Filtered], 
user: 
se.r.z.k.r.xyxyxyx.ovthe.man@gmail.com
}

一、阻止错误日志泛滥

1. 调整TYPO3日志级别

在LocalConfiguration.php或AdditionalConfiguration.php中,针对HMAC验证错误禁用或调整日志记录级别:

$GLOBALS['TYPO3_CONF_VARS']['LOG']['TYPO3']['CMS']['Core']['Error']['Security']['writerConfiguration'] = [
    \TYPO3\CMS\Core\Log\LogLevel::WARNING => [
        \TYPO3\CMS\Core\Log\Writer\FileWriter::class => [
            'disabled' => true,
        ],
    ],
];

此配置会关闭HMAC验证警告级别的日志记录,减少日志量。

2. 控制器中捕获异常并跳过日志

在LoginController的loginAction方法开头,捕获HMAC验证异常,不触发日志记录:

use TYPO3\CMS\Core\Error\Security\InvalidHashException;

public function loginAction()
{
    try {
        // 原有表单处理逻辑
    } catch (InvalidHashException $e) {
        // 直接跳过日志记录
        return;
    }
}

二、错误发生时重定向至首页

1. 控制器内直接重定向

在捕获HMAC异常时,直接调用重定向方法跳转至首页:

use TYPO3\CMS\Core\Error\Security\InvalidHashException;

public function loginAction()
{
    try {
        // 原有表单处理逻辑
    } catch (InvalidHashException $e) {
        $this->redirect('index'); // 重定向到首页(需确保首页对应控制器/action正确)
        return;
    }
}

2. 自定义中间件全局处理

创建中间件拦截HMAC验证异常并统一重定向:

步骤1:创建中间件类

namespace Vendor\YourExtension\Middleware;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use TYPO3\CMS\Core\Error\Security\InvalidHashException;
use TYPO3\CMS\Core\Http\RedirectResponse;

class HmacErrorRedirectMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        try {
            return $handler->handle($request);
        } catch (InvalidHashException $e) {
            return new RedirectResponse('/'); // 重定向到首页根路径
        }
    }
}

步骤2:注册中间件

在扩展的ext_localconf.php中添加注册代码:

$GLOBALS['TYPO3_CONF_VARS']['HTTP']['middlewares']['vendor/yourextension/hmac-error-redirect'] = [
    'target' => \Vendor\YourExtension\Middleware\HmacErrorRedirectMiddleware::class,
    'after' => [
        'typo3/cms-frontend/site',
    ],
];

三、根源阻止机器人攻击(额外优化)

  • 添加验证码:集成TYPO3内置验证码或第三方服务,拦截机器人提交。
  • 蜜罐字段:在表单中添加隐藏的输入字段,正常用户不会填充,若提交时该字段有值则直接拒绝请求。
  • 请求频率限制:利用TYPO3速率限制功能,对登录接口设置请求次数上限,防止暴力攻击。

内容的提问来源于stack exchange,提问作者Jacco van der Post

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:32:54