‪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 
21 
30 {
32 
37 
43  protected ‪$sessionToken;
44 
48  protected function ‪getSessionToken()
49  {
50  $this->sessionToken = $this->sessionToken ?? $this->‪retrieveSessionToken();
52  }
53 
59  public function ‪clean()
60  {
61  $this->sessionToken = '';
62  $this->‪persistSessionToken();
63  }
64 
78  public function ‪generateToken($formName, $action = '', $formInstanceName = '')
79  {
80  if ($formName == '') {
81  throw new \InvalidArgumentException('$formName must not be empty.', 1294586643);
82  }
83  $tokenId = ‪GeneralUtility::hmac($formName . $action . $formInstanceName . $this->‪getSessionToken());
84  return $tokenId;
85  }
86 
97  public function ‪validateToken($tokenId, $formName, $action = '', $formInstanceName = '')
98  {
99  $validTokenId = ‪GeneralUtility::hmac(((string)$formName . (string)$action) . (string)$formInstanceName . $this->‪getSessionToken());
100  if (hash_equals($validTokenId, (string)$tokenId)) {
101  $isValid = true;
102  } else {
103  $isValid = false;
104  }
105  if (!$isValid) {
107  }
108  return $isValid;
109  }
110 
116  protected function ‪generateSessionToken()
117  {
118  return GeneralUtility::makeInstance(Random::class)->generateRandomHexString(64);
119  }
120 
125  protected function ‪createValidationErrorMessage()
126  {
127  if ($this->validationFailedCallback !== null) {
128  $this->validationFailedCallback->__invoke();
129  }
130  }
131 
137  abstract protected function ‪retrieveSessionToken();
138 
145  abstract public function ‪persistSessionToken();
146 }
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\generateToken
‪string generateToken($formName, $action='', $formInstanceName='')
Definition: AbstractFormProtection.php:75
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\$sessionToken
‪string null $sessionToken
Definition: AbstractFormProtection.php:40
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\getSessionToken
‪string getSessionToken()
Definition: AbstractFormProtection.php:45
‪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:122
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\clean
‪clean()
Definition: AbstractFormProtection.php:56
‪TYPO3\CMS\Core\Utility\GeneralUtility\hmac
‪static string hmac($input, $additionalSecret='')
Definition: GeneralUtility.php:474
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\validateToken
‪bool validateToken($tokenId, $formName, $action='', $formInstanceName='')
Definition: AbstractFormProtection.php:94
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection
Definition: AbstractFormProtection.php:30
‪TYPO3\CMS\Core\FormProtection\AbstractFormProtection\$validationFailedCallback
‪Closure null $validationFailedCallback
Definition: AbstractFormProtection.php:34
‪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\FormProtection\AbstractFormProtection\generateSessionToken
‪string generateSessionToken()
Definition: AbstractFormProtection.php:113