PHP Secure Login - шифрование пароля

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

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
задан Suraj 19 July 2017 в 11:47
поделиться

5 ответов

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

Пример: // Определяем $myusername и $mypassword $myusername=$_POST['myusername']; $мойпароль=$_POST['мойпароль']; $мойпароль = md5($мойпароль);

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

5
ответ дан 7 December 2019 в 01:13
поделиться

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

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

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

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

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

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

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

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

3
ответ дан 7 December 2019 в 01:13
поделиться

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

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

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

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

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

Спасибо

1
ответ дан 7 December 2019 в 01:13
поделиться

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

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

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

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

0
ответ дан 7 December 2019 в 01:13
поделиться

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

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

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

2
ответ дан 7 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: