|
|
|
| Всю жизнь пользовался этим способом аутентификации для админской части, но в последний раз заказчик заявил, что такой способ входа на админскую часть самый ненадежный(я его считаю гораздо надежней чем куки и ссесии). НИже строки которые включаються в начало каждой страницы.
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что-то там(все время забываю), хотя по сути разницы большой нет но все же. | |
|
|
|
|
|
|
|
для: tvv123456
(13.09.2009 в 23:15)
| | слабые стороны http / Basic authentication :
1. пароль передается открытым текстом в каждом заголовке запроса.
2. пока браузер не закрыт (а в некоторых редких случаях и позже) залогиненную сессию не завершить.
3. не получится завершить её и принудительно с серверной стороны. | |
|
|
|
|
|
|
|
для: tvv123456
(13.09.2009 в 23:15)
| | Тут одновременно правы и вы и заказчик. Вы правы в том, что никакой другой способ, без использования SSL не является более защищеным - все можно точно также прослушать. Заказчик прав в том, что это защита от шушеры, более или менее адекватную защиту можно получить только при использовании SSL (т.е. https://). Однако, если будет использоваться SSL - уже по барабану, что вы используете - базовую аутентификацию или сессии - трафик между сервером и клиентом все-равно шифруется. | |
|
|
|
|
|
|
|
для: 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']);
}
|
| |
|
|
|
|
|
|
|
для: Николай2357
(14.09.2009 в 01:44)
| | Почему? | |
|
|
|
|
|
|
|
для: Рома
(14.09.2009 в 02:33)
| | При включенных магических кавычках не будет обработки данных. А так как magic_quotes не обрабатывает массив $_SERVER, соответственно - дырка. | |
|
|
|
|
|
|
|
для: Николай2357
(14.09.2009 в 08:33)
| | Ну помоему на страницу все-равно не попасть или? На сколько я понял эта строка нужна лишь для подготовки переменных к запросу в базу именно если включены магические кавычки, если же они не включены то и обработки соответственно не ведеться, короче я не назвал бы это дырой? | |
|
|
|
|
|
|
|
для: 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);
} | |
|
|
|
|
|
|
|
для: Рома
(14.09.2009 в 12:27)
| | То есть следует обработку проводить без всякого условия, всегда? | |
|
|
|
|
|
|
|
для: tvv123456
(14.09.2009 в 12:29)
| | Просто обрабатывать переменную, а не суперглобальный массив | |
|
|
|
|
|
|
|
для: Рома
(14.09.2009 в 12:32)
| | Извиняюсь но не вижу разницы, если присваиваю переменой значение суперглоб. массива то в итоге ничего не выигрываю. Или я ошибаюсь? | |
|
|
|
|
|
|
|
для: 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!
Хотя возьмите, да и проверьте. | |
|
|
|
|
|
|
|
для: tvv123456
(14.09.2009 в 23:08)
| | и что, что суперглоб.массив?
Это не такая же переменная, как и остальные? | |
|
|
|
|
|
|
|
для: Trianon
(15.09.2009 в 10:50)
| | дак и я о том же | |
|
|
|
|
|
|
|
для: tvv123456
(14.09.2009 в 12:29)
| | >То есть следует обработку проводить без всякого условия, всегда?
Да. | |
|
|
|