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

    +133

    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
    <?php
    
    class InitVars {
    # Недопустимые слова в запросах
            var $deny_words = array("union","char","select","update","group","order","benchmark","null","/*","UNION","CHAR","SELECT","UPDATE","GROUP","ORDER","BENCHMARK","NULL",);
    
    function InitVars() {
    }
    
    # Метод конвентирует суперглобальные массивы $_POST, $_GET в перемнные
    # Например : $_GET['psw'] будет переобразовано в $psw с тем же значением
    function convertArray2Vars () {
    
            foreach($_GET as $_ind => $_val) {
                    global $$_ind;
                    if(is_array($$_ind)) $$_ind = htmlspecialchars(stripslashes($_val));
            }
    
            foreach($_POST as $_ind => $_val) {
                    global $$_ind;
                    if(is_array($$_ind)) $$_ind = htmlspecialchars(stripslashes($_val));
    
            }
    }
    
    # Метод проверяет $_GET и $_POST переменные на наличие опасных данных и SQL инъекций
    function checkVars() {
            //Проверка опасных данных.
            foreach($_GET as $_ind => $_val) {
                            $_GET[$_ind] = htmlspecialchars(stripslashes($_val));
    
                            $exp = explode(" ",$_GET[$_ind]);
                            foreach($exp as $ind => $val) {
                                    if(in_array($val,$this->deny_words)) $this->antihack("Послушайте, мои маленькие кул хацкеры... Несанкционированный доступ в БД карается лишением свободы на срок от 3-х до 5-ти лет. <br> Ваш ip адресс помечен. Вам ведь не нужны проблемы, правда?. ");
                            }
            }
    
            foreach($_POST as $_ind => $_val) {
                            $_POST[$_ind] = htmlspecialchars(stripslashes($_val));
    
                            $exp = explode(" ",$_POST[$_ind]);
                            foreach($exp as $ind => $val) {
                                    if(in_array($val,$this->deny_words)) $this->antihack("Послушайте, мои маленькие кул хацкеры... Несанкционированный доступ в БД карается лишением свободы на срок от 3-х до 5-ти лет. <br> Ваш ip адресс помечен. Вам ведь не нужны проблемы, правда?.");
                            }
            }
    
    }
    
    function antihack($msg) {
        echo "<font color='red'><b>Antihack error: </b></font>$msg<br>\n";
        die;
    }
    
    }
    
    
    
    ?>

    Защита от SQL инъекций.

    Запостил: Vasiliy, 09 Апреля 2012

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

    • > htmlspecialchars(stripslashes(
      что? он сказал stripslashes?? хацкеры довольно потирают ручки

      да и для htmlspecialchars рановато: $_GET и $_POST будут попорчены, а в беззащитный echo злобный хтмл может попасть другими способами.

      я уж молчу про глобальный $_ind, нигде не инициализированный, и вообще про глобалсы
      Ответить
    • > Ваш ip адресс помечен. Вам ведь не нужны проблемы, правда?
      Меня лично это просто убило.
      Ответить
      • потому что адресс с двумя сс? дык проверочное слово "адрессовать" )
        Ответить
        • нет сама стилистика текста. И тут пытаются угрожать подумалось мне.
          Ответить
          • Кстати, от некоторых категорий такая защита может быть даже эффективнее всяких htmlspecialchars...
            Ответить
    • Отличная ловля на пуганного.
      Ответить
    • Что-то не вижу приведения к одному регистру. MySql - скотина бездушная, ему и uNiOn покатит. А в качестве комментария можно использовать и --.
      Ответить
      • Автор видать забыл перечислить такие варианты в $deny_words для каждого слова
        Ответить
    • показать все, что скрытоvanished
      Ответить

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