Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация, оценка 
:(
    Опции темы
Gold Dragon
  Дата 28.9.2006, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Прошу вас оценить надёжность данного способа авторизации. И укажите возможные способы взлома.
И желательно всё таки обойтись без общих фраз, а указать на конкретику.

страница с формой для ввода логина и пароля
Код

<?php

if(isset($_POST['ok'])){
// полечение данных из формы
    $log = (isset($_POST['log'])) ? md5($_POST['log']) : '';
    $pas = (isset($_POST['pas'])) ? md5($_POST['pas']) : '';

    // получение пароля и логина из базы
    $z = "SELECT `log_md`,`pas_md`,`id`* FROM `admin` WHERE `log_md`='".$log."' AND `pas_md`='".$pas."'";
    $r = mysql_query($z);

    // если пароль и логин верны и существуют в базе то..
    if (mysql_num_rows($r)>0){
        $f = mysql_fetch_array($r);
        $vr = 60*5; // время жизни кука
        setcookie ("aut", '1', time()+$vr);
        setcookie ("log", $f['log_md'], time()+$vr);
        setcookie ("pas", $f['pas_md'], time()+$vr);
        setcookie ("id", $f['id'], time()+$vr);
        // переход на страницу администрирования
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?pages=admin");
        exit;
    // если такого нет, то переход на страницу ошибки
    }else{
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?pages=message&id_m=4");
        exit;
    }
// если данных их формы нет,выводформы
}else{
    $content = s_restorat_content();
    echo $content;
}

function s_restorat_content(){
return <<<EOF
<div>
<table width="100%" align="center" border="0">
    <tr class="txt8">
        <td class="btr">
<p align="center"><form name="ok" action="" method="post">
<b>Вход</b><br>имя: <input name="log" type="text" value=""> пароль: <input name="pas" type="text" value="">
<input type="submit" value="OK" name="ok">
</form>
</div>
EOF;
}
?>


сраница администрирования куда осуществляется переход
Код

<?php
$vr = 60*5; // время жизни кука

if (isset($_COOKIE['aut'])) {
    // проверка кука и базы
    $id = (isset($_COOKIE['log'])) ? ($_COOKIE['id']) : '';
    $log = (isset($_COOKIE['log'])) ? ($_COOKIE['log']) : '';
    $pas = (isset($_COOKIE['pas'])) ? ($_COOKIE['pas']) : '';
    $z = "SELECT * FROM `admin` WHERE `log_md`='".$log."' AND `pas_md`='".$pas."' AND `id`='".$id."'";
    $r = mysql_query($z);
    // если всё совпадает
    if (mysql_num_rows($r)>0){
        //********************************************************************
        // начало основного поля администрирования
        setcookie ("aut", '1', time()+$vr);
        setcookie ("log", $log, time()+$vr);
        setcookie ("pas", $pas, time()+$vr);
        setcookie ("id_kabak",$id, time()+$vr);

                // необходимый код
                $content = "всё ОК";

        // конец основного поля администрирования
        //********************************************************************

    // если что-то не совпадает, то удаляем куки
    }else{
        setcookie ("aut", '', time()-60);
        setcookie ("log", '', time()-60);
        setcookie ("pas", '', time()-60);
        setcookie ("id", '', time()-60);
        // и переходим на страницу ошибки (несанкционированный доступ)
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?pages=message&id_m=5");
        exit;
    }
// если кук умер или его нет
}else {
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?pages=restorat");
        exit;
}

echo $content;
?>



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ZlojEzh
Дата 28.9.2006, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: 10
Всего: 15



используй вместо кукисов сессии
иначе злобный хацкер может похитить кукисы у пользователя, установить их себе и поставить неограниченное время жизни.
время жизни сессии ты по крайнер мере контролируешь сам: посему похищение идентификатора сессии даст хакеру намного меньше.
а если добавить еще скытую проверку версий браузера и ос, то все вообще будет отлично
PM MAIL ICQ   Вверх
Garret
Дата 28.9.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 16.9.2006
Где: Киев

Репутация: нет
Всего: 2



Зачем логин хранить захэшеным? smile 

Тут у тебя sql-inj на лицо.
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 28.9.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Gold Dragon, единственное, что мне пришло в голову, так это то, что после авторизации я могу провести тебе SQL-инъекцию, т.е. тут:
Код

// проверка кука и базы
    $id = (isset($_COOKIE['log'])) ? ($_COOKIE['id']) : '';
    $log = (isset($_COOKIE['log'])) ? ($_COOKIE['log']) : '';
    $pas = (isset($_COOKIE['pas'])) ? ($_COOKIE['pas']) : '';
    $z = "SELECT * FROM `admin` WHERE `log_md`='".$log."' AND `pas_md`='".$pas."' AND `id`='".$id."'";


Не забываем эскейпить входные данные!

Добавлено @ 09:25 
И еще:
Код

$id = (isset($_COOKIE['log'])) ? ($_COOKIE['id']) : '';

Ничего не напутал smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Gold Dragon
Дата 28.9.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



ZlojEzh, не люблю я что-то сессии smile да и такая серьёзная защита мне не нужна

Цитата(Garret @  28.9.2006,  09:22 Найти цитируемый пост)
Зачем логин хранить захэшеным?
А фиг его знает  smile 

Цитата(-=Ustas=- @  28.9.2006,  09:24 Найти цитируемый пост)
после авторизации я могу провести тебе SQL-инъекцию,
это как? поясни

Цитата(-=Ustas=- @  28.9.2006,  09:24 Найти цитируемый пост)
Не забываем эскейпить входные данные!
то есть?


PS
-=Ustas=-, да, действительно в одном месте лажа  smile 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 28.9.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Gold Dragon @  28.9.2006,  16:31 Найти цитируемый пост)
это как? поясни

Да как, открываем файл куков, и дописываем туды sql-запрос, через ' smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
sOckets
Дата 28.9.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Я всегда говорю что нельзя доверять юзерам , ты должен проверять всё что они отправляют. И потом зачем ты отдельно ставишь в куки : логин , пароль , id и тд , помоему "лутше" будет использовать 2 элемента куки , это ID и md5(login+pass) потом когда нужно проверить куки , ты берёшь ID и зашированный login и pass и сверяешь с теми же зашифрованными login и пассом..
Ещё раз говорю , парсь всё что вводит юзер ($_GET,$_POST,Cookie,ну и всякие системные переменные типо браузера и тд (если ты их юзаешь))...

Это сообщение отредактировал(а) sOckets - 28.9.2006, 19:43


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Gold Dragon
Дата 28.9.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



-=Ustas=-, если честно, то не понимаю smile хочешь сказать что какой-то запрос может выполниться? Приведи пример кода...


sOckets, я всё полностью проверяю что вводит юзер  smile  просто я из примера кода убрал всё лишнее, чтоб не захломлять


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Vaulter
Дата 28.9.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22




Gold Dragon
Код

$user_id =  preg_replace('[^0-9]','',$_COOKIE['user_id']);

 smile 
пароль не храни в куке!!!!  smile  smile 


--------------------
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 29.9.2006, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Наконец-то я понял что такое SQL-инъекция  smile 
но кстати, это хорошо говорить, когда структуру кода знаешь, а так замучаешься делать


Цитата(Vaulter @  28.9.2006,  22:23 Найти цитируемый пост)
пароль не храни в куке!!!!  
Да хватит тебе... smile сколько нужно времени что бы подобрать шести значный цифро-буквенный пароль? 

Да если уж на это пошло, то пароль можно подглядеть или подслущать smile



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
sOckets
Дата 29.9.2006, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Gold Dragon, тогда можно уверенно говорить что абсолютную защиту к сайту написать не возможно , поэтому можно и без пароля пускать в cpanel сайта , всё равно пароль подлядеть можно smile
Цитата

-=Ustas=-, если честно, то не понимаю  хочешь сказать что какой-то запрос может выполниться? Приведи пример кода...

Например в куках ID пишем (Опера просто создана для работы с куками ;)) наш ID и SQL Запрос , например 99+or+1=1/* , и если авторизация нормально прошла то можно сказать что SQL иньекция есть , затем просто делаем запросы...ну это вопрос времени , да я ещё и не проснулся с утра smile блин какой же я бред написал %)


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Kefir
Дата 29.9.2006, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



Gold Dragon, короче mysql_real_escape_string тебе в помощь!

Это сообщение отредактировал(а) Kefir - 29.9.2006, 08:57
PM MAIL WWW Skype   Вверх
-=Ustas=-
Дата 29.9.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Gold Dragon @  29.9.2006,  06:54 Найти цитируемый пост)
но кстати, это хорошо говорить, когда структуру кода знаешь, а так замучаешься делать

Ну зачем же так smile код совсем не обязательно вообще видеть. Просто цепляем к значению переменной куки апостроф или еще какой-нить служебный символ, и если ошибка вылетела или как-то некорректно отработал скрипт, то можно смело цеплять в этой переменной еще какой-нить дополнительный запрос, например через UNION и анализировать ошибки и тем самым подбираться к структуре таблички smile А если еще у пользователя базы данных (по которому коннектиться скрипт) есть права просмотра системных таблиц - то тогда вообще можно рутовый аккаунт получить smile так что не забывай про это, злодеи не дремлют smile)))
Цитата(Vaulter @  28.9.2006,  22:23 Найти цитируемый пост)
$user_id =  preg_replace('[^0-9]','',$_COOKIE['user_id']);

Это к чему такие извращения? В этой ситуации можно (даже нужно! ) обойтись банальным intval-ом.

Это сообщение отредактировал(а) -=Ustas=- - 29.9.2006, 10:23


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
G0rinich
Дата 29.9.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 21.8.2006

Репутация: 1
Всего: 1



Цитата(Gold Dragon @  29.9.2006,  06:54 Найти цитируемый пост)
Да хватит тебе...  сколько нужно времени что бы подобрать шести значный цифро-буквенный пароль? 

5 символов расшифровываются хорошей программой секунд за 10, на 6 символов уходит до 15 минут, так что не проблема )))

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

функция login
Код

    if($f=sqlselectone('select * from portal_users where user_login=\''.$_POST['login'].'\' and user_password=\''.md5($_POST['password']).'\'')) {
        ///setcookie('LAST_VISIT', $f['user_lastdate']);
        KillSession($_COOKIE['SESSION']);
        startsession($f['user_id'], @$_POST['remember']);
    }else{
        Pr('Login Error');
    }



Процедура авторизации (выполняется при каждой загрузке)
Код

$SESSION=@$_COOKIE['SESSION'];

$USER=array(
    'user_id'=>0,
    'user_level'=>0,
    'user_groups'=>array(1),
    'user_rights'=>array(),
    'user_design'=>$CONFIG['default_design'],
);

//print_r($USER);
if ($SESSION && ($USER=GetSession($SESSION))) {
    if ($USER['user_id']>0) {
        if ($USER['session_active']==0 || !get_cookie('LAST_VISIT')) set_cookie('LAST_VISIT', $USER['user_lastdate']);
        PrTo('java', 'function ping(){setTimeout("ping()",60000);document.pinger.navigate("'.BASE_URI."ping\");}\n");
        PrTo('javaonload', 'setTimeout(\'ping()\',5000);');
    }
    UpdateSession($SESSION, $USER['user_id']);
}else{
    unset($SESSION);
    setcookie('SESSION', '', time()-60);
    StartGuestSession();
    $USER=array(
        'user_id'=>0,
        'user_level'=>0,
        'user_groups'=>array(1),
        'user_rights'=>array(),
        'user_design'=>$CONFIG['default_design'],
    );
}
//print_r($USER);

KillExpiredSessions($CONFIG['drop_user_interval']);


Модуль управления сессиями
Код

<?php

////////////////////////////////////////////
//    Name:        Модуль управления сессиями
//    Version:    1.00
//    Author:        Gorinich
//    Date start:    
//    Date last:    01.02.2006 16:00:15
////////////////////////////////////////////

function KillSession($sid)
{
    sql("delete from portal_sessions where session_id='$sid'");
    setcookie('SESSION', '', time()-1);
}

function KillSessionByUID($uid)
{
    sql("delete from portal_sessions where session_user_id='$uid'");
    setcookie('SESSION', '', time()-1);
}

function StartSession($uid, $remember=false)
{
    KillSessionByUID($uid);
    $session=ChrRandomStr(); // Генерим номер сессии
    $remember?setcookie('SESSION', $session, time()+60*60*24*7):setcookie('SESSION', $session);
    $remember?$remember=1:$remember=0;
    ///echo 111;
    sql("insert into portal_sessions (session_id, session_user_id, session_page, session_start, session_time, session_active, session_saved) values('$session', '$uid', '', now(), now(), 1, '$remember')");
    sql('update portal_users set user_ip=\''.$_SERVER['REMOTE_ADDR']."' where user_id=$uid");
    echo '<META HTTP-EQUIV=\'Refresh\' CONTENT=\'0; URL='.BASE_URI.'\'>';
    exit;
}

function StartGuestSession()
{
    $session=ChrRandomStr(); // Генерим номер сессии
    setcookie('SESSION', $session);
    sql("insert into portal_sessions (session_id, session_user_id, session_page, session_start, session_time, session_active) values('$session', 0, '', now(), now(), 1)");
}

function GetSession($sid)
{
    global $USER;
    if (empty($sid)) return false;
    $f=sqlselectone("select a.*, b.* from portal_sessions as a left join portal_users as b on a.session_user_id=b.user_id where a.session_id='$sid'", MYSQL_ASSOC);
    if (!$f) return false;
    if($f['session_user_id']==0) { // Если анонимная сессия, то дальше не идем.
        LoadCookies(0, $sid);
        //echo 'anon';
        return array_merge($f, $USER);
    }
    LoadCookies($f['user_id']);
    $ff=sqlfields('select * from portal_user_group where user_id='.$f['user_id']);
    $f['user_groups']=$ff['group_id'];
    $f['user_rights']=GetRights($f['session_user_id'], $f['user_groups']);
    //print_r($f['forums_reads']);
    return $f;
}

function UpdateSession($id, $uid)
{
    sql("update portal_sessions set session_time=now(), session_active=1 where session_id='$id'");
    sql("update portal_users set user_lastdate=now() where user_id='$uid'");
    GrowStatistic('user', $uid);
}

function KillExpiredSessions($dui)
{
    sql("delete from portal_sessions where session_saved=0 and (NOW()>session_time + interval $dui minute)");
    sql("update portal_sessions set session_active=0 where session_saved=1 and (NOW()>session_time + interval $dui minute)");
}

?>


функция ChrRandomStr()
Код

function ChrRandomStr($len=20) // Строит произвольную строку указанной длины из символов (a-z,0-9)
{
    $res='';
    for ($i=0; $i<$len; $i++) $res.=mt_rand(0,3)==3?mt_rand(0, 9):chr(mt_rand(97, 122));
    return $res;
}


Ну и на всякий случай защищаемся от врагов )))
Код

function SecureArray(&$arr) // делает addslashes() для всех элементов массива любой сложности. Портит исходный массив.
{
    foreach ($arr as $k=>$v) if (is_array($v)) SecureArray($v); else $arr[$k]=addslashes($v);
    //return $arr;
}

function SecureInData($ws='gpc') // делает addslashes() для всех входящих данных
{
    // g - GET
    // p - POST
    // c - COOKIE
    if (get_magic_quotes_gpc()) return;
    if (strpos($ws,'g')) SecureArray($_GET);
    if (strpos($ws,'p')) SecureArray($_POST);
    if (strpos($ws,'c')) SecureArray($_COOKIE);
}

PM MAIL   Вверх
Gold Dragon
Дата 29.9.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



народ, спасибо за свои варианты, но мне хотелось узнать уязвимость своего smile

в общем, из всего сказанного я понял, что нужно проверять ещё дополнительно входящие данные... я это делаю, но про  mysql_real_escape_string не знал, спасибо...

На сессиях пока не хочу делать.. так как свободный доступ к компьютеру не очень реально получить по крайней мере в течение 10-15 минут после выхода человека, а куки удаляться через 5 минут. Это просто такие условия в данной ситуации

Добавлено @ 11:46 
G0rinich, извини, но я что-то не пойму никак где основное поле, когда всё верно?

ЗЫ
наверное пятница сказывается smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
sOckets
Дата 29.9.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Скорее всего smile Только что покушал.....пакемарить бы..... smile 


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Vaulter
Дата 29.9.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



Gold Dragon, дело не в подборе
дело в перехвате куков.
если в куках хранится пароль и id - то перехват приведет к тому что стороний человек получит доступ до смены пароля.
если в куках хранится сессия и id - то перехват приведет к тому, что у стороний человек получит доступ на время жизни сессии.



--------------------
PM MAIL WWW ICQ   Вверх
Garret
Дата 29.9.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 16.9.2006
Где: Киев

Репутация: нет
Всего: 2



6 символьный пароль подбереться за пару часов на сильной машине. Если нужно запоминать пользователя, то можно хранить и в куках.
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 29.9.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Vaulter @  29.9.2006,  13:22 Найти цитируемый пост)
если в куках хранится сессия и id - то перехват приведет к тому, что у стороний человек получит доступ на время жизни сессии.
Убедил smile

тогда вопрос.. Как мне в моём коде использовать сессии? То есть что и где поменять?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Garret
Дата 29.9.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 16.9.2006
Где: Киев

Репутация: нет
Всего: 2



Цитата(Gold Dragon @  29.9.2006,  18:42 Найти цитируемый пост)
Убедил smile
Что значит убедил? А если пользователь не хочет вводить каждый раз данные? smile 
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 29.9.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



что значет не хочет... не уже ли трудно ввести логин и пароль? На mail.ru заходят, вводят и ничего страшного smile

Добавлено @ 19:25 

ну так как предусмотреть сессии?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
SamDark
Дата 3.10.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



Сессию тоже можно перехватить. Даже если это произошло, можно защититься: запомнить при входе ip и сверять его в процессе работы скрипта.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Gold Dragon
Дата 16.10.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



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

Допустим юзер ввёл пароль и логин. Данные ушли на обработку. Сверились с данными в базе - всё в порядке.
До этого я просто записывал в куки пароль и логин с маленькой жизнью. А как мне работать с Сессиями?
Т.е. в место того, чтобы записывать в куки пароль, я должен стартовать сессию и записать значение session_id и потом всегда её проверять, так?

по моему что то я не то делаюsmile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 16.10.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Ну в сессию нужно писать ID и логин пользователя например, и в функции проверки авторизации при каждом переходе пробивать их достоверность. Если хочешь, чтоб был типа автовход, то в куку также можно писать ID и логин.
ЗЫ. Что то не могу уловить твою проблему.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Gold Dragon
Дата 16.10.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



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


вот что получилось, но чувствую что навертел что-то сложно и не правильно, посмотрите плизз

страница с формой
Код

<?php

if(isset($_POST['ok'])){
// полечение данных из формы
    $log = (isset($_POST['log'])) ? md5($_POST['log']) : '';
    $pas = (isset($_POST['pas'])) ? md5($_POST['pas']) : '';

    // получение пароля и логина из базы
    $z = "SELECT `log_md`,`pas_md`,`id`* FROM `admin` WHERE `log_md`='".$log."' AND `pas_md`='".$pas."'";
    $r = mysql_query($z);

    // если пароль и логин верны и существуют в базе то..
    if (mysql_num_rows($r)>0){
        $f = mysql_fetch_array($r);
        $vr = 60*5; // время жизни кука
        session_start();
        setcookie ("aut", '1', time()+$vr);
        setcookie ("log", $f['log_md'], time()+$vr);
        setcookie ("pas", session_id(), time()+$vr);
        setcookie ("id_kabak", $f['id_kabak'], time()+$vr);
        $_SESSION['pas'] = $pas;
        // переход на страницу администрирования
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?pages=admin");
        exit;
    // если такого нет, то переход на страницу ошибки
    }else{
    unset($_SESSION);
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?pages=message&id_m=4");
        exit;
    }
// если данных их формы нет,выводформы
}else{
    $content = s_restorat_content();
    echo $content;
}

function s_restorat_content(){
return <<<EOF
<div>
<table width="100%" align="center" border="0">
    <tr class="txt8">
        <td class="btr">
<p align="center"><form name="ok" action="" method="post">
<b>Вход</b><br>имя: <input name="log" type="text" value=""> пароль: <input name="pas" type="text" value="">
<input type="submit" value="OK" name="ok">
</form>
</div>
EOF;
}
?>


страница администрирования, куда осуществляется переход
Код

<?php
session_start();
$vr = 60*5; // время жизни кука

if (isset($_COOKIE['aut'])) {
    // проверка кука и базы
    $id = (isset($_COOKIE['id'])) ? ($_COOKIE['id']) : '';
    $log = (isset($_COOKIE['log'])) ? ($_COOKIE['log']) : '';
    $pas = (isset($_SESSION['pas'])) ? ($_SESSION['pas']) : '';
    $pasSes = (isset($_COOKIE['pas'])) ? ($_COOKIE['pas']) : '';
    $z = "SELECT * FROM `admin` WHERE `log_md`='".$log."' AND `pas_md`='".$pas."' AND `id`='".$id."'";
    $r = mysql_query($z);
    if ((mysql_num_rows($r)>0) AND ($pasSes = session_id())){
        //********************************************************************
        // начало основного поля администрирования
        setcookie ("aut", '1', time()+$vr);
        setcookie ("log", $log, time()+$vr);
        setcookie ("pas", $pasSes, time()+$vr);
        setcookie ("id",$id, time()+$vr);

                // необходимый код
                $content = "всё ОК";

        // конец основного поля администрирования
        //********************************************************************

    // если что-то не совпадает, то удаляем куки
    }else{
        setcookie ("aut", '', time()-60);
        setcookie ("log", '', time()-60);
        setcookie ("pas", '', time()-60);
        setcookie ("id", '', time()-60);
        unset($_SESSION);
       // и переходим на страницу ошибки (несанкционированный доступ)
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?pages=message&id_m=5");
        exit;
    }
// если кук умер или его нет
}else {
        header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?pages=restorat");
        exit;
}

echo $content;
?>



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 18.10.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



ау... smile 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 19.10.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Gold Dragon, опять жишь, где mysql_escape_stirng() ?! И еще, у тебя тут судя по всему автовхода нет, я правильно понял?!


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Gold Dragon
Дата 20.10.2006, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



про mysql_escape_stirng() забыл smile

Автовхода не будет.. 

А как насчет кода? Что-то по моему не то... Посмотрите пожалуйста.


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 20.10.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Gold Dragon, впринципе то все ништяк, только мне вот не понятно одно, зачем хеш от паса хранить в сессии, а остальные данные в куках. Поясни причину такого разделения, ИМХО, я бы все держал в сессиях, зачем пользователю видеть лишнюю информацию (об авторизации) у себя на тачке?! Но это ИМХО, а так... придраться вроде не к чему ;)


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
BrutalizedProgrammer
Дата 25.11.2006, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



Цитата(ZlojEzh @ 28.9.2006,  09:12)
...иначе злобный хацкер может похитить кукисы у пользователя, установить их себе и поставить неограниченное время жизни...

а как он их похитит?... (это не сарказм, мне реально интересно... как? Я просто сам тут ставил в куки пароль smile )
а вот теперь наткнулся на эту тему и очень заинтересовался...
PM MAIL ICQ   Вверх
skifoz
Дата 25.11.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 23.1.2006
Где: Россия

Репутация: нет
Всего: 1



Уметь надо) XSS решает

Это сообщение отредактировал(а) skifoz - 26.11.2006, 00:04
PM MAIL WWW   Вверх
BrutalizedProgrammer
Дата 27.11.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



Цитата

Код

$id = (isset($_COOKIE['log'])) ? ($_COOKIE['log']) : '';


Народ, извините за нубский вопрос smile ,
что означает знак "?" и знак ":" в этом выражении?...
PM MAIL ICQ   Вверх
Gold Dragon
Дата 27.11.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Код

$id = (isset($_COOKIE['log'])) ? ($_COOKIE['log']) : '';


это тоже самое что и 

Код

if (isset($_COOKIE['log'])) {
   $id = $_COOKIE['log'];
}else{
   $id = '';
}



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
GZep
Дата 27.11.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



Цитата(skifoz @  25.11.2006,  19:38 Найти цитируемый пост)
Уметь надо) XSS решает

Нет, решает addslashes();. Ха-ха. smile 
Цитата(Gold Dragon @  27.11.2006,  17:49 Найти цитируемый пост)
это тоже самое что и 

Кто вообще придумал этот укороченный вариант записи условий? Вообще он какой-то не такой... smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
BrutalizedProgrammer
Дата 27.11.2006, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



ааа типо тернарный оператор? (или тренарный... хз как то так smile )
PM MAIL ICQ   Вверх
Gold Dragon
Дата 28.11.2006, 11:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(GZep @  27.11.2006,  18:07 Найти цитируемый пост)
Кто вообще придумал этот укороченный вариант записи условий?

это дело вкуса, но мне очень нравится smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
BASILIO
Дата 23.8.2008, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Цитата(sOckets @  28.9.2006,  19:39 Найти цитируемый пост)
Ещё раз говорю , парсь всё что вводит юзер ($_GET,$_POST,Cookie,ну и всякие системные переменные типо браузера и тд (если ты их юзаешь))...


Вопрос, вот тоже сейчас все дырки залатываю, и задумался о куках, в принцепе их не так много, и больше меня интересует кука с ИД сессией, может ли недоброжелатель изменив значение, как-нибудь напакостить?
PM   Вверх
Ockonal
Дата 23.8.2008, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Smile
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 9.7.2007
Где: Ukraine::Nikolaev ;

Репутация: 1
Всего: 3



Можно smile Существуют sql-injection через кукисы. Нужно и их фильтровать.
--------------------
Ум заключается не только в знании, но и в умении прилагать знание на деле.Самое лучшее из всех доказательств есть опыт.Каждому человеку свойственно ошибаться, но никому, кроме глупца, несвойственно упорствовать в ошибке.
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
Feldmarschall
Дата 23.8.2008, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Ockonal, ну какой смысл писать в тему, которой два года? Ладно этот бедолага - его собственные темы закрывают за глупость и хамство - он по чужим шарахается. А ты-то чего?
Тему инъекции через куки давно в этом топике обсосали. Только о ней речь и шла. Всё решили. Зачем повторяться?
Зачем вообще размышлять - через что инъекции существуют, а через что - не существуют? Какая разница? Синтаксис надо соблюдать. Тогда и инъекций не будет. Данные, подставляемые в запрос, должны быть соответствующим образом обработаны. Точка. Откуда они поступили - неважно. Вы все думаете, почему-то, ОТКУДА поступили данные. А думать надо - КУДА.

К тому же, вопрос этого бедолаги похоже, не про инъекции, а про другое. Но тут замечательно подойдет первая строчка из твоей подписи. 



Это сообщение отредактировал(а) Feldmarschall - 23.8.2008, 09:15
PM   Вверх
BASILIO
Дата 23.8.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Ockonal, ну про кукисные инъекции я знаю, вопрос в другом, в ИД сессии, её я сам как бы не где не использую, по этому и не знаю, можно ли вообще её как-нибудь так написать, чтоб напакостить?

Это сообщение отредактировал(а) skyboy - 23.8.2008, 11:04
PM   Вверх
lukas
Дата 23.8.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Мне кажется достаточно поставить проверку по IP и все проблемы решаться... Даже если кто нибудь и получит куки, IP совпадать не будет, ну естественно IP не нужно записывать в КУку, а например куданибудь в базу данных или даже в файл... 

Это сообщение отредактировал(а) lukas - 23.8.2008, 10:13


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
BASILIO
Дата 23.8.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



lukas, ИП... есть у нас тута один сайт, там так делают... если чесно, очень сильно бесит... я вот думаю по данным каким-нибудь клиентским...
PM   Вверх
DioNiR
Дата 23.8.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



есть такие провайдеры где ип меняется,
Ни по каким данным ты не проверишь. Все данные приходящие от клиента можно подменить. Поэтому и есть куки, в них храниться основная инфа об авторизации. Чтобы не логиниться по сто раз. 
--------------------
Думали это конец? Ха, всё только начинается.
PM MAIL   Вверх
Ockonal
Дата 23.8.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Smile
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 9.7.2007
Где: Ukraine::Nikolaev ;

Репутация: 1
Всего: 3



Feldmarschall,
Я, конечно, извиняюсь, но зачем сразу такая реакция?
У меня эта тема была в rss, я и перешел... Знаю, виновен, я не читал тему с самого начала - исправлюсь.
p.s. сорри за оффтоп.
--------------------
Ум заключается не только в знании, но и в умении прилагать знание на деле.Самое лучшее из всех доказательств есть опыт.Каждому человеку свойственно ошибаться, но никому, кроме глупца, несвойственно упорствовать в ошибке.
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1785 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.