Помощник
|
Как сделать авторизацию на сайте? |
sc2r2bey
|
Сообщение
#1
|
||
|
|
||
|
|||
НЕПЛОХОЙ |
10.8.2009, 20:16;
Ответить: НЕПЛОХОЙ
Сообщение
#2
|
|
я вот по этой статье учился http://habrahabr.ru/blogs/php/13726/
|
|
|
sc2r2bey
|
Сообщение
#3
|
|
ты ее потом переработал?
-------------------- программирую web и для we |
|
|
ZiTosS |
10.8.2009, 20:47;
Ответить: ZiTosS
Сообщение
#4
|
|
sc2r2bey, баян, на форуме уже обсуждалась. Если возникнут проблемы или вопросы, то спрашивай.
|
|
|
sc2r2bey
|
Сообщение
#5
|
|
тогда критикните вот такой код
index.php [php]<?php //включаем сессию session_start(); define( 'NET', 1 ); //подключаем БД include '../include/configuration.php'; $_SESSION['id'] = session_id(); $url=$_SERVER['PHP_SELF']; $filename = basename($url); $_SESSION['link'] = "$filename"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional-dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <link rel="stylesheet" type="text/css" href="../css/css.css" /> <title></title> </head> <body> <div id="panel"> <!--форма авторизации--> <form action="authorization.php" method="post"> <table border="0"> <tr> <td>Имя пользователя(логин): </td> <td><input type="text" name="login" value="<?php if($_SESSION['login'] == 0) echo $_SESSION['login']; ?>" size="25" /></td> </tr> <tr> <td>Пароль: </td> <td><input type="password" name="password" value="" size="25" /></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="войти" name="submit" /></td> </tr> </table> </form> </div> </body> </html>[/php] autorization.php [php]<?php //включаем сессию session_start(); define( 'NET', 1 ); $filename = $_SESSION['link']; //подключаем БД include '../include/configuration.php'; //Проверка переходa со страницы авторизации if(isset($_POST['submit'])) { //Сравниваем переданный идентификатор из формы с текущим идентификатором сессии if($_SESSION['id'] != session_id()) { exit("$error"); } //Авторизация $login = mysql_escape_string($_POST['login']); $email_query = "SELECT password FROM user WHERE login='".$login."' AND id_user=1"; $name = mysql_query($email_query); if(!$name) { echo mysql_error(); echo "Ошибка выполнения запроса!<br />"; echo "<meta http-equiv='refresh' content='1; url=".$filename."'>"; echo "<a href='".$filename."'>Попробуйте еще!</a>"; exit(); } if(mysql_num_rows($name) > 0) { $password = mysql_result($name, 0); if (md5(md5(mysql_escape_string($_POST['password']))) == $password) { if(session_start()) { $_SESSION['ok'] = 1; $filename = $_SESSION['url']; echo "<meta http-equiv='refresh' content='0; url=login.php'>"; echo "<a href='".$filename."'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>"; } } else { echo "Неправильный пароль!<br />"; echo "<meta http-equiv='refresh' content='1; url=".$filename."'>"; echo "<a href='".$filename."'>Попробуйте еще!</a>"; exit(); } } else { echo "Такой пользователь не зарегистрирован!<br />"; echo "<meta http-equiv='refresh' content='1; url=".$filename."'>"; echo "<a href='".$filename."'>Попробуйте еще!</a>"; exit(); } } else { exit ("$error"); } ?>[/php] -------------------- программирую web и для we |
|
|
НЕПЛОХОЙ |
10.8.2009, 21:08;
Ответить: НЕПЛОХОЙ
Сообщение
#6
|
|
ты ее потом переработал? она рабочая прям в том виде как там написано =) ток я совсем чуть чуть доработал код и вставил дополнительную защиту от брутфорса тогда критикните вот такой код ща критикну 1. А если пользователь закроет браузер ему снова придется вводить логин и пароль!? 2. [php]md5(md5(mysql_escape_string($_POST['password'])[/php] 2.1 не обязательно для шифрованного пароля делать mysql_escape_string 2.2 говорят что md5(md5(pass)) сломать так же легко как md(pass). Лучше использовать что то вроде md5(pass).sha1(pass).sha1(salt) (ну или любой другой код, можно md5(sha1(pass).md5(salt)) и пр.) salt - это любой набор символов, чем сложней тем лучше, для того чтоб обезопасить пользователей у которых простой пароль. |
|
|
ZiTosS |
10.8.2009, 21:34;
Ответить: ZiTosS
Сообщение
#7
|
|
sc2r2bey,
[php]define( 'NET', 1 );[/php] Вообще ни о чём. Хотя возможно проверка в конфигурационном файле идёт. Защита от просмотра. Не вижу кода, сказать не могу... [php]$url=$_SERVER['PHP_SELF'];[/php] Нигде не используется в файле index.php [php] //Сравниваем переданный идентификатор из формы с текущим идентификатором сессии if($_SESSION['id'] != session_id()) { exit("$error"); }[/php] Бесполезная защита. ID сессии хранится в куках или GET строке. Оттуда и происходит восстановление соединения при каждом переходе меж страниц. Если кто-то заберёт id из кук, то подобная проверка бесполезна. [php] //Авторизация $login = mysql_escape_string($_POST['login']); $email_query = "SELECT password FROM user WHERE login='".$login."' AND id_user=1"; $name = mysql_query($email_query); if(!$name) { echo mysql_error(); echo "Ошибка выполнения запроса!<br />"; echo "<meta http-equiv='refresh' content='1; url=".$filename."'>"; echo "<a href='".$filename."'>Попробуйте еще!</a>"; exit(); } if(mysql_num_rows($name) > 0) { $password = mysql_result($name, 0); if (md5(md5(mysql_escape_string($_POST['password']))) == $password) { if(session_start()) { $_SESSION['ok'] = 1; $filename = $_SESSION['url']; echo "<meta http-equiv='refresh' content='0; url=login.php'>"; echo "<a href='".$filename."'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>"; } } else { echo "Неправильный пароль!<br />"; echo "<meta http-equiv='refresh' content='1; url=".$filename."'>"; echo "<a href='".$filename."'>Попробуйте еще!</a>"; exit(); } } else { echo "Такой пользователь не зарегистрирован!<br />"; echo "<meta http-equiv='refresh' content='1; url=".$filename."'>"; echo "<a href='".$filename."'>Попробуйте еще!</a>"; exit(); }[/php] Этот кусок кода можно было сократить в пару раз так: [php] //Авторизация $login = mysql_escape_string($_POST['login']); $pass = md5(md5($_POST['password'])); $query = "SELECT login, password FROM user WHERE login='{$login}' AND password='{$pass}' AND id_user=1"; $res = mysql_query($query); if(!$res) { echo mysql_error(); echo "Ошибка выполнения запроса!<br />"; echo "<meta http-equiv='refresh' content='1; url={$filename}'>"; echo "<a href='{$filename}'>Попробуйте еще!</a>"; exit(); } if(mysql_num_rows($res) == 1) { $array = mysql_fetch_array($res); $_SESSION['ok'] = 1; unset($_SESSION['link']); $filename = $_SESSION['url']; echo "<meta http-equiv='refresh' content='0; url=login.php'>"; echo "<a href='{$filename}'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>"; } else { echo "Такой пользователь не зарегистрирован!<br />"; echo "<meta http-equiv='refresh' content='1; url=".$filename."'>"; echo "<a href='".$filename."'>Попробуйте еще!</a>"; exit(); }[/php] |
|
|
sc2r2bey
|
Сообщение
#8
|
|
ценные замечание попробую доработать!
-------------------- программирую web и для we |
|
|
sc2r2bey
|
Сообщение
#9
|
|
Сообщения не содержащие смысловой нагрузки по данному вопросы, перенесены в отдельную тему [Как лучше шифровать пароли?]
-------------------- программирую web и для we |
|
|
sc2r2bey
|
Сообщение
#10
|
|
ZiTosS, а насколько сей код безопасен
и что еще можно сюда добавить? -------------------- программирую web и для we |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Быстрый и качественный обмен на сайте Baksman.org Обмен Bitcoin, BTC-e, PM, Qiwi, Yandex money, Карты банк |
52 | Baksman | 33577 | Вчера, 5:02 автор: Baksman |
|
Арбитражники, как ведете учет расходов и доходов? | 11 | Boymaster | 1796 | 17.4.2024, 23:35 автор: Boymaster |
|
Боты могут делать пушподписки на моём сайте? | 0 | Megaspryt | 417 | 17.4.2024, 23:29 автор: Megaspryt |
|
Как вывести деньги в Украине с заблокированного Юмани ? | 29 | freeax | 4806 | 17.4.2024, 1:19 автор: sergio11 |
|
CryptoCloud — прием USDT, BTC, ETH, LTC на любом сайте | 36 | CryptoCLoud | 10638 | 16.4.2024, 16:02 автор: CryptoCLoud |
Текстовая версия | Сейчас: 19.4.2024, 5:57 |