‪TYPO3CMS  ‪main
AbstractFormProtection.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
22 
31 {
33 
38 
44  protected ‪$sessionToken;
45 
49  protected function ‪getSessionToken()
50  {
51  $this->sessionToken = $this->sessionToken ?? $this->‪retrieveSessionToken();
53  }
54 
60  public function ‪clean()
61  {
62  $this->sessionToken = '';
63  $this->‪persistSessionToken();
64  }
65 
79  public function ‪generateToken($formName, $action = '', $formInstanceName = '')
80  {
81  if ($formName == '') {
82  throw new \InvalidArgumentException('$formName must not be empty.', 1294586643);
83  }
84  $hashService = GeneralUtility::makeInstance(HashService::class);
85  return $hashService->hmac($formName . $action . $formInstanceName . $this->‪getSessionToken(), self::class);
86  }
87 
98  public function ‪validateToken($tokenId, $formName, $action = '', $formInstanceName = '')
99  {
100  $hashService = GeneralUtility::makeInstance(HashService::class);
101  $validTokenId = $hashService->hmac(((string)$formName . (string)$action) . (string)$formInstanceName . $this->‪getSessionToken(), self::class);
102  if (hash_equals($validTokenId, (string)$tokenId)) {
103  $isValid = true;
104  } else {
105  $isValid = false;
106  }
107  if (!$isValid) {
109  }
110  return $isValid;
111  }
112 
118  protected function ‪generateSessionToken()
119  {
120  return GeneralUtility::makeInstance(Random::class)->generateRandomHexString(64);
121  }
122 
127  protected function ‪createValidationErrorMessage()
128  {
129  if ($this->validationFailedCallback !== null) {
130  $this->validationFailedCallback->__invoke();
131  }
132  }
133 
139  abstract protected function ‪retrieveSessionToken();
140 
147  abstract public function ‪persistSessionToken();
148 }
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\generateToken
‪string generateToken($formName, $action='', $formInstanceName='')
Definition: AbstractFormProtection.php:76
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\$sessionToken
‪string null $sessionToken
Definition: AbstractFormProtection.php:41
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\getSessionToken
‪string getSessionToken()
Definition: AbstractFormProtection.php:46
‪TYPO3\CMS\Core\Security\BlockSerializationTrait
Definition: BlockSerializationTrait.php:28
‪TYPO3\CMS\Core\FormProtection
Definition: AbstractFormProtection.php:16
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\createValidationErrorMessage
‪createValidationErrorMessage()
Definition: AbstractFormProtection.php:124
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\clean
‪clean()
Definition: AbstractFormProtection.php:57
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\validateToken
‪bool validateToken($tokenId, $formName, $action='', $formInstanceName='')
Definition: AbstractFormProtection.php:95
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection
Definition: AbstractFormProtection.php:31
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\$validationFailedCallback
‪Closure null $validationFailedCallback
Definition: AbstractFormProtection.php:35
‪TYPO3\CMS\Core\Crypto\Random
Definition: Random.php:27
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\retrieveSessionToken
‪string retrieveSessionToken()
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\persistSessionToken
‪persistSessionToken()
‪TYPO3\CMS\Core\Crypto\HashService
Definition: HashService.php:27
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\generateSessionToken
‪string generateSessionToken()
Definition: AbstractFormProtection.php:115