Как я могу сделать эту систему входа более безопасной - PullRequest
2 голосов
/ 14 февраля 2012

Я создал этот скрипт входа в php. Мне было интересно, была ли она в безопасности, и если нет, то как я мог бы ее улучшить.

PHP Script

<?php
include_once ("ConnectToMySql.php");

session_start();

$username = $_POST['username'];
$username = mysql_real_escape_string($username);
$password = $_POST['password'];
$password = sha1($password);

$query = "SELECT password FROM users WHERE username = '$username';";
$result = mysql_query($query);

if(mysql_num_rows($result) < 1)
{
    echo "This Username Is Not Registered!";
exit;
}
if(mysql_num_rows($result) == 1)
{
if ($password == $result)
{
    echo "Logged In!";
}

else echo "Wrong Password!";
}
?>

Спасибо

Ответы [ 2 ]

4 голосов
/ 14 февраля 2012

Первый совет - показать общую ошибку для обоих случаев неправильного входа: invalid username or password.Таким образом, потенциальный злоумышленник не узнает, является ли имя пользователя действительным или нет.

Вы также можете сделать один запрос, соответствующий как имени пользователя, так и паролю.Возможно, вам потребуется больше информации о пользователе (для хранения в сеансе?), Поэтому было бы неплохо выбрать эти поля вместо пароля (например, id, name).

Относительно хешированияПароль хранится в базе данных, вы можете добавить SALT для повышения безопасности.http://en.wikipedia.org/wiki/Salt_%28cryptography%29

1 голос
/ 14 февраля 2012

Я бы изменил запрос следующим образом:

"SELECT COUNT(*) FROM users WHERE username = '$username' AND password='$password';"

Таким образом, вам не нужно проверять правильность пароля впоследствии (и вам не нужно передаватьконфиденциальные данные), вам нужно только проверить, равно ли число возвращенных строк 1, и вы можете создать одно сообщение об ошибке для имени пользователя / пароля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...