У меня есть базовый сайт, который я использую для тестирования моего метода программирования, и я хочу получить полупринятый безопасный способ ведения регистрации пользователей. Вот код для register.php
.Трехуровневая проверка безопасности; сессия все еще уязвима?
$username = $_POST["username"]; //username stored plaintext
$passhashed = crypt($_POST["password"], $username); //hashed password salted with username
$rnum = rand(1000,9999); //assign random 4-digit number
$authkey = crypt($rnum, $passhashed); //unique authentication key per user, hashed and salted with hashed password
//insert into SQL
При входе в, $username
, $passhashed
и $authkey
хранится в $_SESSION
данных.
В верхней части каждой страницы у меня есть следующий фрагмент кода:
if(isset($_SESSION["username"])
&& isset($_SESSION["password"])
&& isset($_SESSION["authkey"])) {
$verifyuser = $db->prepare("
SELECT *
FROM users
WHERE username = :user
AND password = :password
AND authkey = :authkey
");
$verifyuser->execute(array(
':user' => $_SESSION["username"],
':password' => $_SESSION["password"],
':authkey' => $_SESSION["authkey"]));
if($verifyuser->rowCount() != 1) {
unset($_SESSION["username"]);
unset($_SESSION["password"]);
unset($_SESSION["authkey"]);
}
}
В принципе на любой странице, он выполняет проверку, что каждый кусок магазина в $_SESSION
очищает с SQL, а если нет (если какая-либо из проверок завершится с ошибкой, вы получите rowCount
, а не 1), он прекратит сеанс.
Я буду первым, кто признает, что я не слишком хорошо знаком с современными мерами безопасности, чтобы уклониться от захвата сеанса (на самом деле, у меня есть свободная команда о том, как это делается). Это, как говорится, как это для начинающего программиста? Что я могу сделать, чтобы сделать его более безопасным? Назначьте второй ключ аутентификации при входе в систему, временно сохраните его в SQL и выполните те же проверки (новый ключ для входа)?
если ваш управлением банка, его вероятно, достаточно хорошо –
Я понял, что не стоит упоминать, но данные '$ _SESSION' сохраняются в живых в течение нескольких дней с' ini_set ('session.cooki e_lifetime ', 60 * 60 * 24 * 3); 'и' ini_set (' session.gc_maxlifetime ', 60 * 60 * 24 * 3); '. – gator
Итак, я был прав, что обычно СЕССИЯ не существует. Но это все равно не работает. Когда они вернутся, пользователи получат новый идентификатор сеанса. – djot