2014-03-03 2 views
0

Я недавно начал изучать PHP и пытался создать безопасный вход в систему после этого руководства http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL.Не могу войти в мой безопасный сценарий входа в систему PHP и MySQL

Все, кажется, работает отлично для меня, кроме входа(). Который я немного подправил. я поставил некоторое эхо, чтобы попытаться придавить указать ошибку, она возвращает ошибку на пароле сравнение IF:

Функции возвращает: Войти ошибку функции 1

Функции Войти находится в включает/функцию. php:

$password = hash('sha512', $password . $salt); 

    if ($db_password == $password) { 
       echo "Password is correct!"; 

sha512.js находится здесь pajhome.org. uk/crypt/md5/sha512 .html, и форму из вышеупомянутого WikiHow.

Соединение не является проблемой, я использую одно и то же соединение для вставки в MySQL, и он работает.

Спасибо за внимание, оказанное моей проблеме, и если я не разглашаю достаточную информацию, пожалуйста, совет.

EDIT: удалено много кода, так как @SeanWM прокомментировал, я не должен ожидать, что никто не сможет пройти через весь код.

@Robert Rozas Благодарим за помощь. пароли действительно несовместимы. Выход:

Войти ошибка Функция 1 c2d872cb4c6a1b3c22ce35fb9dc0dfca14aa6d48 против c2d872cb4c6a1b3c22ce35fb9dc0dfca14aa6d48cc2e8c3dcf02c87a3dfb7e3fec2a098b932c11655960e43bb89af058220ff8d75c666fe57ef7206b74d5f9af

Пожалуйста, посмотрите на то, как строится пароль:

Это идет от формы регистра в .js:

// Add the new element to our form. 
    form.appendChild(p); 
    p.name = "p"; 
    p.type = "hidden"; 
    p.value = hex_sha512(password.value); 

, а затем через php:

$password = filter_input(INPUT_POST, 'p', FILTER_SANITIZE_STRING); 

    // Create a random salt 
    $random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE)); 

    // Create salted password 
    $password = hash('sha512', $password . $random_salt); 

, а затем вставлен в MySQL. Если бы вы могли, пожалуйста, указать мне еще раз в правильном направлении, я был бы признателен.

EDIT 2: Благодаря входу от @Second Rikudo он работал после удаления двойного хэширования

Но в свете замечаний, полученных от второго Rikudo «sha512 не является безопасным» и @tadman «Это учебник беспокойно неполный и использует опасно вредные методы » Я решил пересмотреть код, используя https://github.com/ircmaxell/password_compat , как советовал Второй Рикудо.

+3

Чтобы сообщить об этом, я даже не стал читать это. Пожалуйста, не публикуйте весь свой код и попросите его исправить его. Попытайтесь сузить вопрос, чтобы он был немного более конкретным. Вы должны прочитать это [это] (http://stackoverflow.com/help/how-to-ask). – SeanWM

+0

@SeanWM вы и 18 других зрителей во время этого комментария =) – MonkeyZeus

+4

Если вы не можете войти в систему, то я думаю, что это действительно безопасно. –

ответ

1

Пожалуйста, исправьте меня, если я ошибаюсь, но вы дважды вводите пароль при регистрации (один раз с JavaScript и один раз с PHP), но когда вы входите в систему, вы только хэш один раз (с PHP).

Как Замечание, sha512 является не безопасный. Обновите себя до PHP5.5, чтобы использовать password_hash() и другие функции пароля.

Если вы не можете обновить, см ircmaxell's library for forward compatibility with those functions (он практически один, который добавил password_*() в PHP, так что его библиотека хорошо).

+0

Спасибо за ваш вклад Rikudo Sennin ^^. Он работал в конце после того, как я снял двойной хешинг. Но я буду следовать вашему совету и пересмотреть свой код, используя библиотеку ircmaxell. –

+0

@Miguel_Ryu: Замечательно! Если вы ответите, решите свою проблему, подумайте о том, чтобы принять ее, нажав на большую зеленую отметку под вопросом. Это поставит вопрос как полный. –

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