LEPTON CMS 7.0.0
feel free to keep it strictly simple...
Loading...
Searching...
No Matches
lepton_securecms.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
21{
22 public string $_salt = '';
23 public string $_reftoken = '';
24
29 public function __construct()
30 {
31 $this->_generate_salt();
32 }
33
38 public function _generate_salt(): void
39 {
40 // server depending values
41 $salt = $_SERVER['SERVER_SIGNATURE'] ?? 'L';
42 $salt .= $_SERVER['SERVER_SOFTWARE'] ?? 'E';
43 $salt .= $_SERVER['SERVER_NAME'] ?? 'P';
44 $salt .= $_SERVER['SERVER_ADDR'] ?? 'T';
45 $salt .= $_SERVER['SERVER_PORT'] ?? 'ON';
46 $salt .= PHP_VERSION;
47 $salt .= time();
48 $this->_salt = $salt;
49 }
50
59 public function createLepToken(): string
60 {
61 if (function_exists('microtime'))
62 {
63 list($usec, $sec) = explode(" ", microtime());
64 $time = (string) ((float) $usec + (float) $sec);
65 }
66 else
67 {
68 $time = (string) time();
69 }
70
71 $token = substr(hash("sha512", $time . $this->_salt), 0, 21) . "z" . substr($time, 0, 10);
72
73 (isset($_SESSION['LepTokens'])) ? $_SESSION['LepTokens'][] = $token : $_SESSION['LepTokens'] = [$token];
74 (isset($_SESSION['LepTokens'])) ? ($_SESSION['LepTokens'][$token] = $this->_reftoken) : ($_SESSION['LepTokens'] = [$token => $this->_reftoken]);
75
76 return $token;
77 }
78
87 public function checkLepToken(): bool
88 {
89// echo (LEPTON_tools::display($_SESSION['LepTokens'] ?? "no token", "pre", "ui message green"));
90// echo (LEPTON_tools::display($_REQUEST, "pre", "ui message green"));
91
92 if (!LEPTOKEN_LIFETIME)
93 {
94 return true;
95 }
96
97 $retval = false;
98
99 if (isset($_GET['leptoken']))
100 {
101 $currentToken= $_GET['leptoken'];
102 }
103 elseif (isset($_GET['amp;leptoken']))
104 {
105 $currentToken= $_GET['amp;leptoken'];
106 }
107 elseif (isset($_POST['leptoken']))
108 {
109 $currentToken= $_POST['leptoken'];
110 }
111 elseif (isset($_POST['amp;leptoken']))
112 {
113 $currentToken= $_POST['amp;leptoken'];
114 }
115 else
116 {
117 return $retval;
118 }
119
120 if (isset($_SESSION['LepTokens']))
121 {
122 // delete dated tokens, except the last one
123 $this->deleteLepTokensByTimeout();
124
125 if ($this->testForReloadPage($currentToken) === true)
126 {
127 return true;
128 }
129 $tokens = $_SESSION['LepTokens'];
130 // $n = count($tokens);
131
132 // echo (LEPTON_tools::display($tokens, "pre", "ui message green"));
133
134 foreach ($tokens as $token => $ref)
135 {
136
137 if ($currentToken== $token)
138 {
139 $retval = true;
140 foreach($_SESSION['LepTokens'] as $index => $value)
141 {
142 if($value === $token)
143 {
144 $aRev = explode("z", $token);
145 $aRefTime = intval($aRev[1] ?? 0);
146 if (time() - $aRefTime > 60*10)
147 unset($_SESSION['LepTokens'][$index], $_SESSION['LepTokens'][$value]);
148 //break;
149 }
150 }
151 //break;
152 }
153 }
154
155
156 }
157 return $retval;
158 }
159
160 /*
161 * delete all Tokens in $_SESSION
162 * @access public
163 * for use in frontend addons to prevent backend access
164 *
165 * requirements: an active session must be available and LEPTOKEN must be enabled!
166 *
167 */
168 static public function clearLepTokens(): void
169 {
170 if (isset($_SESSION['LepTokens']) && isset($_SESSION['GROUPS_ID']))
171 {
172 $aTemp = explode(", ", $_SESSION['GROUPS_ID']);
173 if ((!in_array(1, $aTemp)) && ((false === LEPTON_admin::getUserPermission("settings_backend_permission")) && (false === LEPTON_admin::getUserPermission("backend_permission"))))
174 {
175
176 unset($_SESSION['LepTokens']);
177 }
178 }
179 }
180
185 private function deleteLepTokensByTimeout(): bool
186 {
187 $timeOut = intval(time() - LEPTOKEN_LIFETIME);
188 foreach($_SESSION['LepTokens'] as $key => $value)
189 {
190 $tempToken = empty($value) ? $key : $value;
191 $tempTerms = explode("z", $tempToken);
192 $tokenTime = intval($tempTerms[1]);
193 if ($tokenTime < $timeOut)
194 {
195 unset($_SESSION['LepTokens'][$key], $_SESSION['LepTokens'][$value]);
196 }
197 }
198
199 return true;
200 }
201
202 private function testForReloadPage($lookUpToken): bool
203 {
204 $counter = 0;
205 $deleteFlag = false;
206 foreach($_SESSION['LepTokens'] as $key => $value)
207 {
208 if (($key == $lookUpToken) && ($counter > 1))
209 {
210 // delete followers
211 $deleteFlag= true;
212 continue;
213 } else {
214 $counter++;
215 }
216
217 if ($deleteFlag === true)
218 {
219 unset($_SESSION['LepTokens'][$key], $_SESSION['LepTokens'][$value]);
220 }
221 }
222
223 if (true === $deleteFlag)
224 {
225 $_SESSION['LepTokens'] = [];
226 $_SESSION['LepTokens'][] = $lookUpToken;
227 $_SESSION['LepTokens'][$key] = "";
228 }
229 return $deleteFlag;
230 }
231
232}
static getUserPermission(string $sPermissionName="")