israel_rider
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору На сайте, над которым я сейчас работаю, определён базовый класс tep, в функции – конструкторе которой присутствует только одна строчка: Код: var $AllRequest; function tep() { $this->AllRequest = $_REQUEST; } | И соответственно, все данные из массива $_REQUEST получают так: Код: $bar = $tep->AllRequest['foo']; | то есть…. напрямую. И подставляются они потом куда угодно, в том числе и в SQL запросы. То есть, сайт напоминает дом с открытыми дверями, заходи – не хочу. О чём думали разработчики сайта, непонятно. Что бы не перелопачивать весь сайт, пользуюсь тем, что существует базовый класс, и все обращения к $_REQUEST идут через него, я переписал его конструктор. В него я засунул функцию, проверяющую данные, найденную мной на другом сайте, над которым я работал. Получилось вот что: Код: var $AllRequest; function tep() { foreach($_REQUEST as $key => $val){ if ((!isset($val)) || ($val == "")) $this->AllRequest[$key] = ""; else { $strValue = htmlspecialchars(strip_tags(trim($val),'<b><i><u><br>')); $arrWords = array("DROP", "TABLE", "JOIN", "SELECT", "INSERT", "UPDATE", "DELETE", "WHERE", "UNION", "FROM", "LIKE", "CONCAT", "LOAD_FILE", "BENCHMARK"); foreach($arrWords as $idx=>$word){ $count = substr_count(strtoupper($strValue), $word); $j=0; for($i=0;$i<$count;$i++){ $found = stripos($strValue, $word, $j); if ($found!==false){ //echo $found."-".substr($strValue, $found, strlen($word))."-".$j."<br>"; $strValue = substr($strValue, 0, $found+strlen($word))."®". substr($strValue, $found+strlen($word)); $j = $found + strlen($word); } } } $strValue = str_replace("®®", "®", $strValue); $strValue = str_replace("'", "'", $strValue); //if($p_param == 1) $strValue = ereg_replace("[^0-9]", "", round($strValue)); $this->AllRequest[$key] = $strValue; /**/ } } } | Сейчас я тестирую полученное. Пока вроде работает…. Вообще то странно… Почему разработчики этой функции позабыли про mysql_real_escape_string()? Ведь данные из $_REQUEST идут и в SQL запросы тоже… Вобщем… вопрос то очевиден. Насколько надёжно это моё творение? Действительно ли оно закрывает дыры? Добавлено: И ещё вопрос. Не слишком ли тяжёлым получился код? Ведь что получается - проверяется весь массив $_REQUEST каждый раз, когда загружается страница. |