[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Посмотрите скрипт авторизации.
userguest
Здравствуйте:

Вот скрипт:


<?php
include ("blocks/connect_bd.php");
if (!isset($_SERVER['PHP_AUTH_USER']))

{
Header ("WWW-Authenticate: Basic realm=\"Page\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}

else {
if (!get_magic_quotes_gpc()) {
$_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
}

$query = "SELECT password FROM passwords WHERE user='".$_SERVER['PHP_AUTH_USER']."'";
$lst = @mysql_query($query);

if (!$lst)
{
Header ("WWW-Authenticate: Basic realm=\"Page\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}

if (mysql_num_rows($lst) == 0)
{
Header ("WWW-Authenticate: Basic realm=\"Page\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}

$pass = @mysql_fetch_array($lst);
if ($_SERVER['PHP_AUTH_PW']!= $pass['pass'])
{
Header ("WWW-Authenticate: Basic realm=\"Page\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}


}





?>


На данный момент он сравнивает введенный пароль с записью в базе.
Как сделать, чтобы он сравнивал md5(введенный пароль) с тем, что в базе?




Спустя 3 минуты, 48 секунд (21.04.2010 - 14:17) DedMorozzz написал(а):
Ну например так:
"SELECT `user_name` FROM `table` WHERE `login`='$login' AND `pass`='".md5($pass)."'

И естесно в базу открытый пароль не должен храниться.

Спустя 33 минуты, 52 секунды (21.04.2010 - 14:51) twin написал(а):
Опять женя со своим дырявым скриптом. mad.gif
Вот тут посмотри, там объяснения дырки и вариант с md5()

Спустя 2 часа, 3 секунды (21.04.2010 - 16:51) userguest написал(а):
Спасибо за терпение к глупым вопросам.
Спасибо за ссылки.
twin, посмотрел Ваш короткий вариант авторизации и буду использовать.
Но возник еще один вопрос.
Можно ли противопоставить по надежности "хэширование" пароля и Вашу авторизацию. Т.е. пароль защищает, к примеру, администраторскую зону сайта, а между этой зоной и паролем есть скрипт авторизации. Пароль по хэшу восстановить сложно, а сложно ли "обойти" скрипт авторизации? Иначе говоря, среднестатистический программист, которому нечего делать, но которому не сильно нужно, сможет без труда обойти защиту?

Спустя 2 минуты, 26 секунд (21.04.2010 - 16:53) userguest написал(а):
Еще перефразирую. Равны ли хоть чуть-чуть действия по подбору пароля действиям, которые нужно предпринять, чтобы "обойти" скрипт авторизации? Критерий: время.

Спустя 1 минута, 54 секунды (21.04.2010 - 16:55) DedMorozzz написал(а):
userguest
ещё раз: пароль НИКОГДА в открытом виде не храни. И по хешу невозможно востановить пароль, функция не обратима. А обычный мд5 "ломаеться" уже легко. Для этого почитай что такое соль. И в БД храни пароли в поле формата "Tiny blob". И таковая защита будет, что узник замка Уф обзавидуеться

Спустя 1 час, 32 минуты, 24 секунды (21.04.2010 - 18:28) twin написал(а):
Цитата
Еще перефразирую. Равны ли хоть чуть-чуть действия по подбору пароля действиям, которые нужно предпринять, чтобы "обойти" скрипт авторизации? Критерий: время.

Любой замок - устройство, которое в первую очередь должно открываться, а не запирать. Потому что можно и кирпичами золожить. Так вот как и чем он открывается - говорит о его надежности. Если можно открыть шилом, как Поповский скрипт - все плохо. Если для взлома потребуется лазерная пушка, алмазные сверла и так далее - вопрос другой.
Теоретически открыть можно любую защиту, на то это и замок.
Дело тут в рентабельности. И коль скоро эта аутентификация называется "базовой", используется на огромном количестве серьёзных ресурсов, то значит ломать её не так уж и дешево.

Или там у тебя на сайте брилианты зарыты? smile.gif

Спустя 7 дней, 22 часа, 10 минут, 46 секунд (29.04.2010 - 16:39) userguest написал(а):
Twin, использовал ваш скрипт авторизации.
Можно ли осуществить "выход" при его использовании, т.е. чтобы после нажатия кнопки "выход" снова запрашивался логин и пароль?

Спустя 2 часа, 19 минут, 8 секунд (29.04.2010 - 18:58) twin написал(а):
Напрямую нет. Это один из недостатков базовой аутентификации. Вход будет открыт, пока открыт браузер.
Можно помудрить с сессиями, но если нужна кнопка "выход", то лучше не сделать свою систему.

Спустя 16 минут, 14 секунд (29.04.2010 - 19:14) userguest написал(а):
В своей системе аутентификации я пока вижу только два плюса, которые более или менее оправдывают ее создание:
1) можно красиво оформить, в т.ч. и с помощью jquery, окно для ввода пароля и логина.
2) от вас узнал - что самописная система аутентификации позволит осуществить функцию выхода с защищенной паролем страницы сайта.

Есть еще какие-нибудь интересные особенности?

Спустя 45 минут, 18 секунд (29.04.2010 - 19:59) twin написал(а):
Базовая аутентификация, это очень простая и достаточно надежная вещь. Но при этом имеет кучу неудобств. Обчычно применяется для защиты одного - нескольких файлов и исключительно для служебного пользования.
Для клиентской стороны конечно не стоит её применять. Это к вопросу о красоте окон.

Спустя 12 часов, 50 минут, 22 секунды (30.04.2010 - 08:50) Guest написал(а):
twin

Посмотрите я нашел в мануале выход через сессию. Скажите пожалуйста, код нормально защ?

session_start();


if (isset($_GET['mod']) AND $_GET['mod'] == "logout")
{
unset($_SESSION["login"]);
Header ("WWW-Authenticate: Basic realm=\"Administrative resource\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}


if (empty($_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_PW']) || !isset($_SESSION["login"]))
{
Header("WWW-Authenticate: Basic realm=\"Administrative resource\"");
Header("HTTP/1.0 401 Unauthorised");
$_SESSION["login"] = true;
exit();
}

$result = mysql_query("SELECT COUNT(*) AS `cnt` FROM `users`
WHERE `name` = '"
.mysql_real_escape_string($_SERVER['PHP_AUTH_USER'])."'
AND `pass` = '"
.md5($_SERVER['PHP_AUTH_PW'])."'"
);


if (mysql_result($result, 0) == 0)
{
unset($_SESSION["login"]);
Header ("WWW-Authenticate: Basic realm=\"Administrative resource\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}


Спустя 56 минут, 41 секунда (30.04.2010 - 09:46) twin написал(а):
Вполне разумно.

Спустя 6 месяцев, 5 дней, 4 часа, 53 минуты, 49 секунд (5.11.2010 - 15:40) vexel написал(а):
спасибо всем огромное

Спустя 9 минут, 2 секунды (5.11.2010 - 15:49) DedMorozzz написал(а):
Если существует Гет параметр "мод" и он равен "лагаут", тогда - .....

Спустя 19 минут, 2 секунды (5.11.2010 - 16:08) vexel написал(а):
Подскажите пожалуйста
если заменить

<?php
if (isset($_GET['mod']) AND $_GET['mod'] == "logout")
{
unset($_SESSION["login"]);
Header ("WWW-Authenticate: Basic realm=\"Administrative resource\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}
?>

на

<?php
if (isset($_GET['mod']) AND $_GET['mod'] == "logout")
{
unset($_SESSION["login"]);
Header ("location:mysite.com")
exit();
}
?>


не повредит это безопасноти?

Спустя 24 дня, 5 часов, 29 минут, 48 секунд (29.11.2010 - 21:38) Гость_Дмитрий написал(а):
А что может быть если используя Вашу бэйсик аутентификацию на локальном сервере работает..на одном хостиге работает..А на другом хостинге при вводе пары логин/пароль заново просит ввести данные..И заходить не заходит((Может от типа серверов..Линукс или Виндоус
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.