PHP Secure Login - шифрование пароля - PullRequest
8 голосов
/ 28 августа 2010

Вот система входа в систему, в которой будет осуществляться безопасный вход в систему /

main_login.php

    <form name="form1" method="post" action="checklogin.php">
    Username:<input name="myusername" type="text" id="myusername" /> <br />
    Password:<input name="mypassword" type="password" id="mypassword" />
    <input type="submit" name="Submit" value="Login" />
    </form>

Checklogin.php

<?php
ob_start();
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="cosmos"; // Database name 
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

ob_end_flush();
?>

login_success.php

<?php
session_start();

if(isset($_SESSION['username']) && ($_SESSION['username'] == $myusername)){
header("location:main_login.php");
}
?>

<html>
<body>
Login Successful. <a href="logout.php">Logout</a>
</body>
</html>

logout.php

<?php
session_destroy();

header("location:main_login.php");
?>

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

Ответы [ 7 ]

6 голосов
/ 28 августа 2010

Вы можете зашифровать пароль до определенной степени с помощью md5.Вам потребуется md5 пароль от того момента, когда пользователь регистрируется, и до входа в систему md5 ....

Пример: // Define $myusername and $mypassword $myusername=$_POST['myusername']; $mypassword=$_POST['mypassword']; $mypassword = md5($mypassword);

Вам также необходимо использовать его, когда у вас естьрегистрация пользователя.

4 голосов
/ 28 августа 2010

Как новичок, скорее всего вам не нужно никакого шифрования. Тем более, что это будет Javascript, а не PHP.
Хотя это можно сделать.
Вы можете использовать хешированный вызов, реализующий схему аутентификации Digest

  • сервер отправляет вызов - случайный стримг
  • клиент делает хэш этого вызова и пароль
  • этот хеш отправляется на сервер
  • сервер делает хеш одинаково и сравнивает оба

Существует множество реализаций алгоритма хеширования Javascript MD5 через Интернет.

Конечно, SSL-сертификат предпочтительнее этой домашней реализации.

Но чтобы получить правильный ответ, вам все равно нужно уточнить, что именно вы хотите зашифровать и почему. И почему вы не беспокоитесь о том, чтобы обеспечить что-то еще? Например, вся ваша база данных.

Несколько заметок на некоторое время.
Ваш код входа в систему не будет работать и ничего не защитит.
Это должно быть просто

if(isset($_SESSION['username'])){

потому что нет переменной $ myusername для сравнения.
И должно быть exit; сразу после header("location:...
Или клиент получит защищенное содержимое в любом случае

2 голосов
/ 22 марта 2014

Вы должны использовать

$static_salt='asdfasdfqwertyuiop123ABC_some_static_salt_string';
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword'];
$mypassword=hash('sha512', $mypassword . $static_salt . $myusername);

Вы должны сохранить хешированный пароль и хэшировать любые пароли, прежде чем сравнивать их с сохраненным.md5 не подходит для хеширования паролей, см .: http://uk1.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash Вы также должны рассмотреть возможность использования солей

2 голосов
/ 28 августа 2010

Вы можете использовать md5 ($ password) или sha1 ($ password) при вставке данных регистрации в таблицу.

для повторного сопоставления для входа в систему

$ sql = "SELECT * FROM$ tbl_name WHERE username = '$ myusername' и password = '". md5 ($ mypassword)."' ";$ result = mysql_query ($ sql);

Есть и другой способ защиты.Использование комбинации sha1 и salt.

Кстати, почему бы вам не использовать какой-нибудь быстрый php-фреймворк, ведь эти мелочи уже созданы с ними.

Спасибо

2 голосов
/ 28 августа 2010

Чтобы сделать это немного более безопасным, вы должны сохранить зашифрованные пароли в своей базе данных, а затем сравнить зашифрованный введенный пароль с сохраненным хешем. Таким образом, если кто-то каким-то образом получит доступ к таблице участников, он не сможет увидеть действительные пароли.

Предположим, что пароль - myPassword, затем не просто сохраняйте его, сначала хешируйте его, используя алгоритм, подобный md5, а затем сохраняйте хеш-код deb1536f480475f7d593219aa1afd74c в вашей базе данных. Затем, когда пользователь вводит пароль, хэшируйте его и сравнивайте два хэша.

Для более безопасного подхода используйте SSL .

1 голос
/ 28 августа 2010

Обычно вы сохраняете хеш паролей в базе данных, см. md5 , однако это не делает его безопасным между веб-страницей и сервером - для этого вам нужно использовать https.

Здесь есть две вещи.

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

2.Под http пароль будет отправлен из браузера на сервер в виде простого текста.Если это происходит через Интернет, и злоумышленник имеет доступ к любым сетям между браузером и клиентом, он может увидеть пароль - если вы хэшируете его в браузере с помощью javascript, злоумышленник может получить хеш и, возможно, использовать его для входа в систему.твой сайт.Вот почему у нас есть https.За небольшую стоимость (особенно по сравнению с затратами на разработку) вы можете купить сертификат, который будет защищать соединение.Если вы не хотите этого делать, вы можете самостоятельно подписать сертификат и использовать его.Если ваш хостинг не позволяет использовать сертификат, возможно, можно создать решение для домашнего пивоварения, но гораздо лучше просто найти другой хостинг.

0 голосов
/ 24 сентября 2014

md5 будет лучшим в этом случае. Запустите детали ввода, такие как пароль, через функцию MD5 и вставьте в базу данных.

Это почти необратимо, поэтому единственный способ использовать его - это также использовать MD5 при входе в систему и сравнивать пароль md5 при входе с версией, хранящейся в базе данных.

...