"PHP" / Говнокод #25536 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 OlegUP, (Updated )

Комментарии (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;
    }
    Ответить
  • Короче, по-английски лучше вообще не писа́ть.

    Хотя... функция фильтрует только слова, написанные капсом? Т. е. drop table `users` пройдёт?
    Ответить
  • Я, AHCKuJlbHblu_nemyx, находясь в здравом уме и твердой памяти, торжественно заявляю:
    Какой анскилл )))
    Ответить
    • Спасибо, выкатил в прод, начальник похвалил за создание безопасного сайта!
      Ответить
    • >Если search и replace - массивы, то str_ireplace() использует каждое значение из соответствующего массива для поиска и замены в subject. Если в массиве replace меньше элементов, чем в search, в качестве строки замены для оставшихся значений будет использована пустая строка. Если search - массив, а replace - строка, то эта строка замены будет использована для каждого элемента массива search.

      А в питоне такого нет. Какой багор 🙂
      Ответить
      • А в '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' отображает коробки. Коробка может хранить в себе данные любого типа. А в массивах все элементы должны быть одинакового типа, и чтобы хранить в одном массиве значения разных типов (в частности строки разной длины), их нужно разложить по коробочкам, и хранить массив коробок:
            < 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│
            └───┴──┴─────────┴─────┘
            Ответить
      • Можно простенький интерпретатор написать используя только эту функцию.
        Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8