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

Форум PHP

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

 

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

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

тема: В 1001 раз об админкских правах и аутентификации
 
 автор: tvv123456   (13.09.2009 в 23:15)   письмо автору
 
 

Всю жизнь пользовался этим способом аутентификации для админской части, но в последний раз заказчик заявил, что такой способ входа на админскую часть самый ненадежный(я его считаю гораздо надежней чем куки и ссесии). НИже строки которые включаються в начало каждой страницы.
if (!isset($_SERVER['PHP_AUTH_USER']))

{
        Header ("WWW-Authenticate: Basic realm=\"Admin 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 pass FROM admin WHERE user='".$_SERVER['PHP_AUTH_USER']."'";
        $lst = @mysql_query($query);

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

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

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


}

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

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

  Ответить  
 
 автор: Trianon   (13.09.2009 в 23:25)   письмо автору
 
   для: tvv123456   (13.09.2009 в 23:15)
 

слабые стороны http / Basic authentication :

1. пароль передается открытым текстом в каждом заголовке запроса.
2. пока браузер не закрыт (а в некоторых редких случаях и позже) залогиненную сессию не завершить.
3. не получится завершить её и принудительно с серверной стороны.

  Ответить  
 
 автор: cheops   (13.09.2009 в 23:27)   письмо автору
 
   для: tvv123456   (13.09.2009 в 23:15)
 

Тут одновременно правы и вы и заказчик. Вы правы в том, что никакой другой способ, без использования SSL не является более защищеным - все можно точно также прослушать. Заказчик прав в том, что это защита от шушеры, более или менее адекватную защиту можно получить только при использовании SSL (т.е. https://). Однако, если будет использоваться SSL - уже по барабану, что вы используете - базовую аутентификацию или сессии - трафик между сервером и клиентом все-равно шифруется.

  Ответить  
 
 автор: Николай2357   (14.09.2009 в 01:44)   письмо автору
 
   для: tvv123456   (13.09.2009 в 23:15)
 

А вот это дырка:
<?
        
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']); 
        }

  Ответить  
 
 автор: Рома   (14.09.2009 в 02:33)   письмо автору
 
   для: Николай2357   (14.09.2009 в 01:44)
 

Почему?

  Ответить  
 
 автор: Николай2357   (14.09.2009 в 08:33)   письмо автору
 
   для: Рома   (14.09.2009 в 02:33)
 

При включенных магических кавычках не будет обработки данных. А так как magic_quotes не обрабатывает массив $_SERVER, соответственно - дырка.

  Ответить  
 
 автор: tvv123456   (14.09.2009 в 12:18)   письмо автору
 
   для: Николай2357   (14.09.2009 в 08:33)
 

Ну помоему на страницу все-равно не попасть или? На сколько я понял эта строка нужна лишь для подготовки переменных к запросу в базу именно если включены магические кавычки, если же они не включены то и обработки соответственно не ведеться, короче я не назвал бы это дырой?

  Ответить  
 
 автор: Рома   (14.09.2009 в 12:27)   письмо автору
 
   для: tvv123456   (14.09.2009 в 12:18)
 

Он имел в виду, что возможна инъекция.
вот так надо

$php_auth_user=$_SERVER['PHP_AUTH_USER'];

if(!g...c())
{
$php_auth_user=mysql_real_e...($php_auth_user);
}

  Ответить  
 
 автор: tvv123456   (14.09.2009 в 12:29)   письмо автору
 
   для: Рома   (14.09.2009 в 12:27)
 

То есть следует обработку проводить без всякого условия, всегда?

  Ответить  
 
 автор: Рома   (14.09.2009 в 12:32)   письмо автору
 
   для: tvv123456   (14.09.2009 в 12:29)
 

Просто обрабатывать переменную, а не суперглобальный массив

  Ответить  
 
 автор: tvv123456   (14.09.2009 в 23:08)   письмо автору
 
   для: Рома   (14.09.2009 в 12:32)
 

Извиняюсь но не вижу разницы, если присваиваю переменой значение суперглоб. массива то в итоге ничего не выигрываю. Или я ошибаюсь?

  Ответить  
 
 автор: Рома   (15.09.2009 в 00:15)   письмо автору
 
   для: tvv123456   (14.09.2009 в 23:08)
 

https://students.kiv.zcu.cz/doc/php5/manual/cs/security.magicquotes.php.html

Magic_quotes_gpc does NOT effect $_SERVER or $_ENV, I tested this myself on Windows with Apache and PHP 5. Removing slashes from them when there were none added to begin with ruins the variables in them!

Хотя возьмите, да и проверьте.

  Ответить  
 
 автор: Trianon   (15.09.2009 в 10:50)   письмо автору
 
   для: tvv123456   (14.09.2009 в 23:08)
 

и что, что суперглоб.массив?
Это не такая же переменная, как и остальные?

  Ответить  
 
 автор: tvv123456   (19.09.2009 в 13:53)   письмо автору
 
   для: Trianon   (15.09.2009 в 10:50)
 

дак и я о том же

  Ответить  
 
 автор: Николай2357   (14.09.2009 в 16:32)   письмо автору
 
   для: tvv123456   (14.09.2009 в 12:29)
 

>То есть следует обработку проводить без всякого условия, всегда?
Да.

  Ответить  
Rambler's Top100
вверх

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