[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Byrger, не слушай Pashkely.
    PHP:
    <?
    $array=array('union','select','and','or');
    $string="http://site.ru/script.php?id=1+union+select+1";
    foreach(
    $array as $value)
    $string=preg_replace("#".$value."#i","",$string);
    echo 
    $string;
    ?>
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Дебильные фильтры, всё обходится просто написа любую букву в union заглавной и т.д. (у mailbrush)
     
    #9742 Pashkela, 25 Apr 2009
    Last edited: 25 Apr 2009
  3. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    "#".$value."#i"
     
    1 person likes this.
  4. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Pashkela, если ты не в курсе, Символ "i" после закрывающего ограничителя шаблона означает регистронезависимый поиск.

    Бургер, вот с функцией:
    PHP:
    <?
    $array=array('union','select','and','orx','\+');
    $string="http://site.ru/script.php?id=1+union+select+1";
    foreach(
    $array as $value)
    {
    $pattern="#".$value."#i";
    if(
    preg_match($pattern,$string))
    {
    $string=preg_replace($pattern,false,$string);
    $function="echo '<h1>Попытка взлома!</h1>';"//функкция
    }
    }
    echo 
    $string;
    @eval(
    $function);
    ?>
     
  5. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Если не нужны сложные замены то предпочтительней использовать str_ireplace(str_replace в 4 ветки с извратом strtolower или strtoupper ), во вторых представь ситуацию preg_match($pattern,$string) вернет 0 замен и у нас будет возможность перезаписать $function (переменые переменых, Global Owerwrite и etc ) то мы получем шелл :)
     
  6. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    Вот вы балбесы))))))))))))) ухахахахахаха, вот такое представление о защите и делает возможным имение серверов с кучей сайтов.

    HTML:
    $string="http://site.ru/script.php?id=1/**/ununionion/**/seselectlect/**/1";

    ЧТОБЫ ОТФИЛЬТРОВАТЬ ВСЕ - НУЖНО НАПИСАТЬ СУПЕРЗДОРОВЫЙ КЛАСС ДЛЯ ПАРСИНГА SQL ВЫРАЖЕНИЙ, ЧТО ПРОСТО БЕССМЫСЛЕННО!!!
     
    _________________________
    #9746 SQLHACK, 25 Apr 2009
    Last edited: 25 Apr 2009
  7. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Двум умникам выше (кроме SQLHACK есс-но) - если говорят дебильные фильтры, значит так оно и есть:)

    PHP:
    <?php 
    $array
    =array('union','select','and','or'); 
    $string="http://site.ru/script.php?id=1+uniunionon+seselectlect+1"
    foreach(
    $array as $value
    $string=preg_replace("#".$value."#i","",$string); 
    echo 
    $string;
    ?>
    :)

    +, о чем я сразу и написал, не проще просто нормальный код писать и проверять и обрабатывать только переменные, а не " все возможные существующие варианты"
     
    #9747 Pashkela, 25 Apr 2009
    Last edited: 25 Apr 2009
  8. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Ну куда мне до тебя супер умного, я же забыл что в MySQL есть оператор unтра-та-таion и seтра-та-таlect:

    PHP:

    $array_search
    =array('union','select','group','orde  r','limit');
    $input="http://site.ru/script.php?id=1+uniunionon+seselectlect+1";
    echo 
    str_ireplace($array_search,'тра-та-та',$input,$count); 

    http://site.ru/script.php?id=1+uniтра-та-таon+seтра-та-таlect+1
     
  9. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Byrger, зачем так делать?

    --Фильтрация для числовых значений:
    PHP:
    $id = (int)$_GET['id'];

    --Фильтрация для буквенных значений:
    PHP:
    $text mysql_escape_string(get_magic_quotes()?stripslashes($_GET['text']):($_GET['text']));
    + не забывай обрамлять эти параметры в кавычки в запросе!!!
    и никакой хакер не пройдет.
     
    #9749 Chaak, 25 Apr 2009
    Last edited: 25 Apr 2009
  10. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    Вот вам функция , которой достаточно в 99% случаев.
    PHP:
    function db_prepare($arg){
        global 
    $db_c;

        if(
    is_numeric($arg)){
            return 
    "'".$arg."'";
        }else if(
    is_string($arg)){
            return 
    "'".mysql_real_escape_string($arg$db_c)."'";
        }else{
            return 
    "''";
        }
    }
    Где $db_c это переменная-ресурс коннекта к БД

    ну или вообще убрать его
    PHP:
    function db_prepare($arg){
        if(
    is_numeric($arg)){
            return 
    "'".$arg."'";
        }else if(
    is_string($arg)){
            return 
    "'".mysql_real_escape_string($arg."'";
        }else{
            return 
    "''";
        }
    }
    что такое 1% это внесение в БД файлов и всякой нестандартной всячины.

    Перез использованием данной фунции должно быть установлено соединение с БД.

    Запрос выглядит так
    $query = "SELECT a,b,c,d FROM XXXX WHERE id=".db_prepare($id)." order by 1";

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

    Юзайте и будет вам счастье.
     
    _________________________
    #9750 SQLHACK, 25 Apr 2009
    Last edited: 25 Apr 2009
  11. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407

    ебт, ты всунь эту строку в скрипт и скрипт вырежет union и select в середине слов, и в БД пройдут чистые union select
     
    _________________________
  12. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    здесь идет не удаление юнионов, а их замена на тратата
     
  13. Byrger

    Byrger Elder - Старейшина

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Оо нифига на 2 страницы растянули : )
    Спасибо всем.
    А как достать строку из браузера которую пользователь вводит?
     
    #9753 Byrger, 25 Apr 2009
    Last edited: 25 Apr 2009
  14. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    имел ввиду функцию mailbrush'a

    2 PaCo:
    А твой пример с тратата тупо будет заплевывать как как Юзера ошибками, так и БД левыми не рабочими запросами


    Действительно куда тебе до меня супер умного ))))
     
    _________________________
    #9754 SQLHACK, 25 Apr 2009
    Last edited: 25 Apr 2009
  15. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    2 PaCo:

    $input="http://site.ru/script.php?id=1+%75%6E%69%6F%6E+%73%65%6C%65%63%74+1";

    реальный пример:

    Code:
    http://www.cz-usa.com/product_detail.php?id=-7+%75%6E%69%6F%6E+%73%65%6C%65%63%74+1,2,3,4,version(),6/*
    
    усовершенствуй код, и я его опять обойду, но уже за деньги:)
     
    1 person likes this.
  16. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    PHP:
    echo htmlspecialchars($_SERVER['SCRIPT_URI']);
    не забывай , если в базу заносишь фильтрацию на кавычки

    На JavaScript:
    PHP:
    alert(document.location.href);
    SQLHACK, твой код тоже уязвим для мультибайтовых кодировок из-за ошибки в mysql_real_escape_string
    жмяк
     
    #9756 Chaak, 25 Apr 2009
    Last edited: 25 Apr 2009
  17. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Не хочу тебя растраивать но данные пришедшие из вне уже будут будут преобразованны в нормальный вид(попробуй зделать echo $_GET['id']) ), и если не делать повторного преобразования в коде то это НИЧЕГО НЕ ДАСТ, Byrger спросил как зделать так и так и я ответил, конечно же самый разумный вариант это проверка данный на соответсвия их типу прежде чем вставлять их в гвери.
     
  18. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    Почему бы не использовать prepared statement'ы, как это делают во всех других языках? Они и выполняются быстрее и необходимость в какой-либо изощренной фильтрации отпадает.
     
  19. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    Блин все уже давно написано, я вон функцию скинул простую и 100% надежную , Chaak собсввенно тоже самое написал но по другом, в конце концов посмотрите вы например как в WordPress сделано. \
    Че вы в тысячный раз велосипед изобретаете.
     
    _________________________
  20. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    SQLHACK
    В том то и дело, что велосипед - это ваши функции. А prepared statement'ы это проверненное и повсеместно используемое решение. Я мало знаком с php, поэтому врядли вам могу что-нибудь советовать. Но тем не менее в других языках не пишут какие то свои функции, а используют prepared statement'ы. Я не агитирую вас, просто задался вопросом зачем что-то свое писать, если есть готовое на уровне языка причем?
     
Thread Status:
Not open for further replies.