Здравствуйте уважаемые господа ! Хотел уточнить такой вопрос, с формы обратной связи приходят данные пост, нашел такую обработку: PHP: foreach($_POST as $key => $value) { //сначала делаем обработку, которая не испортит данные, //если их придется выводить в форму снова, при ошибке $value=trim($value); // убираем пробелы в начале и в конце переменной. if (get_magic_quotes_gpc()) $value = stripslashes($value); //убираем слеши, если надо $value=htmlspecialchars($value,ENT_QUOTES); //заменяем служебные символы HTML на эквиваленты $_POST[$key]=$value; //все изменения записываем в массив $_POST //дальше делаем изменения, которые пойдут только в файл, //а в форму их выводить не нужно. //echo $value."<br />"; $value=str_replace("\r","",$value); // заменяем все переводы строк //$value=str_replace("\n","<br>",$value); //на <br> $_POST[$key]=$value; //и присваиваем новые значения элементам массива $msg. } 1) такой обработки достаточно, для безопасной записи в базу данных обработаных данных $_POST ? 2) получается можно заинклудить такую проверку (на всякий случай) на всех страницах чтобы кудабы данные не пришли они обрабатывались, чтобы не заморачиватся с обработкой каждой формы (когда их много), или я неправ? Зараннее спасибо. (Ps: просьба непинать если подобный вопрос был уже, пользовался поиском - ответа не нашел.)
данная проверка подходит только для текстовой информации. иногда это может привести к нежелательным результатам.
Тогда вместо 7 строки может написать: PHP: $value= strip_tags($value, '<br>'); смысл в том чтобы не писать обработчика данных для каждой формы, ачтобы данные сами проверялись и чистились от всего лишнего
PHP HTML теги, JS, SQL запросы и тд - то есть чтобы все потенциально опасно вырезалось (если отправляет хакер или злой конкурент), а само сообщение не страдало при этом (если отправляет обычный пользователь)
У меня оканчательный вариант получился такой: PHP: if ($_SERVER['REQUEST_METHOD']=='POST') { //обрабатываем полученные переменные. foreach($_POST as $key => $value) { $value=trim($value); // убираем пробелы в начале и в конце переменной. $value= strip_tags($value); // убираем теги if (get_magic_quotes_gpc()) $value = stripslashes($value); //убираем слеши, если надо $value=htmlspecialchars($value,ENT_QUOTES); //заменяем служебные символы HTML на эквиваленты $value=str_replace("\r","",$value); // заменяем все переводы строк $value=str_replace("\n","<br>",$value); //на <br> $_POST[$key]=$value; //и присваиваем новые значения элементам массива _POST[$key]. } } Вроде работает Есть ли тут опасность ?
1) насколько коряво, примерчик меня бы сильно убедил, я чесно говоря не заметил корявости, единственное что заметил если поставить <?php то с этого места вырезает все, если убрать - записывается в базу и выводится пхп код, но не выполняется 2) то есть $value= strip_tags($value); - не нужно 3) \r\n не совсем понял, \n заменить на \r\n - а в чем разница? 4) Одинарная ковычка не фильтруется - чем это чревато? - вроде работает все 5) Имхо: У меня GET массив фильтруется жестче, чем POST... - можно примерчик, если не сильно затруднит...