Вот система входа в систему, в которой должен быть реализован безопасный вход в систему /
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
Вы можете зашифровать пароль с помощью md5. Вам нужно будет ввести md5 пароль с момента регистрации пользователя и до входа в систему md5....
Пример:
// Определяем $myusername и $mypassword
$myusername=$_POST['myusername'];
$мойпароль=$_POST['мойпароль'];
$мойпароль = md5($мойпароль);
Вам также нужно будет использовать это всякий раз, когда у вас есть регистрация пользователя.
Как новичок, скорее всего, вам не нужно никакого шифрования. Тем более, что это будет Javascript, а не PHP.
Хотя это можно сделать.
Вы можете использовать хешированную задачу, реализующую схему дайджест-аутентификации
Существует множество реализаций алгоритма хэширования Javascript MD5 в Интернете.
Конечно, SSL-сертификат предпочтительнее этой самодельной реализации.
Но чтобы получить правильный ответ, нужно еще уточнить, что именно вы хотите зашифровать и почему. И почему бы тебе не позаботиться о безопасности чего-то еще. Например, вся ваша база данных.
Несколько заметок на время.
Ваш код login_success либо не будет работать, либо ничего не защитит.
Должно быть просто
if(isset($_SESSION['username'])){
, потому что нет переменной $myusername для сравнения.
И должен быть exit;
сразу после header("location:...
Или клиент все равно получит защищенное содержимое
Вы можете использовать md5($password) или sha1($password) при вставке регистрационных данных в таблицу.
для повторного сопоставления для входа в систему
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='".md5($mypassword)."'"; $result=mysql_query($sql);
Есть и другой способ дополнительной защиты. Использование комбинации sha1 и соли.
Кстати, почему бы вам не использовать какой-нибудь быстрый php-фреймворк, потому что эти мелочи уже созданы с их помощью.
Спасибо
Обычно вы должны хранить хэш паролей в базе данных, см. md5, однако это не делает его безопасным между веб-страницей и сервером - для этого вам нужно использовать https.
Здесь есть две вещи.
1. Если я тупой пользователь и когда я регистрируюсь на вашем сайте, мне нужно указать пароль, я могу дать тот же пароль, который я использовал в другом месте, поэтому ваш сайт действительно должен хранить хэш пароля, а не реальную вещь, поэтому, если они быть взломан, злоумышленники не получат мой пароль, который я использовал везде. Для этого вы сохраняете хеш в своей таблице членов, а в запросе, который проверяет его действительность, вы передаете хэш вместо реального.
2. По http пароль будет отправлен из браузера на сервер в виде обычного текста. Если это происходит через Интернет, и злоумышленник имеет доступ к любым сетям между браузером и клиентом, тогда он может увидеть пароль — если вы хешируете его в браузере с помощью javascript, злоумышленник может подобрать хэш и, возможно, использовать его для входа в систему. твой сайт. Вот почему у нас есть https. За небольшую стоимость (особенно по сравнению с затратами на разработку) можно купить сертификат, который обезопасит соединение. Если вы не хотите этого делать, вы можете самостоятельно подписать сертификат и использовать его. Если ваш хостинг не позволяет вам использовать сертификат, то можно создать домашнее решение, но гораздо лучше просто найти другой хостинг.
Чтобы сделать это немного более безопасным, вы должны хранить зашифрованные пароли в своей базе данных, а затем сравнивать введенный зашифрованный пароль с сохраненным хешем. Таким образом, если кто-то каким-то образом получит доступ к таблице участников, он не сможет увидеть фактические пароли.
Предположим, что пароль myPassword
, тогда не просто сохраняйте его, а сначала хешируйте с помощью алгоритма, подобного md5
, затем сохраните хеш, который будет deb1536f480475f7d593219aa1afd74c
в ваша база данных. Затем, когда пользователь вводит пароль, хэшируйте его и сравнивайте два хэша.
Для более безопасного подхода используйте SSL.