Дано step1.php
с идентифицированным идентификатором пользователя, вызывая step2.php
с Ajax, я хочу проверить внутри step2.php
что это законно называется step1.php
а не злоумышленником. Я в основном хочу защитить себя от подражания другим пользователям. Мне все равно, если один и тот же пользователь звонит мне много раз. И мне нужно сделать это без использования куки.
Я пытаюсь реализовать логику, аналогичную упомянутой «Зашифрованной лексеме» Вот.
Достаточно ли безопасно следующее или я что-то пропускаю:
// step1.php
$userId = xxx;
$timeStamp = yyy;
$token = encrFunc($userId, $timeStamp); // encrFunc involves key known only to server
/* Generate JS code to call step2.php, posting userId and token */
// step2.php
$userId = $_POST['userId'];
$token = $_POST['token'];
$origUserId = decrFunc($token); // decrFunc involves key known only to server
if ($userId == $origUserId) { /* Continue normally */ }
else { /* I have been attacked! */ }
Похоже, вы извлекаете UserId из тела POST. Ваш основной принцип верен в том, что вы проверяете вошедшего в систему пользователя по заявке UserId в токене, однако отправка зарегистрированного UserId в теле POST необычна. В идеале это должно быть в заголовке HTTP AUTH, хотя это не относится к делу.
Других решений пока нет …