2015-03-14 2 views
1

Я хотел бы задать вопрос о мудрости наличия двух куки. В одном из 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'"); 
+0

Владимир, спасибо за ссылку. Ссылка действительно содержит очень полезный ответ пользователя под названием «Приблизительно линейный». –

+0

Я не уверен, что это повторяющиеся вопросы. Для меня это похоже на случай неправильного именования переменных. $ cookiysalty может не содержать СОЛЬ, а соленый пароль. Ofc это трудно сказать, не читая больше кода. Код также заставляет cookie ошибочным и использует «mem», где он должен использовать элемент, чтобы люди не могли угадать, что находится внутри переменной. –

+0

Согласен, это не дубликат. Если отсутствует код, используется переменная, называемая солью, но реализация соли вообще отсутствует. –

ответ

1

Существуют большие базы данных, содержащие список закодированных слов. Например, this site. СОЛЬ предназначены для того, чтобы сделать невозможным просто ввести HASH в текстовое поле и надеяться, что его декодируется. Конечно, есть обходные пути, но СОЛЬТЫ делают работу атакующего намного сложнее, возможно, вынуждая его не использовать его. Как указано в комментариях Владимира, пожалуйста, прочитайте this, чтобы вы поняли, что такое СОЛЬ.

+0

Спасибо за ссылку на веб-страницу Sha2 decrypter. Возможно, было бы полезно поиграть и посмотреть, действительно ли оно отменяет зашифрованный ввод. –

+0

Я попробовал его с MD 5, и он нашел НАСТОЛЬКО паролей на самом деле. Я использовал разные сайты. – Eda190

+0

Просто обновите сайт, на который вы предоставили ссылку на ссылку: sha512.blogspot.cz. Когда вы шифруете ввод и получаете результат, а затем сразу же помещаете этот вывод в decrypter, вы возвращаете исходный вход. Однако, если вы использовали ЛЮБОЙ ДРУГОЙ онлайн-SHA512, чтобы ENCRYPT ваш вход, а затем скопируйте зашифрованную строку в decrypter sha512.blogspot.cz, вы увидите пробел. Другими словами, я считаю, что этот сайт фиктивный и может только расшифровать текст, который был зашифрован на встроенном им сокрытии, путем «запоминания» текста, который был введен в encrypter. Это жульничество. –

Смежные вопросы