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

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

  1. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    -=Zhenek=- насчет intval - ложь и провокация или пруфлинк с примером кода, когда intval вернет True - то есть булево значение.

    intval возвращает целочисленное значение, причем если строка с произвольными данными - то возвращается число идущее в начале строки. Например
    PHP:
    $a '1234asdasdasdasd'
    var_dump(intval($a)); // вернет int(1234)
    $b 'asdsa1234asdasds';
    var_dump(intval($b)); // вернет int(0)
    ByGreez тему стоило закрыть если не после первого поста, то после 1-2 страницы. Но всегда найдутся люди, которые не поверят, что простое решение - самое эффективное, и постараются показать монструозную функцию, которая "спасет от всех проблем". Таких людей надо вовремя отлавливать и наставять на путь истинный, пока болезнь не распространилась
     
    _________________________
    #101 Gifts, 6 Aug 2010
    Last edited: 6 Aug 2010
  2. ByGreez

    ByGreez New Member

    Joined:
    28 Nov 2009
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
  3. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    я когда еще не знал про intval делал так: $_GET[id] += 0; При арифметических операциях php, как известно, отбрасывает "нецифры"
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    SHiNiGaMi и радовали хеккеров раскрытием путей. При передаче массива (http://localhost/?id[]=bang) получите:
    Code:
    Fatal error: Unsupported operand types in [путь]/index.php on line 5
     
    _________________________
  5. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Никогда не подумаю что в МОА такие люди. Этот код не защищаеть от SQL-inj.
    Представим что в эту функцию:
    PHP:
     $str=str_replace("'","\'",$str);
    Мы передадим строку:
    Code:
    \'
    Тогда что получиться? Кавычка экранируется и получается вот это:
    Code:
    \\'
    Тут мы видим что кавычка не за экранирована, поскольку \ стоящая перед ней экранирует \ стоящую после кавычки. Разумееться тут возникнут небольшие сложности, но SQL-inj остаёться возможно провести.

    И всё же посоветую конвертировать в htmlspecialchars до помещения в БД.
     
    1 person likes this.
  6. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    htmlspecialchars использовать нужно для защиты от XSS, а не от sql injection.
    И не до записи в базу (от чего объем увеличивается), а перед выводом пользователю.
    Читай еще раз первый пост:
    mysql_real_escape_string()
     
  7. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Ну это я имел ввиду немного для другого случая - просто админам иногда полезно разрешать HTML код, Перегонять ББ-коды в HTML при каждой загрузке странице тоже будет вести большую нагрузку на сервери т. .

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

    А функцию htmlspecialchars я имелл виду использовать не для защиты от sql-inj.
     
    #107 randman, 30 Apr 2011
    Last edited: 30 Apr 2011
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    XAMEHA со дня поста, который вы сейчас прокомментировали - прошло 3 года. Причем автору поста уже ответили что он не прав. Внимание вопрос - зачем вы это написали?

    Насчет htmlspecialchars первый пост:
     
    _________________________