Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Правильная фильтрация входящих данных

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
byfahrenheit
Отправлено: 27 Ноября, 2013 - 20:53:07
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Здравствуйте.
Сразу хочу попросить прощение за возможно самый глупый вопрос.
Работаю над одним проектом и для того, что бы быть уверенным в том, что все делаю правильно, хочу спросить совета на ранее стадии разработки, дабы далее не возникало сомнений.

Речь пойдет о правильная фильтрация входящих данных. Знаю, в сети много советов, много материалов, на практически в каждом из них авторы используют те способы фильтрации, к которым привыкли, несмотря на то, что некоторые из них устарели, или вовсе не годятся.

Вот, что у меня получилось:

CODE (html):
скопировать код в буфер обмена
  1. Текст, вводимый пользователем, должен быть безопасно вставлен в БД. Пользователь может использовать любые символы и при выводе его текста, он должен отображаться именно так, как его вел пользователь.
  2.  
  3. <i>Это не курсив</i> [b]никаких бб кодов[/b] "Кавычки должны оставаться кавычками' \ _ /


В результате обработки следующими функциями:
PHP:
скопировать код в буфер обмена
  1. $msg = $db->safesql($parse->process(convert_unicode(trim($params['msg']), $config['charset'])));


Получилось вот что:

Нажмите для увеличения


Скажите пожалуйста, все ли правильно я сделал?

(Отредактировано автором: 27 Ноября, 2013 - 20:55:10)

 
 Top
Мелкий Супермодератор
Отправлено: 27 Ноября, 2013 - 21:21:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




byfahrenheit пишет:
В результате обработки следующими функциями:

Вы понимаете, что это (кроме trim) пользовательские функции и мы понятий не имеем, что там происходит?

Препарированные запросы и htmlspecialchars на выводе. Всё. Это необходимый и достаточный набор для
byfahrenheit пишет:
должен отображаться именно так, как его вел пользователь.


-----
PostgreSQL DBA
 
 Top
byfahrenheit
Отправлено: 27 Ноября, 2013 - 21:24:42
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Спасибо.
Т.е. если слеш '\' не экранируется, ничего страшного?
 
 Top
Мелкий Супермодератор
Отправлено: 27 Ноября, 2013 - 21:40:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Вы понимаете, для чего выполняется экранирование?
И почему для того же HTML вывод, например, символа < делается не как \< (экранированным), а & lt; ? А почему для регулярки для поиска обычного тупого вопросительного знака, его надо экранировать?

Это всё нужно только для того, чтобы парсер мог из потока текста различать управляющий код от данных. У каждого языка могут быть свои управляющие символы и свои правила экранирования.
И есть специальные функции для многих случаев, позволяющие не вспоминать, что надо экранировать. json_encode не заставляет вас думать, что и как надо экранировать, preg_quote экранирует регулярку, htmlspecialchars - конвертирует вывод HTML так, чтобы парсер не считал это тегами; препарированные запросы (у каждой библиотеки если ещё и функция экранирования) - гарантируют передачу данных в SQL без искажений как данных так и логики.

Поэтому ваш вопрос, надо ли экранировать \, лишён смысла.


-----
PostgreSQL DBA
 
 Top
byfahrenheit
Отправлено: 27 Ноября, 2013 - 21:43:04
Post Id



Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Спасибо большое за ответ!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB