2014-11-21 4 views
0

купило программное обеспечение 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) 
?> 

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

+0

** Danger **: Вы используете [** устаревший ** API баз данных] (http://stackoverflow.com/q/12859942/19068) и должны использовать [современные замена] (http://php.net/manual/en/mysqlinfo.api.choosing.php). Вы также уязвимы для [SQL-инъекций] (http://bobby-tables.com/) **, что современный API упростит [защиту] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php). – Quentin

+0

Руководство по PHP содержит [FAQ] (http://php.net/manual/en/faq.passwords.php) по этому вопросу, а также [примеры] (http://php.net/manual/en/ function.password-hash.php). – Quentin

+0

У этого http://daveismyname.com/login-and-registration-system-with-php-bp есть все, что вам нужно. * Плюс, * он использует PDO с подготовленными операторами и 'password_hash()'. –

ответ

-1

Вы должны использовать функцию sha1 хэш пароля в запросе MySQL:

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

Нет, не стоит. SHA1 лучше, чем MD5, но недостаточно для паролей. Вы также не включаете соль. Это описано в [FAQ PHP] (http://php.net/manual/en/faq.passwords.php#faq.passwords.fasthash). – Quentin

+0

ОК, я узнал, что это было построено с помощью ion_auth и его bcrypt. – urdave

+0

Вы должны использовать 'password_hash()' @Jerodev – xXAlphaManXx

-1

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

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

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

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

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

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

+1

[Руководство по PHP рекомендует ** против ** с использованием SHA1] (http://php.net/manual/en/faq.passwords.php#faq.passwords.fasthash). – Quentin

+0

*** Всегда используйте 'password_hash()' *** – xXAlphaManXx

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