Безопасность - нужен совет

Печать RSS
66

Автор
KinG`уренок
0
Есть класс защиты от SQL inj + проверка $_GET и $_POST.
Прошу прокомментировать, будет ли данный код выполнять свою функцию и насколько такой класс безопасен.
class InitVars {
# Недопустимые слова в запросахINSERT
        var $deny_words = array('UNION','CHAR','INSERT','DELETE','SELECT','UPDATE','GROUP','ORDER','BENCHMARK','union','char','insert','delete','select','update','group','order','benchmark');
# Метод конвентирует суперглобальные массивы $_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));

        }
}

Добавлено через 00:17 сек.
# Метод проверяет $_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("Запрещено!Доступ закрыт!<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("Запрещено!Доступ закрыт!<br> Ваш ip адресс помечен!");
                        }
        }

}

function antihack($msg) {
    echo '<font color="red"><b>Antihack error: </b></font>'.$msg.'<br>\n';
    die;
}

}

2000 лет д.н.э.
0
это уже наверное сотый раз на этом форуме))
нет, плохая защита
фильтруется все подряд, что надо и не надо,
не учитывается тип данных
фильтровать надо на месте
Автор
KinG`уренок
0
2. ramzes, маэстро, последствия какие такой защиты?
Т.е вовсе небезопасная функция?

2000 лет д.н.э.
0
Нифигасе сказал я се (18 Июня 2011 / 19:46)
2. ramzes, маэстро, последствия какие такой защиты?
Т.е вовсе небезопасная функция?
смысл в этой защите?
у тебя переменна номера страниц будет как строка фильтроваться
потом еще раз придется ее как число проверять
гет вообще имеет много данных которые фильровать не за чем т.к. они не используются.
+ несколько циклов, и в них вызов функций фильтации, все это дает нагрузку, а по факту кпд стремится к нулюsmile
много раз обсуждали подобные заходыsmile
K

Транклюкаторщик
0
3. Нифигасе сказал я се, идиотизм а не защита.
фильтровать надо все, что получаем от юзера, согласно тому, что мы хотим получить от него, и что можем ему позволить.
в админке например я разрешаю в редактировании счетчиков итп html теги, а для этого мне не нужно переводить их в html эквиваленты. а с такой защитой мне придется крутить педали велосипеда в обратную сторону.
Изменил: KOZZ (18.06.2011 / 19:53)
Автор
KinG`уренок
0
5. eGo Свободу Пандам, это класс защиты онлайн игры, поэтому мне это не критично.
Какую функцию лучше всего использовать повсевместно ?
K

Транклюкаторщик
0
6. Нифигасе сказал я се, да ничего не нужно использовать повсеместно вообще.
фильтровать только на месте, только то, что нужно, и именно так, как я описал выше

Добавлено через 00:30 сек.
это класс защиты онлайн игры, поэтому мне это не критично
лишняя и ненужная нагрузка разве не критична для онлайн игры?
Изменил: KOZZ (18.06.2011 / 19:54)
Автор
KinG`уренок
0
7. eGo Свободу Пандам, на месте - какой функцей, дабы не получить SQL inj?

Добавлено через 00:24 сек.
7. eGo Свободу Пандам, соглашусь, что критична, но т.к код не мой - вот и спрашиваю
K

Транклюкаторщик
0
8. Нифигасе сказал я се, для POST данных что - то в таком роде:
<?
# защита входных данных (для юзеров)
function check_in($var){
return mysql_real_escape_string(trim(htmlentities($var, ENT_QUOTES, 'UTF-8')));
}
?>

2000 лет д.н.э.
0
9. eGo Свободу Пандам, и intval() , (int)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск