Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Авторизация


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

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

<?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;
?>

Автор: ZlojEzh 28.9.2006, 09:12
используй вместо кукисов сессии
иначе злобный хацкер может похитить кукисы у пользователя, установить их себе и поставить неограниченное время жизни.
время жизни сессии ты по крайнер мере контролируешь сам: посему похищение идентификатора сессии даст хакеру намного меньше.
а если добавить еще скытую проверку версий браузера и ос, то все вообще будет отлично

Автор: Garret 28.9.2006, 09:22
Зачем логин хранить захэшеным? smile 

Тут у тебя sql-inj на лицо.

Автор: -=Ustas=- 28.9.2006, 09:24
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

Автор: Gold Dragon 28.9.2006, 16:31
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 

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

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

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

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


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

Автор: Vaulter 28.9.2006, 22:23

Gold Dragon, 
Код

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

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

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


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

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

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

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

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

Автор: Kefir 29.9.2006, 08:28
Gold Dragon, короче http://wiki.vingrad.ru/PHP:mysql_real_escape_stringтебе в помощь!

Автор: -=Ustas=- 29.9.2006, 10:14
Цитата(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-ом.

Автор: G0rinich 29.9.2006, 10:19
Цитата(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);
}

Автор: Gold Dragon 29.9.2006, 11:37
народ, спасибо за свои варианты, но мне хотелось узнать уязвимость своего smile

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

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

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

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

Автор: sOckets 29.9.2006, 12:27
Скорее всего smile Только что покушал.....пакемарить бы..... smile 

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

Автор: Garret 29.9.2006, 13:38
6 символьный пароль подбереться за пару часов на сильной машине. Если нужно запоминать пользователя, то можно хранить и в куках.

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

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

Автор: Garret 29.9.2006, 18:44
Цитата(Gold Dragon @  29.9.2006,  18:42 Найти цитируемый пост)
Убедил smile
Что значит убедил? А если пользователь не хочет вводить каждый раз данные? smile 

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

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

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

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

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

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

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

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

Автор: Gold Dragon 16.10.2006, 14:32
да проблемы нет... просто народ сказал что хранить в куках пароль не очень надёжно.. Вот я подумал-подумал и решил чуть переделать код


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

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

<?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;
?>

Автор: Gold Dragon 18.10.2006, 18:32
ау... smile 

Автор: -=Ustas=- 19.10.2006, 09:24
Gold Dragon, опять жишь, где mysql_escape_stirng() ?! И еще, у тебя тут судя по всему автовхода нет, я правильно понял?!

Автор: Gold Dragon 20.10.2006, 09:15
про mysql_escape_stirng() забыл smile

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

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

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

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

а как он их похитит?... (это не сарказм, мне реально интересно... как? Я просто сам тут ставил в куки пароль smile )
а вот теперь наткнулся на эту тему и очень заинтересовался...

Автор: skifoz 25.11.2006, 19:38
Уметь надо) XSS решает

Автор: BrutalizedProgrammer 27.11.2006, 15:38
Цитата

Код

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


Народ, извините за нубский вопрос smile ,
что означает знак "?" и знак ":" в этом выражении?...

Автор: Gold Dragon 27.11.2006, 17:49
Код

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


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

Код

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

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

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

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

Автор: BrutalizedProgrammer 27.11.2006, 18:11
ааа типо тернарный оператор? (или тренарный... хз как то так smile )

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

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

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


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

Автор: Ockonal 23.8.2008, 07:07
Можно smile Существуют sql-injection через кукисы. Нужно и их фильтровать.

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

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


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

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

Автор: BASILIO 23.8.2008, 10:28
lukas, ИП... есть у нас тута один сайт, там так делают... если чесно, очень сильно бесит... я вот думаю по данным каким-нибудь клиентским...

Автор: DioNiR 23.8.2008, 11:01
есть такие провайдеры где ип меняется,
Ни по каким данным ты не проверишь. Все данные приходящие от клиента можно подменить. Поэтому и есть куки, в них храниться основная инфа об авторизации. Чтобы не логиниться по сто раз. 

Автор: Ockonal 23.8.2008, 12:09
Feldmarschall,
Я, конечно, извиняюсь, но зачем сразу такая реакция?
У меня эта тема была в rss, я и перешел... Знаю, виновен, я не читал тему с самого начала - исправлюсь.
p.s. сорри за оффтоп.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)