Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Авторизация, Интересно Ваше мнение

13K
14 ноября 2005 года
akai
8 / / 14.11.2005
Интересно узнать, кто как делает, и нужен совет по следующему вопросу:
Каким способом лучше делать авторизацию
1) В админзону,
2) Для множества пользователей, например, интернет магазина.
Знаю, что многие делают авторизацию в админку через .htaccess и .htpasswd, но действительно ли такой способ достаточно безопасен, даже если хранить пароль выше директории, доступной из интернета? Или лучше здесь использовать php+mysql?
И, что касается php+mysql, насколько действительно безопасно хранить данные в базе данных? И как их следует защищать?
304
14 ноября 2005 года
Fenyx
707 / / 26.01.2005
Цитата:
Originally posted by akai
Интересно узнать, кто как делает, и нужен совет по следующему вопросу:
Каким способом лучше делать авторизацию
1) В админзону,
2) Для множества пользователей, например, интернет магазина.
Знаю, что многие делают авторизацию в админку через .htaccess и .htpasswd, но действительно ли такой способ достаточно безопасен, даже если хранить пароль выше директории, доступной из интернета? Или лучше здесь использовать php+mysql?
И, что касается php+mysql, насколько действительно безопасно хранить данные в базе данных? И как их следует защищать?


В свои админки я использую следующий уровень авторизации, создаю файлы с такими именами что на завтра сам их забываю :)

299
14 ноября 2005 года
3D Bob
885 / / 18.04.2005
Пароли хранил когда-то в MySQL с ипользованием такого дрянного создателя Хешей md5
239
14 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Авторизация Апаше сервером достаточно надежная, но ломается, известны преценденты.

Я всегда использую PHP+MySQL авторизацию, причем пароли храню в БД в зашифрованным PASSWORD(md5($pwd)), что невероятно надежно. Не рекомендую использовать куки. Лучше сессии с ключиком sid, который и будет ходить вместе с ссылками. Еще надо запретить индексацию этой части сайта. На всякий случай.
304
14 ноября 2005 года
Fenyx
707 / / 26.01.2005
Цитата:
Originally posted by Dolonet
Авторизация Апаше сервером достаточно надежная, но ломается, известны преценденты.

Я всегда использую PHP+MySQL авторизацию, причем пароли храню в БД в зашифрованным PASSWORD(md5($pwd)), что невероятно надежно. Не рекомендую использовать куки. Лучше сессии с ключиком sid, который и будет ходить вместе с ссылками. Еще надо запретить индексацию этой части сайта. На всякий случай.


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

239
14 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by Fenyx
Не согласен, запрещение индексации сразу грит злоумышленику что такой раздел есть, наоборот админ ращздел нигде не должен светиться....

Вообще-то можно запретить все по умолчанию, и разрешить только определенные директории.

Хотя ты прав, конечно.

13K
14 ноября 2005 года
akai
8 / / 14.11.2005
Цитата:
Originally posted by Dolonet
Авторизация Апаше сервером достаточно надежная, но ломается, известны преценденты.

Я всегда использую PHP+MySQL авторизацию, причем пароли храню в БД в зашифрованным PASSWORD(md5($pwd)), что невероятно надежно. Не рекомендую использовать куки. Лучше сессии с ключиком sid, который и будет ходить вместе с ссылками. Еще надо запретить индексацию этой части сайта. На всякий случай.


А PASSWORD() - что это за функция? Наподобие md5()?
"ходить вместе с ссылками" - имеете в виду передаваться в открытом виде в ссылках?

13K
14 ноября 2005 года
akai
8 / / 14.11.2005
Скажите, а насколько трудно взломать mySQL базу с этими самыми паролями и насколько это зависит от разработчика сайта? Если учесть, что даные от пользователя проверяются и разработчик в курсе, что такое инъективные sql-атаки...
239
14 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by akai
А PASSWORD() - что это за функция? Наподобие md5()?
"ходить вместе с ссылками" - имеете в виду передаваться в открытом виде в ссылках?

PASSWORD() - это внутренняя функция MySQL. Тоже необратимое шифрование. Вместе они дают неповторимый результат. Определить каков был пароль становится ну совершенно невозможно.

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

 
Код:
$sqlstr = "INSERT INTO table1 VALUES pwd=PASSWORD(".md5($pwd).")";
А ходить с сылками значит к концу каждой ссылки приделывать "sid=kjFY357hsgal8ysdg2EB4la925jaEsTdg" или что-то в этом роде. я использую случайно сгенерированный md5() длиной в 32 байта. Могу кинуть набор функций для удачной сессии.
13K
14 ноября 2005 года
akai
8 / / 14.11.2005
Цитата:
Originally posted by Dolonet
PASSWORD() - это внутренняя функция MySQL. Тоже необратимое шифрование. Вместе они дают неповторимый результат. Определить каков был пароль становится ну совершенно невозможно.

А работать с ним надо примерно так:
 
Код:
$sqlstr = "INSERT INTO table1 VALUES pwd=PASSWORD(".md5($pwd).")";
А ходить с сылками значит к концу каждой ссылки приделывать "sid=kjFY357hsgal8ysdg2EB4la925jaEsTdg" или что-то в этом роде.


Большое Спасибо, понял:)

Цитата:
я использую случайно сгенерированный md5() длиной в 32 байта.
Могу кинуть набор функций для удачной сессии.


Буду очень благодарен.

239
14 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by akai
Буду очень благодарен.

Вот набор функций. Надеюсь, тут все понятно. Если надо будет, добавляйте PASSOWORD() и мультипользователей.

Код:
// func. checks is active current session key and results true if yes
function isSession( $sid ) {
    global $database;
   
    $database->setQuery("SELECT id, sid, ip, UNIX_TIMESTAMP(NOW(NULL))-UNIX_TIMESTAMP(access) as howold, created, access FROM #__domaininfo_sessions WHERE sid='$sid'");
    list( $row ) = $database->loadObjectList();
    if ($database->getErrorNum()) {
        echo $database->stderr();
        return false;
    }
    // is row with this key exists?
    if ($row->id) {
        // isn't it expires?
        if (($row->howold >= 0) && ($row->howold < 3600)) {
            // has it same IP that previous?
            if ($row->ip == $_SERVER['REMOTE_ADDR']) {
                return true;
            }
        } else {
            deleteSession( $sid );
        }
    }
    return false;  
}

// Destroys session with this key
function deleteSession( $sid ) {
    global $database;
   
    $database->setQuery( "DELETE FROM #__domaininfo_sessions WHERE sid='$sid'" );
    if (!$database->query()) {
        echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n";
    }
}

// Make new session
function makeSession() {
    global $database;
    $row = new mosDomainInfo_Sessions( $database );
   
    $row->sid = md5( time() + rand(0,100000) + $_SERVER['REMOTE_ADDR'] );  
    $row->ip = $_SERVER['REMOTE_ADDR'];
    $row->created = date( "Y-m-d H:i:s" );
    $row->access = date( "Y-m-d H:i:s" );
    if (!$row->check()) {
        echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n";
        exit();
    }
    if (!$row->store()) {
        echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n";
        exit();
    }
    return $row->sid;
}

//
function updateSession( $sid ) {
    global $database;
   
    $database->setQuery( "UPDATE #__domaininfo_sessions SET ip='".$_SERVER['REMOTE_ADDR']."', created=created, access=NOW(NULL) WHERE sid='$sid'" );
    if (!$database->query()) {
        echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n";
    }
}
Сама проверка тут:
Код:
$logins = array('admin'=>'admin');

if ( isSession($sid) ) { // maybe current session is correct?
    updateSession( $sid );
} else { // checking for login&pwd
    if ($logins[$_POST['domaininfo_login']]&&($logins[$_POST['domaininfo_login']] == $_POST['domaininfo_pwd'])) {
        mosRedirect("index2.php?option=$option&sid=" . makeSession());
    } else { // user is not authorised
        HTML_domaininfo::drawLoginForm( $option );
    }
    die();
}
13K
14 ноября 2005 года
akai
8 / / 14.11.2005
Спасибо;)
4.8K
14 ноября 2005 года
Вася Триллер
149 / / 30.10.2005
Цитата:
Originally posted by Dolonet
Не рекомендую использовать куки.


Почему же? Куки, которые живут лишь до конца сессии (а ещё лучше - 3-5 минут, не более) и каждый раз меняются при переходе на другую страницу, имеют ничтожно малые возможности на нормальное использование. А если и про дырки в двиге ничего никому неизвестно...

239
14 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by Вася Триллер
Почему же? Куки, которые живут лишь до конца сессии (а ещё лучше - 3-5 минут, не более) и каждый раз меняются при переходе на другую страницу, имеют ничтожно малые возможности на нормальное использование. А если и про дырки в двиге ничего никому неизвестно...

Куки воруются в режиме онлайн адаварями. И еще они преспокойно могут быть отключены. Как у меня, например. А то что я выложил воруется только из хисторей, да и то в течение часа после использования или еще меньше. Метод с сессией в строке запроса имхо надежней.

4.8K
14 ноября 2005 года
Вася Триллер
149 / / 30.10.2005
Цитата:
Originally posted by Dolonet
Куки воруются в режиме онлайн адаварями.



При переходе на другую страницу куки переписываются. Я об этом уже писал.

Цитата:
Originally posted by Dolonet
И еще они преспокойно могут быть отключены. Как у меня, например.



А если куки отключены, то sid можно благополучно передавать через те же самые ссылки.

239
14 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by Вася Триллер
А если куки отключены, то sid можно благополучно передавать через те же самые ссылки.

Я о том и говорю, что sid нужен по-любому.

4.8K
14 ноября 2005 года
Вася Триллер
149 / / 30.10.2005
Цитата:
Originally posted by Dolonet
Я о том и говорю, что sid нужен по-любому.


Зато при использовании куки этот sid не будет маячить в адресной строке и в линках недогадливого юзера.

[FONT=courier new]http://example.com/forum/index.php?sid=2defa8bc2123[/FONT]

239
14 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by Вася Триллер
Зато при использовании куки этот sid не будет маячить в адресной строке и в линках недогадливого юзера.

[FONT=courier new]http://example.com/forum/index.php?sid=2defa8bc2123[/FONT]

Согласись, in a way это уже вопрос вкуса )

13K
14 ноября 2005 года
akai
8 / / 14.11.2005
Господа, простите, что повторяю вопрос, но боюсь, что он остался незамеченным...
Как ещё, кроме предотвращения инъективных sql-атак следует защищать БД на уровне сайта?
239
14 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by akai
Господа, простите, что повторяю вопрос, но боюсь, что он остался незамеченным...
Как ещё, кроме предотвращения инъективных sql-атак следует защищать БД на уровне сайта?

Проверять в каждом инклуде, какой файл его вызывает, иметь грамотный пароль на бд, разрешить работать с бд только с локалхоста. Еще все-все-все проверить. Все переменные, которые могут быть введены. Ни одной переменной не пропускать напрямую в запрос, например, в виде: "SELECT * FROM table1 WHERE a='" . $external_var . "'".

Примерно так.

13K
15 ноября 2005 года
akai
8 / / 14.11.2005
Цитата:
Originally posted by Dolonet
Проверять в каждом инклуде, какой файл его вызывает...


Подскажите способ, пожалуйста...

239
15 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by akai
Подскажите способ, пожалуйста...



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

 
Код:
defined( '_VALID_PAGE' ) or die( 'Direct Access to this location is not allowed.' );
Ну и помимо этого в каждой директории иметь пустой файлик index.html
И не использовать стандартных имен!
13K
15 ноября 2005 года
akai
8 / / 14.11.2005
Спасибо:)
239
15 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by akai
Спасибо:)

Да пожалуйста ) На эту тему я могу долго распространяться)

4.8K
15 ноября 2005 года
Вася Триллер
149 / / 30.10.2005
Цитата:
Originally posted by Dolonet
Ни одной переменной не пропускать напрямую в запрос, например, в виде: "SELECT * FROM table1 WHERE a='" . $external_var . "'".



Знаешь, я попытался отправить на своём движке конференции сообщение следующего вида:

Цитата:
hello',0,'username','127.0.0.1','subj','2005-11-15 16:12:00');
INSERT INTO dbb_users (username, userid, userpass) VALUES ('hyperadmin','1','');
INSERT INTO dbb_posts (topicid, posttext, postauthor, postauthname, postauthip, postsubj, postdatetime) VALUES ('0','hello



И ничего при этом в dbb_users не добавилось. При просмотре поста в топике я просто увидел тот же текст.
Вот часть исходника:

 
Код:
$ath[0] = mysql_query("INSERT INTO dbb_posts (topicid, posttext, postauthor, postauthname, postauthip, postsubj, postdatetime) VALUES ('$t','$message',0,'$username','".getenv("REMOTE_ADDR")."','$subj','".date("Y-m-d H:i:s")."');", $mysqlconnect);

Почему вместо лишней записи я получил те жи строки?
239
15 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by Вася Триллер
Знаешь, я попытался отправить на своём движке конференции сообщение следующего вида:

....

Почему вместо лишней записи я получил те жи строки?

Не знаю. Я всего кода не видел. Возможно, дело в кавычках?

4.8K
15 ноября 2005 года
Вася Триллер
149 / / 30.10.2005
Цитата:
Originally posted by Dolonet
Не знаю. Я всего кода не видел. Возможно, дело в кавычках?


Кавычки и в сообщении, и в запросе одинарные.

239
15 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by Вася Триллер
Кавычки и в сообщении, и в запросе одинарные.

Не я писал код, не знаю )

291
15 ноября 2005 года
gufy
703 / / 08.01.2003
dolonet, как насчет сделать FAQ по этому вопросу? т.е. по вопросам безопасности движков сайта? с примерами из личного опыта и распространенных продуктов?
239
16 ноября 2005 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by gufy
dolonet, как насчет сделать FAQ по этому вопросу? т.е. по вопросам безопасности движков сайта? с примерами из личного опыта и распространенных продуктов?

Мысль, однако! )

Я создал и прилепил тему:

http://forum.codenet.ru/showthread.php?s=&threadid=27251

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог