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

    0

    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
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    class SqlXssFilter {
        private static $sql_keywords = array(
            'ADD',
            'ADD CONSTRAINT',
            'ALTER',
            'ALTER COLUMN',
            'ALTER TABLE',
            'ALL',
            'AND',
            'ANY',
            'AS',
            'ASC',
            'BACKUP DATABASE',
            'BETWEEN',
            'CASE',
            'CHECK',
            'COLUMN'
            'CONSTRAINT',
            'CREATE',
            'CREATE DATABASE',
            'CREATE INDEX',
            'CREATE OR REPLACE VIEW',
            'CREATE TABLE',
            'CREATE PROCEDURE',
            'CREATE UNIQUE INDEX',
            'CREATE VIEW',
            'DATABASE',
            'DEFAULT',
            'DELETE',
            'DESC',
            'DISTINCT',
            'DROP',
            'DROP COLUMN',
            'DROP CONSTRAINT',
            'DROP DATABASE',
            'DROP DEFAULT',
            'DROP INDEX',
            'DROP TABLE',
            'DROP VIEW',
            'EXEC',
            'EXISTS',
            'FOREIGN KEY',
            'FROM',
            'FULL OUTER JOIN',
            'GROUP BY',
            'HAVING',
            'IN',
            'INDEX',
            'INNER JOIN',
            'INSERT INTO',
            'INSERT INTO SELECT',
            'IS NULL',
            'IS NOT NULL',
            'JOIN',
            'LEFT JOIN',
            'LIKE',
            'LIMIT',
            'NOT',
            'NOT NULL',
            'OR',
            'ORDER BY',
            'OUTER JOIN',
            'PRIMARY KEY',
            'PROCEDURE',
            'RIGHT JOIN',
            'ROWNUM',
            'SELECT',
            'SELECT DISTINCT',
            'SELECT INTO',
            'SELECT TOP',
            'SET',
            'TABLE',
            'TOP',
            'TRUNCATE TABLE',
            'UNION',
            'UNION ALL',
            'UNIQUE',
            'UPDATE',
            'VALUES',
            'VIEW',
            'WHERE'
        );
        // XSS and SQL-inject filter 
        public static function filterInputData(&$str) {
            // remove html tags
            $res = strip_tags($str);
            $res = str_replace(self::sql_keywords, "", $str);
            return $res;
        }
    }

    Сойдет.

    Запостил: OlegUP, 12 Апреля 2019

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

    • public static function filterInputData(&$db_link, &$str) {
          // remove html tags
          $res = strip_tags($str);
          $res = mysqli_real_escape_string($db_link, $res);
          $res = str_replace(self::$sql_keywords, "", $res);
          return $res;
      }
      Ответить
    • if (str.contains("--"))
      die "Это кто это тут у нас хакерничает?"
      Ответить
    • Короче, по-английски лучше вообще не писа́ть.

      Хотя... функция фильтрует только слова, написанные капсом? Т. е. drop table `users` пройдёт?
      Ответить
    • Я, AHCKuJlbHblu_nemyx, находясь в здравом уме и твердой памяти, торжественно заявляю:
      Какой анскилл )))
      Ответить
    • https://pastecode.xyz/view/06f27729

      Кому то может пригодится.
      Ответить
      • Спасибо, выкатил в прод, начальник похвалил за создание безопасного сайта!
        Ответить
      • >Если search и replace - массивы, то str_ireplace() использует каждое значение из соответствующего массива для поиска и замены в subject. Если в массиве replace меньше элементов, чем в search, в качестве строки замены для оставшихся значений будет использована пустая строка. Если search - массив, а replace - строка, то эта строка замены будет использована для каждого элемента массива search.

        А в питоне такого нет. Какой багор :)
        Ответить
        • Поэтому я за "PHP".
          Ответить
        • А в 'J' все глаголы по умолчанию работают над масссивами, именно поэтому я за 'J':
          a =: noun define
                 'ADD', 'ADD CONSTRAINT', 'ALTER', 'ALTER COLUMN', 'ALTER TABLE', 'ALL', 'AND', 'ANY', 'AS', 'ASC', 'BACKUP DATABASE', 'BETWEEN', 'CASE', 'CHECK', 'COLUMN', 'CONSTRAINT', 'CREATE', 'CREATE DATABASE', 'CREATE INDEX', 'CREATE OR REPLACE VIEW', 'CREATE TABLE', 'CREATE PROCEDURE', 'CREATE UNIQUE INDEX', 'CREATE VIEW', 'DATABASE', 'DEFAULT', 'DELETE', 'DESC', 'DISTINCT', 'DROP', 'DROP COLUMN', 'DROP CONSTRAINT', 'DROP DATABASE', 'DROP DEFAULT', 'DROP INDEX', 'DROP TABLE', 'DROP VIEW', 'EXEC', 'EXISTS', 'FOREIGN KEY', 'FROM', 'FULL OUTER JOIN', 'GROUP BY', 'HAVING', 'IN', 'INDEX', 'INNER JOIN', 'INSERT INTO', 'INSERT INTO SELECT', 'IS NULL', 'IS NOT NULL', 'JOIN', 'LEFT JOIN', 'LIKE', 'LIMIT', 'NOT', 'NOT NULL', 'OR', 'ORDER BY', 'OUTER JOIN', 'PRIMARY KEY', 'PROCEDURE', 'RIGHT JOIN', 'ROWNUM', 'SELECT', 'SELECT DISTINCT', 'SELECT INTO', 'SELECT TOP', 'SET', 'TABLE', 'TOP', 'TRUNCATE TABLE', 'UNION', 'UNION ALL', 'UNIQUE', 'UPDATE', 'VALUES', 'VIEW', 'WHERE'
             )
             NB. rplc принимает массив пар
             a =: a: ,~"0 do a rplc ',' ; ';'  ;  LF ; ''
             'VASYA_PUPKIN' rplc a
          VYA_PUPK
             (rplc&a)each 'VASYA PUPKIN' ; 'ALTER MANN' ; 'I WANT TO BE WITH YOU ALL OF THE TIME' ; 'ALL DAY AND ALL OF THE NIGHT'
          ┌────────┬─────┬──────────────────────────────────┬───────────────────┐
          │VYA PUPK│ MANN│I WANT TO BE WITH YOU  OF THE TIME│ DAY   OF THE NIGHT│
          └────────┴─────┴──────────────────────────────────┴───────────────────┘
          Лол,я не нашёл в стандартной библиотеке никаких функций для работы с регистром. Я даже не нашёл как заставить regex игнорировать регистр. Какой анскилл )))
          Ответить
          • Это такие таблички сам 'J' рисует?
            Ответить
            • Да, так 'J' отображает коробки. Коробка может хранить в себе данные любого типа. А в массивах все элементы должны быть одинакового типа, и чтобы хранить в одном массиве значения разных типов (в частности строки разной длины), их нужно разложить по коробочкам, и хранить массив коробок:
              < 42 NB. монада < кладёт свой аргумент в коробку
              ┌──┐
              │42│
              └──┘
                 'hui' ; 42 ; 2.65j2.65 ; i.3 3 NB. диада ; кладёт свой правый аргумент в коробку, если он не коробка, кладёт левый в коробку, затем соединяет их в массив
              ┌───┬──┬─────────┬─────┐
              │hui│42│2.65j2.65│0 1 2│
              │   │  │         │3 4 5│
              │   │  │         │6 7 8│
              └───┴──┴─────────┴─────┘
              Ответить
        • Можно простенький интерпретатор написать используя только эту функцию.
          Ответить

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