Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Скрипт авторизации
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (3): [1] 2 3 »   

> Описание: Нормальный ли это скрипт?
UFO
Отправлено: 16 Сентября, 2006 - 03:59:47
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




Мне тут понадобился скрипт для авторизации пользователей, т.е. когда пользователь вводит в окшечко свой уникальный пароль/номер, нажимает кнопочку и он оказывается на своей персональной страничке, где указаны какие-либо интресные и нужные только ему данные. Итак, скрипт выглядит так:
CODE:
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
Введите пароль
a = <input type="text" name="a">
<input type="hidden" name="act" value="act">
<input type="submit" name="submit" value="Войти">
<input type="reset" name="reset" value="Очистить">
</form>
<?
Error_Reporting(E_ALL & ~E_NOTICE);
if($a==test) echo "Пароль верный";
if($a<>test) echo "Пароль неверный";
?>

Возникли следущие вопросы:
1) Как вообще выглядит такой скрипт в свете безопасноти? Можно ли как-либо узнать какой пароль забыт в скрипте и соотвественно войти под этим паролем? А если придумать систему кодирования в этом же скрипте, это решит проблему (если она есть)? Скрипт расчитан на максимум 100 пользователей, у которых будут таким образом введены пароли, а при правильном вводе пароля будет отображаться его личная страница с определенной информацией.
2) Если не обращать внимания на первый пункт, то как вместо
CODE:
echo "Пароль верный";

сделать include из какого либо файла?
CODE:
echo "include('file.php')";

не работает в этом случае - выводит программный код (а если добавить <? и ?>, то ничего не выводит, даже если файл include с чем-либо).
3) Как можно заменить более универсально строчку
CODE:
if($a<>test) echo "Пароль неверный";

?
Т.е. чтобы получилось так: если в скрипте нет введенного пароля, то выводилась надпись "Пароль неверный", ведь если другие пароли будут отличаться от "test", то будет противоречие.
Заранее спасибо за ответы Улыбка
 
 Top
Malcolm
Отправлено: 16 Сентября, 2006 - 04:13:01
Post Id



Junior Member


Покинул форум
Сообщений всего: 69
Дата рег-ции: Сент. 2006  
Откуда: Омск, Россия

Карма 0




1) Плохо выглядит. Входящие данные должны фильтроваться

2)
CODE:
if ($a=='test') include('correct.php');

3)
CODE:
if ($a=='test') echo 'OK'; else echo 'BAD';

 
 Top
UFO
Отправлено: 16 Сентября, 2006 - 04:22:14
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




1) Что значит фильтроваться?
2) А вот как оно. Тогда ясно в чем ошибка.
3) Таких паролей будет много, и у каждого должно быть
CODE:
echo 'OK'; else echo 'BAD';
?
Тогда не один работать не будет, т.к. будет
CODE:
else echo 'BAD';
 
 Top
Malcolm
Отправлено: 16 Сентября, 2006 - 04:39:53
Post Id



Junior Member


Покинул форум
Сообщений всего: 69
Дата рег-ции: Сент. 2006  
Откуда: Омск, Россия

Карма 0




1) Подумай, что будет, если я введу вот такой пароль:
CODE:
1=1 OR ''
??
Фильтровать примерно так:
CODE:
$a = $_POST['a'];
$a = preg_replace("/[^a-z]{10}/i","",$a);


3) В данном случае нужно задать массив с паролями и проверять в нем. Если в массиве не нашел, тогда echo "Пароль неверный";
 
 Top
Леголегс Администратор
Отправлено: 16 Сентября, 2006 - 07:13:38
Post Id



JS-маньяк


Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004  
Откуда: Липецк

Карма 17




Malcolm пишет:
Подумай, что будет, если я введу вот такой пароль:
ИМХО, будет "пароль не верный" Улыбка
Malcolm пишет:
Фильтровать примерно так:
Ограничить пароли маленькими буквами латинского алфавита? Очень плохая идея.
Malcolm пишет:
В данном случае нужно задать массив с паролями и проверять в нем. Если в массиве не нашел, тогда echo "Пароль неверный";
С хешами паролей, с хешами.
PHP:
$passwd = Array("vasia" => "a86850deb2742ec3cb41518e26aa2d89",
"petia" => "e7df7cd2ca07f4f1ab415d457a6e1c13");
if (isset($passwd[$login]) && md5($a)==$passwd[$login]) include('correct.php');

У Васи пароль qwerty, у Пети 1234
Это базовый вариант, используются ещё несколько ухищрений, но я их не помню.
 
 Top
Malcolm
Отправлено: 16 Сентября, 2006 - 08:04:20
Post Id



Junior Member


Покинул форум
Сообщений всего: 69
Дата рег-ции: Сент. 2006  
Откуда: Омск, Россия

Карма 0




Хм, ну да, такая строка для взлома не подойдет.

Ограничили не маленькими буквами, а множеством A-Za-z, поиск регистронезависимый. Можно до кучи и цифры подключить, но в принципе и так понятно.

С md5 согласен, объясняй теперь человеку как генерировать хэши и что это такое. В мои планы лекции по криптографии не включались.
 
 Top
UFO
Отправлено: 16 Сентября, 2006 - 09:56:19
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




В случае с
CODE:
1=1 OR ''

действительно будет "Пароль неверный", когда тогда смысл что-то ограничивать, когда пароли буду прописывать только я? А уж пароли будут генерироваться скриптом и выдаваться пользователям. Кроме того, "Пароль неверный" я убрал вообще, т.к. не ясно как это задать.
 
 Top
UFO
Отправлено: 16 Сентября, 2006 - 09:58:30
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




Malcolm пишет:
С md5 согласен, объясняй теперь человеку как генерировать хэши и что это такое. В мои планы лекции по криптографии не включались.


+1 Улыбка
А обязательно шифровать пароль? Если будет так:
CODE:
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
Введите Ваш идентификационный код:
<input type="text" name="a">
<input type="hidden" name="act" value="act">
<input type="submit" name="submit" value="OK">
</form>
<?
Error_Reporting(E_ALL & ~E_NOTICE);
if($a==test) include('users/mangust.php');
if($a==open) include('users/open.php');
?>

Где "test" и "open" - пароли пользователей (и таких будет много).
Это не безопастно?
 
 Top
Malcolm
Отправлено: 16 Сентября, 2006 - 10:40:55
Post Id



Junior Member


Покинул форум
Сообщений всего: 69
Дата рег-ции: Сент. 2006  
Откуда: Омск, Россия

Карма 0




Ну в строке пароля я немного ошибся. Вместо одинарного "=" надо было двойное "==" Если на сервере отключен magic_quotes, то можно сделать с таким запросом все что угодно, вплоть до выполнения на твоем сервере моего собственного скрипта. Кстати, твой код нерабочий. Откуда берется значение $a? добавь
CODE:
$a = $_POST['a'];
 
 Top
UFO
Отправлено: 16 Сентября, 2006 - 11:37:20
Post Id



Full Member


Покинул форум
Сообщений всего: 212
Дата рег-ции: Янв. 2005  

Карма 0




Про запрещенные символы - ясно, будем внедрять и это.
Код работает, так что не знаю к чему здесь
CODE:
$a = $_POST['a'];

но добавлю.
Жду разъяснений по поводу md5 к моему скрипту Улыбка
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0, скрытых: 0)
« PHP/Perl »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0501]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33