Для защиты админ панели использую данный скрипт который включается в каждую страницу адин панели через функцию include:
include("conect/db.php");
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 userlist 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 ($_SERVER['PHP_AUTH_PW']!= $pass['pass'])
{
Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}
}
На локальном веб-сервере, скрипт работает, а на netangels не полностью, не принимает правильны пароль, запрашивать заново. Подскажите в чем моет быть проблема. Может быть нужно изменить права фалов?
Ваш скрипт написан так, что он работает только с mod_php. У нас php работает в режиме FastCGI, поэтому авторизация в таком виде работать у нас не будет.
Однако, существует решение, которое позволяет использовать такую авторизацию и в случае (Fast)CGI.
Во-первых, Вам нужно создать файл .htaccess и написать в него:
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
Затем в начало Вашего php-скрипта вставить строчку:
соответственно значение переменных $PHP_AUTH_USER и $PHP_AUTH_PW будут получены из переменной $HTTP_AUTHORIZATION, которая будет создана правилом RewriteRule из нашего .htaccess.
Большее спасибо за объяснение.
Сделал все так, как посоветовали, но безрезультатно. Файл .htaccess работает, проверил. Наверное я упустил какую то мелочь или нужно скирпт все таки переделать в следствии того, что переменные берутся из переменной $HTTP_AUTHORIZATION?
Не зная подробностей настроек Вашего аккаунта сложно сказать в чем именно проблема. Если переменная $HTTP_AUTHORIZATION к Вам в скрипт попадает, то все просто. Если нет, то надо разбираться. В любом случае это уже вопрос не для форума.
Пожалуйста, обратите также внимание на то, что в завимости от наличия или отсутствия других директив в файле .htaccess, требуемые данные могут оказаться не в переменной $_SERVER['HTTP_AUTHORIZATION'], а в переменной $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] (префикс REDIRECT_ добавляет к имени переменной модуль mod_rewrite).