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

Форум PHP

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

 

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

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

тема: Оцените скрипт защиты админки.
 
 автор: lElectroHardl   (13.08.2010 в 19:20)   письмо автору
 
 

<?php
include("db.php");
if (!isset(
$_SERVER['PHP_AUTH_USER']))
{
        
Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
        
Header ("HTTP/1.0 401 Unauthorized");
        exit();
}

else 
{
    
$log mysql_real_escape_string($_SERVER['PHP_AUTH_USER']);
    
$pasw mysql_real_escape_string($_SERVER['PHP_AUTH_PW']);
    
    function 
OwnStripSlashes($pasw)       
    { 
    if(
is_array($pasw)) 
        
$pasw array_map('OwnStripSlashes'$pasw); 
    else 
        
$pasw stripslashes($pasw);
        
$pasw htmlspecialchars ($pasw);
    return 
$pasw
    }
    
        if ( 
get_magic_quotes_gpc() ) 
        { 
        
$_GET OwnStripSlashes($_GET); 
        
$_POST OwnStripSlashes($_POST); 
        
$_COOKIE OwnStripSlashes($_COOKIE);
        
$_SERVER OwnStripSlashes($_SERVER); 
        }
        
                
// нужно ли тут это?         
                 
if ( !get_magic_quotes_gpc() ) 
                {
                       
$_SERVER['PHP_AUTH_USER'] = $log;
                       
$_SERVER['PHP_AUTH_PW'] = $pasw;
                }
        
        
$query "SELECT * FROM adm_zone WHERE user='".$log."'";
        
$lst mysql_query($query);
        
        
error_reporting (E_ALL E_NOTICE);

        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 ( 
$pass['pass'] != md5md5($pass['salt1']).md5($pasw).md5($pass['salt2']) ) )
        {
           
Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
           
Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }

?>

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 19:45)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 19:20)
 

Ужас

  Ответить  
 
 автор: lElectroHardl   (13.08.2010 в 19:50)   письмо автору
 
   для: tvv123456   (13.08.2010 в 19:45)
 

Почему ужас?
Здесь http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=75291&page=4 советовали как раз то, что я и реализовал.

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 19:52)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 19:50)
 

>Советовали то что я здесь реализовал

Я вот сколько не смотрел, даже намека не увидел на то что вы здесь "реализовали"

Вы похоже не поняли чуток сути придирок там :) или очень бегло прочитали отзывы

Еще не надо под одну гребенку пихать GPC(get/post/coockie) и $_SERVER Это может создать некоторые проблемы при эксплуатации сайта

  Ответить  
 
 автор: nikita2206   (13.08.2010 в 20:03)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 19:20)
 

Ну а нахрена делать серверную аутентификацию? Неужели простой формы не хватит?
Теперь критика:

1. Зачем else здесь?
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) 

        
Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); 
        
Header ("HTTP/1.0 401 Unauthorized"); 
        exit(); 


else  
{


2. Вот это глаз вообще режет... Найди какой-нить класс для удобной работы с базой, а лучше фреймворк.
<?php
    $log 
mysql_real_escape_string($_SERVER['PHP_AUTH_USER']); 
    
$pasw mysql_real_escape_string($_SERVER['PHP_AUTH_PW']); 
     
    function 
OwnStripSlashes($pasw)        
    {  
    if(
is_array($pasw))  
        
$pasw array_map('OwnStripSlashes'$pasw);  
    else  
        
$pasw stripslashes($pasw); 
        
$pasw htmlspecialchars ($pasw); 
    return 
$pasw;  
    } 
     
        if ( 
get_magic_quotes_gpc() )  
        {  
        
$_GET OwnStripSlashes($_GET);  
        
$_POST OwnStripSlashes($_POST);  
        
$_COOKIE OwnStripSlashes($_COOKIE); 
        
$_SERVER OwnStripSlashes($_SERVER);  
        } 
         
                
// нужно ли тут это?          
                 
if ( !get_magic_quotes_gpc() )  
                { 
                       
$_SERVER['PHP_AUTH_USER'] = $log
                       
$_SERVER['PHP_AUTH_PW'] = $pasw
                }

Да еще и с отступами намудрил... Я ничего не понял. Удали дримвивер или то чем пользуешься и поставь например PhpStorm, Eclipse или NetBeans.

3. Вот это уже не в первый раз вижу, нахрена спрашивается создавать переменную? Если сразу аргументом запрос писать, то не влезает в экран монитора что-ли?
<?php
        $query 
"SELECT * FROM adm_zone WHERE user='".$log."'"
        
$lst mysql_query($query);


4. Ну яебал... Нахрена такую кашу строить? Уровень ошибок в таком уж случае выставь в самом начале кода.
<?php
error_reporting 
(E_ALL E_NOTICE);


5. Соль в базе хранится вместе с паролем? Круто. Смысл тогда какой? В этой соли.
<?php
md5
md5($pass['salt1']).md5($pasw).md5($pass['salt2']) )

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 20:07)   письмо автору
 
   для: nikita2206   (13.08.2010 в 20:03)
 

>Удали дримвивер

Ну это дело привычки. Мне дак он вполне нравиться. Только вот пользуюсь еще 3 версией :))))))))) Никак руки не доходят более современный поискать

Еще насчет п.3 .
В принципе это удобно когда может возникнуть какая-то проблема при проведении запроса к базе. Можно сразу же вывести сам запрос(он выделен в отдельной переменной) а ниже вывести ответ mysql и сразу наглядно найти свою ошибку в составлении запроса :)
и еще если уж используеться такой метод то тогда и экранирование лучше проводить сразу наместе что-то типа:

<?
$query 
"SELECT * FROM adm_zone WHERE user='".mysql_real_escape_string($log)."'";  
$result=mysql_query($query) or die(mysql_error());

  Ответить  
 
 автор: nikita2206   (13.08.2010 в 20:26)   письмо автору
 
   для: tvv123456   (13.08.2010 в 20:07)
 

На все это ответ - п.2

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 20:28)   письмо автору
 
   для: nikita2206   (13.08.2010 в 20:26)
 

>На все это ответ - п.2

Это вы про дремивер я так полагаю?
Но не дримивер тут далеко виноват поверьте.

  Ответить  
 
 автор: nikita2206   (13.08.2010 в 20:37)   письмо автору
 
   для: tvv123456   (13.08.2010 в 20:28)
 

Вот щас не понял. Это не про дримвивир, а про фреймворк... На это:

Еще насчет п.3 .
В принципе это удобно когда может возникнуть какая-то проблема при проведении запроса к базе. Можно сразу же вывести сам запрос(он выделен в отдельной переменной) а ниже вывести ответ mysql и сразу наглядно найти свою ошибку в составлении запроса :)
и еще если уж используеться такой метод то тогда и экранирование лучше проводить сразу наместе что-то типа:>>На все это ответ - п.2

  Ответить  
 
 автор: lElectroHardl   (13.08.2010 в 20:21)   письмо автору
 
   для: nikita2206   (13.08.2010 в 20:03)
 

Спасибо. Понял, что нужно все переделывать и покупать книги....
После первой строчки задумался, стоит ли держать аутентификацию или все же сделать проверку по имени пользователя. Как думаете?

Вот 3-й пункт вообще странный... В той теме (ссылка в начале) советовали результат в переменную занести, тут на оборот.
А 5-й пункт обидел даже. Нет конечно, в базе хэш храниться.

  Ответить  
 
 автор: nikita2206   (13.08.2010 в 20:35)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 20:21)
 

> После первой строчки задумался, стоит ли держать аутентификацию или все же сделать проверку по имени пользователя. Как думаете?

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


> Вот 3-й пункт вообще странный...

Если не работает такой код:
<?php
$result 
mysql_query('SELECT * FRO `table`');

Просто пишем так:
<?php
$result 
mysql_query($sql 'SELECT * FRO `table`');

По крайней мере кода меньше, но опять же - п.2 - фреймворк вам поможет в этом...


> А 5-й пункт обидел даже. Нет конечно, в базе хэш храниться.

Да, в базе, и там же почему-то соль. Может я чего-то не понимаю, но какая логика в этом?

  Ответить  
 
 автор: lElectroHardl   (13.08.2010 в 20:44)   письмо автору
 
   для: nikita2206   (13.08.2010 в 20:35)
 

>Да, в базе, и там же почему-то соль. Может я чего-то не понимаю, но какая логика в этом?
А как надо? Хеш в одной таблице, а соль(-и) в других? В этом какая логика? Как надо?

И еще пользоваться этой темой можно пользоваться, что бы доступ а админке ограничить? В смысле там ошибок нет?

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 21:05)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 20:44)
 

>А как надо? Хеш в одной таблице, а соль(-и) в других? В этом какая логика? Как надо?

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

Вы не метайтесь от способа к способу а попробуйте переделать приведенный вами скрипт в порядок, тут вам уже указали на основные ошибки

  Ответить  
 
 автор: lElectroHardl   (13.08.2010 в 21:50)   письмо автору
 
   для: nikita2206   (13.08.2010 в 20:03)
 

Можно немного пояснить, а то я не совсем доганяю.
1. Зачем else? Ведь идет проверка, было ли обращение к скрипту. Если нет, то exit, else идти дальше.
2. Что именно режет глаза? По-подробнее пожалуйста. Т.к. воспользоваться Фрейворком нет возможности ("знания").

Если в .htaccess вставить
php_flag magic_quotes_gpc Off
, как писали в прошлой теме, можно этот код:
<?
    
function OwnStripSlashes($pasw)         
    {   
    if(
is_array($pasw))   
        
$pasw array_map('OwnStripSlashes'$pasw);   
    else   
        
$pasw stripslashes($pasw);  
        
$pasw htmlspecialchars ($pasw);  
    return 
$pasw;   
    } 

убрать?

Немного поправил код. надеюсь, не в худшею сторону.

<?php
include("db.php");
error_reporting (E_ALL E_NOTICE);
if ( 
$_SERVER['PHP_AUTH_USER'] )
{
    if ( !
get_magic_quotes_gpc() ) 
    {
        
$pasw mysql_real_escape_string($_SERVER['PHP_AUTH_PW']);
    }

    
$query "SELECT * FROM adm_zone WHERE user='".mysql_real_escape_string($_SERVER['PHP_AUTH_USER'])."'";
    
$lst mysql_query($query);

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

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

else
{
    
Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    
Header ("HTTP/1.0 401 Unauthorized");
    exit();
}
?>

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 22:07)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 21:50)
 

уже лучше :)
только вот этого не нужно:

<?
 
if ( !get_magic_quotes_gpc() )  // не пользуйтесь вы такой конструкцией а просто всегда отключайте магические кавычки
    

        
$pasw mysql_real_escape_string($_SERVER['PHP_AUTH_PW']); 
    } 
// мы же не используем пароль для запроса к базе?

........
if ( 
mysql_num_rows($lst) == // а если вернет 2 это разве правильно?




и еще вот что
действительно не надо делать тут if ( $_SERVER['PHP_AUTH_USER'] ) а затем еще else
просто сделайте так что если нету данного массива то пусть браузер выводит запрос на ввод логина и пароля а сервер завершает выполнение скипта

  Ответить  
 
 автор: lElectroHardl   (13.08.2010 в 22:13)   письмо автору
 
   для: tvv123456   (13.08.2010 в 22:07)
 

>мы же не используем пароль для запроса к базе?
Нет :).
Что еще можно дописать в коде, что бы он был "идеален"?

Еще такой вопрос, по самой защите.
У меня есть лишний домен, жить он будет еще около полугода. Посетителей 0, известности тоже 0. Т.е. заходить на него будут от силы 2 человека в месяц (и то по случайности). И этот домен лежит на том же сервере, что и основной (для которого админку делаю).
Так вот, вопрос: стоит ли эту админку перекинуть на тот домен? Что бы управлять БД с другого сайта.
1. Есть ли в этом смысл?
2. разумно ли это?

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 22:20)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 22:13)
 


<?
$pass 
mysql_fetch_array($lst);  // лучше не _array,a _assoc
//и вот тут еще малец:

 
$lst mysql_query($query); //диагностика ошибки не помешает:

 
$lst mysql_query($query) or die(mysql_error());


и еще вместо этого:

<?
else 

    
Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); 
    
Header ("HTTP/1.0 401 Unauthorized"); 
    exit(); 



сделайте лучше так:


<?
//в самом начале кода заместо
if ( $_SERVER['PHP_AUTH_USER'] ) 

//сделайте следующее:

if ( !isset($_SERVER['PHP_AUTH_USER'] )) 

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


>1. Есть ли в этом смысл?
>2. разумно ли это?
Ну я особого смысла не вижу, если уж так хотите админку скрыть дайте ей какое-нибудь экзотическое название :)

Жду конечного варианта :)
Конечно можно почистить $_SERVER в начале от магических кавычек, но все-таки лучшех их всегда отключать, слышал в php6 их вообще уберут

  Ответить  
 
 автор: lElectroHardl   (13.08.2010 в 22:27)   письмо автору
 
   для: tvv123456   (13.08.2010 в 22:20)
 

Все, все позаменял. Может что еще? :)

Имя я ей-то уже придумал, но опасения все-равно есть. Есть ли у вас какие-то соображение по этому поводу?

Собственно, конечный вариант группового строения админки готово:

<?php
include("db.php");
error_reporting (E_ALL E_NOTICE);
if ( 
$_SERVER['PHP_AUTH_USER'] )
{
    
$pasw mysql_real_escape_string($_SERVER['PHP_AUTH_PW']);
    
$query "SELECT * FROM adm_zone WHERE user='".mysql_real_escape_string($_SERVER['PHP_AUTH_USER'])."'";
    
$lst mysql_query($query) or die(mysql_error()); 

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

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


if ( !
$_SERVER['PHP_AUTH_USER'] )  
{  
    
Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    
Header ("HTTP/1.0 401 Unauthorized");
    exit();  
}
?>

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 22:30)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 22:27)
 

> но опасения все-равно есть.

Вы бы лучше опасались того что при каждом обращении к серверу ваш браузер в открытом виде передает пароль $_SERVER['PHP_AUTH_PW']); и это существенный недостаток basic-аутентификации, если так подумать то это большая опастность чем обнаружении админки

  Ответить  
 
 автор: lElectroHardl   (13.08.2010 в 22:32)   письмо автору
 
   для: tvv123456   (13.08.2010 в 22:30)
 

Варианты исправления есть?

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 22:33)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 22:32)
 

Другой способ защиты(но все равно хотя бы 1 раз вы будете отсылать свои данные серверу) или купить SSL(самый лучший вариант)

так ради интереса можете посмотреть:

НА рабочем столе: ПУСК->выполнить, там пишем cmd, нажимаем ентер и печатаем tracert yourdomain.ru нажимаем ентер и смотрим сколько потенциальных сниферов :)
(это чтобы усилить вашу параною)

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 22:47)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 22:32)
 

Вообщем не парьтесь сильно, вам еще далеко до создания более менее приемлемых проектов
советую посмотреть: http://www.softtime.ru/info/apache.php?id_article=27
удобная вещь особенно когда в админке много файлов, и куда нибудь но забудешь подключить файл lock(у меня такое было) а тут кинул файлик .htaccess в папку админки и живешь хорошо :)

  Ответить  
 
 автор: Рома   (14.08.2010 в 13:06)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 22:32)
 

http://www.drupal.ru/node/8903

  Ответить  
 
 автор: tvv123456   (13.08.2010 в 22:35)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 22:27)
 

ОПять косяк


<?
if ( !$_SERVER['PHP_AUTH_USER'] )   
{   
    
Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); 
    
Header ("HTTP/1.0 401 Unauthorized"); 
    exit();   
}

//в самое начало и лучше так:
if ( !isset($_SERVER['PHP_AUTH_USER'] ))   
{   
    
Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); 
    
Header ("HTTP/1.0 401 Unauthorized"); 
    exit();   
}


а это вообще уберите:

if ( $_SERVER['PHP_AUTH_USER'] ) 




и уберите эту строку!!!!:

<?
$pasw 
mysql_real_escape_string($_SERVER['PHP_AUTH_PW']); 


И такой код рассчитан что на сервере выключены МАГИЧЕСКИЕ КАВЫЧКИ(покрайней мере те что работают с $_SERVER(Не помню точно по этому поводу))

  Ответить  
 
 автор: lElectroHardl   (14.08.2010 в 14:20)   письмо автору
 
   для: tvv123456   (13.08.2010 в 22:35)
 

А чем
!$_SERVER...
отличается от
!isset($_SERVER...)
?

  Ответить  
 
 автор: nikita2206   (15.08.2010 в 20:54)   письмо автору
 
   для: lElectroHardl   (14.08.2010 в 14:20)
 

Ошибкой уровня Notice

  Ответить  
 
 автор: lElectroHardl   (14.08.2010 в 14:18)   письмо автору
 
   для: lElectroHardl   (13.08.2010 в 19:20)
 

Всем спасибо за помощь!
Вот результат собственно:

<?php
include("db.php");
error_reporting (E_ALL E_NOTICE);

    
$query "SELECT * FROM adm_zone WHERE user='".($_SERVER['PHP_AUTH_USER'])."'";
    
$lst mysql_query($query) or die(mysql_error()); 

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

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

if ( !isset(
$_SERVER['PHP_AUTH_USER']) )  
{  
    
Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
    
Header ("HTTP/1.0 401 Unauthorized");
    exit();  
}

  Ответить  
 
 автор: tvv123456   (14.08.2010 в 14:24)   письмо автору
 
   для: lElectroHardl   (14.08.2010 в 14:18)
 

Да вы видать через строчку читаете
Я насчет этого блока:

if ( !isset($_SERVER['PHP_AUTH_USER']) )   
{   
    Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); 
    Header ("HTTP/1.0 401 Unauthorized"); 
    exit();   



Его нужно в самое начало, иначе от него смысла 0
И зря вы из этой вот(именно этой строки!!!
$query = "SELECT * FROM adm_zone WHERE user='".($_SERVER['PHP_AUTH_USER'])."'"; 


убрали mysql_real_escape_string(),

из вышесказанного вывод-> вы вообще не понимаете(даже приблизительно) как работает этот скрипт и для чего нужен тот или иной его элемент, а следовательно рано еще заниматься сайтом, самое время заняться самообразованием

  Ответить  
 
 автор: Лена   (14.08.2010 в 16:17)   письмо автору
 
   для: lElectroHardl   (14.08.2010 в 14:18)
 

Сама логика скрипта путанная, говорит, что вы не совсем понимаете, что в нем делается. Я бы делала так(показываю схематически, т.к. так быстрее):

<?php
  
if (!isset($_SERVER['PHP_AUTH_USER'])) {
      
// пользователь неизвестен
    
header("WWW-Authenticate: Basic realm=\"My Realm\"");
    
header("HTTP/1.0 401 Unauthorized");
    exit;
  } else {
      
//пользователь($_SERVER['PHP_AUTH_USER') есть, надо проверить, есть ли запись про него в базе 
    //ваш запрос
    
if (mysql_num_rows($lst) == 0)    
    
// пользователя с таким именем нет в БД, отклик 401
        
Header("WWW-Authenticate: Basic realm="Admin Center"");
        
Header("HTTP/1.0 401 Unauthorized");
        exit();
    }else{    
    
// пользователь с таким именем есть в БД, надо проверить совпадают ли пароли
           
$pass mysql_fetch_assoc($lst);
        if ( 
$pass['pass'] != md5($_SERVER['PHP_AUTH_PW']) ){
            
            
//пароли не совпали - отклик 401
        
        
}
    }
  }
?>

  Ответить  
 
 автор: lElectroHardl   (14.08.2010 в 17:01)   письмо автору
 
   для: Лена   (14.08.2010 в 16:17)
 

Вообще-то у меня такая же структура скрипта. Почему вы считаете ее путаной, если написали в точности такой же скрипт (за исключением запроса к базе)?

  Ответить  
 
 автор: Лена   (14.08.2010 в 17:06)   письмо автору
 
   для: lElectroHardl   (14.08.2010 в 17:01)
 

Я говорила по коду от (14.08.2010 в 14:18) - как я поняла, улучшенному и дополненному. Все, что выше, я почти не смотрела. Сравните еще раз внимательно свое и мое. Вы, не зная, есть ли у вас пользователь или нет, начинаете с запроса к базе - это по вашему одно и то же?

  Ответить  
 
 автор: lElectroHardl   (14.08.2010 в 17:25)   письмо автору
 
   для: Лена   (14.08.2010 в 17:06)
 

Я это исправил уже, спасибо.

  Ответить  
 
 автор: Николай2357   (15.08.2010 в 15:00)   письмо автору
 
   для: Лена   (14.08.2010 в 17:06)
 

Можно же еще проще... Одним запросом все решить раз и на всегда. Лень переписывать, вот тут есть.

  Ответить  
 
 автор: lElectroHardl   (15.08.2010 в 17:12)   письмо автору
 
   для: Николай2357   (15.08.2010 в 15:00)
 

Можно и так. А можно вообще совместить все в 1.

  Ответить  
 
 автор: tvv123456   (17.08.2010 в 02:10)   письмо автору
 
   для: Лена   (14.08.2010 в 16:17)
 

Извиняюсь что снова поднимаю тему, но впредь кто прочитает эту тему:
вот такой конец :

     } 
    } 
  } 
?> 

Это не очень хорошо.
По логике: на кой черт вам вся эта уйма else?

........................
<?
if (mysql_num_rows($lst) == 0)     
    
// пользователя с таким именем нет в БД, отклик 401 
        
Header("WWW-Authenticate: Basic realm="Admin Center""); 
        
Header("HTTP/1.0 401 Unauthorized"); 
        exit(); 
    }else 
// на кой черт оно тут ? если в итоге выполниться условие, то скрипт итак остановиться,
//на кой черт тут(и не только тут это else?

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

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