Я хотел бы задать вопрос о мудрости наличия двух куки. В одном из PHP файла, следующие коды можно найти:В чем же цель второго куки-файла?
//dbconn establishes connection to database and is not shown here
$salt = hash("sha512", rand().rand().rand());
mysqli_query($dbconn, "INSERT into `members` (`membername`, `password`,
`salt`) VALUES ('$membername', '$password', '$salt')");
setcookie("cookiemember", hash("sha512", $membername,
time() + 24*60*60, "/");
setcookie("cookiesalt", $salt, time() + 24*60*60, "/");
mysqli_close($dbconn)
Во втором PHP файла, следующие строки кода найдено:
if (isset($_COOKIE['cookiemember']) &&
isset($_COOKIE['cookiesalt'])) {
$cookymem = mysqli_real_escape_string($dbconn,
$_COOKIE['cookiemember']);
$cookysalty = mysqli_real_escape_string($dbconn,
$_COOKIE['cookiesalt']);
$result = mysqli_query($dbconn, "SELECT * FROM `members`
where `salt` = '$cookysalty'");
То, что я не понимаю, цель переменной $ salt. Вы берете три случайно сгенерированных числа, объединяете их, применяете алгоритм безопасного хэша к этому конкатенированному числу, а затем помещаете вывод в таблицу с именем members
. Затем вы используете эту переменную $ salt в качестве значения cookie, но не до того, как вы сбегаете от нее специальные символы. Зачем проходить через все эти проблемы, когда вы уже шифруете имя поля membername
, хэшируя его? Почему не может быть прочитана последняя строка кода:
$result = mysqli_query($dbconn, "SELECT * FROM `members`
where `membername` = '$cookymem'");
Владимир, спасибо за ссылку. Ссылка действительно содержит очень полезный ответ пользователя под названием «Приблизительно линейный». –
Я не уверен, что это повторяющиеся вопросы. Для меня это похоже на случай неправильного именования переменных. $ cookiysalty может не содержать СОЛЬ, а соленый пароль. Ofc это трудно сказать, не читая больше кода. Код также заставляет cookie ошибочным и использует «mem», где он должен использовать элемент, чтобы люди не могли угадать, что находится внутри переменной. –
Согласен, это не дубликат. Если отсутствует код, используется переменная, называемая солью, но реализация соли вообще отсутствует. –