Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Авторизация куками
 
 автор: T-Ray   (27.01.2008 в 05:37)   письмо автору
 
 

Сделал авторизацию на куках, вот код:
------------------------------------------------------------

<?php
if(!isset($_COOKIE['password']))
{
echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=login.php'></HEAD></HTML>";
}
require_once(
'../includes/db_control.php');
$connector = new dbControl();
$query $connector->query("select login from table_of_base where password='".$_COOKIE['password']."'");
$usr $connector->fetchArray($query);
if (
"".$usr['login']."" == $_COOKIE['login'])
{
}else{
echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=login.php'></HEAD></HTML>";
}

---------------------------------------------------------------------
Здесь сперва проверяется наличие password в куках, если такой нет, то редирект на форму авторизации, если есть, то дальше идет запрос в базу данных. Вибираем login из таблицы "table_of_base", где password должнен соответствовать password'у в куках. Допустим password'ы совпадают, тогда дольше проверяется логин, который был взят из базы. Если логин из базы соответствует логину из куков, то все в порядке.

Допустим злоумышленник решил поменять в куках login или password (кстати пароль md5), то при обновлении или переходе на другую страницу его просто выкинет на форму авторизации.

скажите, такой метод защиты куков от подделки безопасен и насколько безопасен?

Заранее большое спасибо! Если где-то непонятно объяснил, то буду рад растолковать еще раз и очень подробно.

   
 
 автор: ЯR   (27.01.2008 в 06:11)   письмо автору
 
   для: T-Ray   (27.01.2008 в 05:37)
 

magic_quotes хотябы включены? Если да, то, вроде, нормальная авторизация, только не вижу тут защиты от подделки, да и что тут подделывать-то?

   
 
 автор: T-Ray   (27.01.2008 в 06:26)   письмо автору
 
   для: ЯR   (27.01.2008 в 06:11)
 

magic_quotes включено конечно! Эта функция в require_once.
Подделывать тут можно login и password. Допустим если знать login другого пользователя и подделать его, то можно провести sql инъекцию и узнать пароль. А так как здесь проверяется, различны ли куки или нет, то подделать их соответственно нельзя. Т.е. можно конечно подделать, но при этом должны совпадать и login и password с тем, что есть в базе, а зачем тогда подделывать все, если можно ввести данные в форму авторизации?)))). Но сейчас я постораюсь сделать сессии и тогда эта возможность будет исключена. я надеюсь...

очень хотелось бы увидеть мнение пользователя !!!CHEOPS!!! :)

   
 
 автор: T-Ray   (27.01.2008 в 06:41)   письмо автору
 
   для: ЯR   (27.01.2008 в 06:11)
 

что-то понять не могу... я вставил в код этот фрагмент:

if (!get_magic_quotes_gpc())
{
$_COOKIE['login'] = mysql_escape_string($_COOKIE['login']);
$_COOKIE['password'] = mysql_escape_string($_COOKIE['password']);
}

и теперь, когда удаляешь или правишь куки, то тебя не выкидывает, а появляется ошибка:

Notice: Undefined index: login in file.php on line #

Notice: Undefined index: password in file.php on line #

может лучше не использовать эту функцию (magic_quotes) или если использовать, то подскажите как.

спасибо

   
 
 автор: ЯR   (27.01.2008 в 07:01)   письмо автору
 
   для: T-Ray   (27.01.2008 в 06:41)
 

нет, всё ОК, просто нужно вывод notice отключить (можно, например, ф-ей error_reporting(E_ALL ^ E_NOTICE))

   
 
 автор: T-Ray   (27.01.2008 в 07:33)   письмо автору
 
   для: ЯR   (27.01.2008 в 07:01)
 

спасибо. изменил код:

<?php
error_reporting
(E_ALL E_NOTICE);
if(!isset(
$_COOKIE['password']))
{
echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=login.php'></HEAD></HTML>";
}
if(!isset(
$_COOKIE['login']))
{
echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=login.php'></HEAD></HTML>";
}
if (!
get_magic_quotes_gpc())
{
$_COOKIE['login'] = mysql_escape_string($_COOKIE['login']);
$_COOKIE['password'] = mysql_escape_string($_COOKIE['password']);
}
require_once(
'../includes/db_control.php');
$connector = new dbControl();
$query $connector->query("select login from name_of_table where password='".$_COOKIE['password']."'");
$usr $connector->fetchArray($query);
if (
"".$usr['login']."" == $_COOKIE['login'])
{
}else{
echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=login.php'></HEAD></HTML>";
}
?>


Теперь появился следующий вопрос:

На страницу, посещать которую может, только залогинившийся пользователь (index.php) я ставлю require_once с адресом к коду выше. Когда заходишь на index.php, автоматически перекидывает на login.php, но буквально 1-2 секунды почему-то видно весь контент index.php ))))))) как это исправить? т.е. чтобы пока не авторизуешься не было видно контента ни секунды.

Заранее спасибо.

   
 
 автор: T-Ray   (27.01.2008 в 10:40)   письмо автору
 
   для: T-Ray   (27.01.2008 в 07:33)
 

где же ответ? плиз, нужна помощь!

   
 
 автор: winflip   (27.01.2008 в 11:31)   письмо автору
 
   для: T-Ray   (27.01.2008 в 10:40)
 

Попробуйте мета тэги функцией exit() выводить

   
 
 автор: AVS   (27.01.2008 в 12:53)   письмо автору
 
   для: T-Ray   (27.01.2008 в 10:40)
 

Вот после куска кода, где выполняется переадресация на авторизацию, поставьте exit(). Таким образом, после того, как на страницу будет отрпавлен мета-тег с переадресацией, скрипт завершит свою работу и ничего больше не выведется пользователю в браузер.

   
 
 автор: T-Ray   (28.01.2008 в 03:47)   письмо автору
 
   для: AVS   (27.01.2008 в 12:53)
 

Спасибо за этот совет, теперь все отлично работает!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования