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: {"@extension":"Yyyyyy","@controller":"Login","@action":"login"}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
相关产品推荐
相关产品推荐

