Статья про анти sql-inj

Discussion in 'Уязвимости' started by nerezus, 5 Jan 2007.

  1. k1b0rg

    k1b0rg Тут может быть ваша реклама.

    Joined:
    30 Jul 2005
    Messages:
    1,182
    Likes Received:
    399
    Reputations:
    479
    чтобы нельзя было провести инъекцию......из под ковычек не выйти
     
  2. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    А разве без этой штуки можно? подумай хорошенько )
     
  3. k1b0rg

    k1b0rg Тут может быть ваша реклама.

    Joined:
    30 Jul 2005
    Messages:
    1,182
    Likes Received:
    399
    Reputations:
    479
    я не про твой способ говорил а про свой, где я указал что простого magic quotes on будет достаточно с обрамленныеми параметрами. Если числа не обрамлять, тогда инъекция возможна.
     
  4. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    а если тебе попадется нормально настроенный хостинг? или с новой версией пхп(в ближайшем будущем)?

    Что, переписывать будешь?
     
  5. k1b0rg

    k1b0rg Тут может быть ваша реклама.

    Joined:
    30 Jul 2005
    Messages:
    1,182
    Likes Received:
    399
    Reputations:
    479
    ini_set();

    Я сомневаюсь, что это будет в ближайшем. Ну 2-3 хостера поставят новую версию, остальные врядли.

    А хз что придется при новой версии. Сейф-мод улетает. глобальные переменные тоже...вроде новые классы появляются
    Так что некоторые куски кода все таки придется переписывать...и это факт. Вобщем когда выйдет, тогда и будем смотреть)
     
  6. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    С каждым нерезусовым словом в топе согласен :d
     
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    k1b0rg, воот: у тебя каждое неправильное решение/костыль тащит за собой еше гору костылей, и они нарастают как снежный ком.

    А теперь посмотри на альтернативу(которая, кстати легче): писать правильно.
     
  8. GHostly_FOX

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

    Joined:
    4 Jan 2007
    Messages:
    34
    Likes Received:
    15
    Reputations:
    0
    Почему же нет?!
    Данный код позволяет мне получать чистые данные, на моем сайте в основном передаются только числа и текст... все остальное лишнее и я это убираю...
     
  9. blaga

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

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    потому что вместо 10 строчек можно обойтись одной.
     
  10. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    blaga. Нет не по этому. У него совсем неправильно.

    GHostly_FOX, данные у тебя не "чистые", как ты выразился, а испорченные. Теряем информацию при твоей "обработке".
     
  11. k1b0rg

    k1b0rg Тут может быть ваша реклама.

    Joined:
    30 Jul 2005
    Messages:
    1,182
    Likes Received:
    399
    Reputations:
    479
    int и intval() ограничены -2147483648 до 2147483648

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




    $id=is_numeric($_GET['id'])?$_GET['id']:0;

    тебя опять эта запись не устроит? )) is_numeric возьмет любое число)
     
    #31 k1b0rg, 12 Jan 2007
    Last edited: 12 Jan 2007
  12. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    k1b0rg, спасибо, посмеялся.

    А теперь немного подумай. Головой.
    Предположим, в движке обрабатываем ее как:
    1) ...как строку. Тогда причем int/intval() ?
    2) ...как число. Тогда туда и не должны попасть такие значения, а int/intval() обрежет только неправильные.
     
  13. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    nerezus молодца! реальн клево отписал! я даж посмеялся! хоть не впадлу читать было, т.к. не много)))

    а ваше я обычно все параметры передоваемые в запрос беру в ' ' а в самих параметрах экранирую ' и всегото!))
     
  14. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    ну дык так и надо делать правильно.
    mysql_escape_string поможет правильно передать любую строку в базу данных, а intval поможет передать число
     
  15. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    а не прощи ли сделать
    PHP:
     $str=str_replace("'","\'",$str);
     
    1 person likes this.
  16. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Конечно нет.
    запрос можно испортить.
    А эта функция экранирует еще и другие символы.
     
  17. p-range

    p-range Elder - Старейшина

    Joined:
    5 Feb 2006
    Messages:
    137
    Likes Received:
    145
    Reputations:
    118
    Я уже писал в подобной теме. Зачем создавать громоздкие функции для экранирования запрещенных символов, если все уже давно придумано за нас.

    вот пример безопасного кода:
    Code:
    <?php
    $val = (int)$_GET['val'];
    $val = mysql_escape_string($val);
    $q = mysql_query("SELECT id,name,etc FROM table WHERE val = '$val'");
    if (!$q)
    {
    	echo '<br>Неверное значение переменной $val';
    }
    	else
    {
    while ($a = mysql_fetch_array($q))
    {
    	$id = $a['id'];
    	$name = $a['name'];
    	$etc = $a['etc'];
    	$name = htmlspecialchars($name);
    	$etc = htmlspecialchars($etc);
    	// вывод результата
    }
    }
    ?>
    вот.
     
  18. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Почти верно.
    Почему почти?
    $val = isset($_GET['val']) ? (int)$_GET['val'] : 0;
     
  19. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    от инекции да. все верно.
    >>но это не секурити-дырка.
    бебе от инекции да, но секурити;) тк можно получить раскрытие пути. чем не бага.
     
    2 people like this.
  20. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    ZaCo, а если у меня еррор_репортенг по нулям? :)