1. PHP / Говнокод #26425

    +5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    function fix_hacker_strings($str){
            $s=$str;
            $s=str_replace('/*', 'xx', $s);
            $s=str_replace('*/', 'xx', $s);
            $s=str_replace('../', 'xxx', $s);
            $s=str_replace('..\\', 'xxx', $s);
            $s=str_ireplace('file:', 'xxxxx', $s);
            $s=str_ireplace(':$', 'xx', $s);
            $s=str_ireplace('http:', 'xxxx', $s);
            $s=str_ireplace('https:', 'xxxxx', $s);
            $s=str_ireplace('script', 'xxxxxx', $s);
            $s=str_ireplace('delete', 'xxxxxx', $s);
            $s=str_ireplace('drop', 'xxxx', $s);
            $s=str_ireplace('select', 'xxxxxx', $s);
            $s=str_ireplace('update', 'xxxxxx', $s);
            $s=str_ireplace('replace', 'xxxxxxx', $s);
            $s=str_ireplace('/etc/', '/xxx/', $s);
            $s=str_ireplace('/var/', '/xxx/', $s);
            $s=str_ireplace('/root/', '/xxxx/', $s);
            $s=str_ireplace('/bin/', '/xxx/', $s);
            $s=str_ireplace('/usr/', '/xxx/', $s);
            $s=str_ireplace('/sys/', '/xxx/', $s);
            $s=str_ireplace('/sbin/', '/xxxx/', $s);        
            $s=str_ireplace('/proc/', '/xxxx/', $s);
            $s=str_ireplace('/boot/', '/xxxx/', $s);
            $s=str_ireplace('mysql', 'xxxxx', $s); 
            return $s;
    }

    обработка user input

    Запостил: dim1r, 08 Февраля 2020

    Комментарии (78) RSS

    • показать все, что скрытоvanished
      Ответить
    • кто отгадает зачем
      $s=str_ireplace(':$', 'xx', $s);

      ?
      Ответить
    • Именно поэтому я за Java Script
      Ответить
      • Никто не гарантирует, что если строка попала в систему, то она никогда не навредит. Есть же всякие offline скрипты, которые будут прочесывать базу данных. Кто-то может через shell это обрабатывать, кто-то через awk и тд.
        Ответить
        • Именно поэтому я за «C».
          Ответить
          • Угу. В си настолько хуёво со строками, что их проще безопасно передать, чем поклеить из них дырявый запрос или командную строку... В остальных языках обычно наоборот.
            Ответить
            • А ещё в «C» есть «printf», который сам по себе полный по Тьюрингу (в «POSIX» версии). Именно поэтому…
              https://github.com/HexHive/printbf
              Ответить
              • Ничего не понимаю. Что такое %1d, понятно. А что за выражения с баксами, да ещё с каким-то hn?
                Ответить
    • Вот ублюдок, создал лишнюю переменную $s, мог бы $str использовать, сейчас у крестоблядей сгорит жопа от лишнего бита памяти
      Ответить
    • > delete, drop select, update

      insert забыл!
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Удивительно, но replace автор учёл.
          Ответить
        • Кстати, а что такое replace?
          Ответить
          • Это типа update, но работает, как последовательные delete и insert:

            https://dev.mysql.com/doc/refman/5.7/en/replace.html
            Ответить
          • P.S. Чтобы не было совсем скучно, в «MySQL» есть ещё «INSERT ... ON DUPLICATE KEY UPDATE». Приходится вспоминать, чем оно отличается от REPLACE.
            Ответить
            • А чем оно отличается от replace?
              Ответить
              • Я не особо соображаю в этом деле, но рискну предположить, что replace заменяет существующие - не сделает ничего, если питушня уже есть, а insert в любом случае изменит отношение.
                Ответить
              • REPLACE:
                1. Пытается добавить строку через INSERT.
                2. В случае конфликта уникального индекса делает DELETE, а потом INSERT.

                INSERT ... ON DUPLICATE KEY UPDATE:
                1. Пытается добавить строку через INSERT.
                2. В случае конфликта уникального индекса делает UPDATE.

                Разница проявится, если есть колонки с дефолтным значением: оператор REPLACE вставит дефолтное значение у неперечисленных колонок, потому что он сначала удаляет, потом добавляет, а INSERT ... ON DUPLICATE KEY UPDATE сохранит старое значение неперечисленных колонок.

                Ещё там какая-то питушня с автоинкрементами, с констрейнтами и с правами доступа.
                Ответить
        • SET @query = FROM_BASE64('c2VsZWN0ICogZnJvbSB1c2Vycw==');
          PREPARE stmt1 FROM @query; 
          EXECUTE stmt1;


          это да
          Ответить
          • Почти все функции, кроме mysqli_multi_query, не пропускают несколько выражений за один вызов.
            Ответить
            • Именно поэтому я за "PHP"
              Ответить
            • Авто делает не специфичную для «PHP» функцию, а универсальный санитайзер строк:
              >>> Есть же всякие offline скрипты, которые будут прочесывать базу данных. Кто-то может через shell это обрабатывать, кто-то через awk и тд.
              Пожелаем ему удачи!
              Ответить
          • $s=str_ireplace('base64', xxxxxx', $s);

            Исправил, теперь всё безопасно.
            Ответить

    Добавить комментарий