Как хешировать поле пароля

купил программное обеспечение php, которое позволяет пользователям создавать веб-сайты. Но парень, которому я заплатил, не создал регистрационную форму. Я достаточно опасен, чтобы заниматься простым кодированием. Но я чувствую, что это выше моего уровня мастерства. Форма, которую я создал, отлично вставляется в базу данных mysql, но она позволяет новым пользователям, которые используют эту форму, входить в систему, потому что поле пароля не хешируется.

Форма регистрации HMTL:

<form action="input.php" method="post" class="pcss3f pcss3f-type-hor">
            <header>Fillout the below to join.</header>

            <section class="state-normal">
                <label for="">First Name</label>
                <input type="text" name="first_name"/>
                <i class="icon-user"></i>
            </section>

            <section class="state-normal">
                <label for="">Last Name</label>
                <input type="text" name="last_name"/>
                <i class="icon-user"></i>
            </section>

            <section class="state-normal">
                <label for="">Email</label>
                <input type="email" name="email"/>
                <i class="icon-envelope"></i>
            </section>

            <section class="state-normal">
                <label for="">Password</label>
                <input type="password" name="password"/>
                <i class="icon-key"></i>
            </section>

            <footer>
                <button type="button" onclick="window.location = 'index.html'">Back</button>
                <button type="submit" class="color-blue">Submit</button>
            </footer>
        </form>

и скрипт php:

<?php
$con = mysql_connect("localhost","name","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("instantw_builder", $con);


$sql="INSERT INTO users (first_name, last_name, username, email, password)
VALUES
('$_POST[first_name]','$_POST[last_name]','$_POST[email]','$_POST[email]','$_POST[password]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con)
?>

Что мне нужно сделать, чтобы хешировать поле пароля?


person urdave    schedule 21.11.2014    source источник
comment
Опасность: вы используете устаревший API базы данных и должны использовать современная замена. Вы также уязвимы для атак с использованием SQL-инъекций, которые упростил бы современный API. чтобы защитить себя.   -  person Quentin    schedule 21.11.2014
comment
В руководстве по PHP есть FAQ по этой теме, а также примеры.   -  person Quentin    schedule 21.11.2014
comment
Этот daveismyname.com/login-and-registration-system-with-php -bp есть все необходимое. Кроме того, он использует PDO с подготовленными операторами и password_hash().   -  person Funk Forty Niner    schedule 21.11.2014
comment
Обратите внимание на функцию password_hash ().   -  person martinstoeckli    schedule 21.11.2014


Ответы (1)


Есть много разных способов хеширования пароля, одни лучше, другие лучше. Я бы рекомендовал использовать хэш-функцию SHA1, встроенную в PHP.

$hash_password = sha1($_POST[password]);

Затем вы хотите сохранить этот пароль в базе данных.

Когда пользователь входит в систему, вы хотите хешировать пароль, который он вводит, и проверять совпадение этих двух хешей.

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

У вас также есть другие проблемы с этой формой, связанные с эксплойтами базы данных, известными как SQL-инъекции. Прочтите о них здесь: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

person Adam Collins    schedule 21.11.2014
comment
Всегда используйте password_hash() - person xXAlphaManXx; 09.05.2017