ФорумПрограммированиеPHP для идиотов → php5 фильтрация данных

php5 фильтрация данных

  • ТырБыр

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 8 февраля 2012 г. 8:22

    Здравствуйте. Помимо старых знаний, я прочитал много про фильтрацию данных в пятой версии. И честно говоря, так и не понял, есть ли оптимальный вариант.
    Все понятно с автоматизаторами (маджикквуотерами, слешами и прочимо глобалазами) я их не поддерживаю и понимаю что контролировать надо все самому.

    И все-таки. Как фильтровать пользовательский ввод. Какие методы (помимо учета включеных автокавычек и соответствующих анти действий) нужно использовать, насколько и какие самостоятельные конструкции надо городить над, например, filter_input?

    Извините, если я непонятен, я более чем новичок. Хочется понять принцип определения достаточности.
  • ТырБыр

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 8 февраля 2012 г. 8:27, спустя 5 минут 23 секунды

    Поясню, вопрос родился из-за просмотра большого количества самостоятельных решений
  • kostyl

    Сообщения: 5201 Репутация: N Группа: Джедаи

    Spritz 8 февраля 2012 г. 9:18, спустя 50 минут 48 секунд

    какая разница, главное получить из одного другое или отказаться получать если всё плохо на столько
  • lolcat

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 8 февраля 2012 г. 11:40, спустя 2 часа 22 минуты 18 секунд

    Принцип простой. Для чего фильтруют данные? Из соображений безопасности. Чтобы не впихнули html/js - раз, чтобы не провели инъекцию - два.
    Первое решается strip tags или чем-то подобным. А еще можно использовать текстовые парсеры, движки разметки и т.п. В моей имиджбордочке html фильтруется при помощи texy.
    Вторая проблема актуальна только для тех, кто ДО СИХ ПОР пользуется функциями работы с БД навроде mysql_query(). Не надо выполнять запросы напрямую. Пользуйтесь подготовленными выражениями. И не будет этой проблемы. Пусть хоть обосрутся, подсовывая кавычки.

    Еще можно преобразовывать символы в их мнемоники или html-сущности, обязательно, если используется xhtml.

    В общем, советую читать документацию, в ней все ясно и понятно изложено. Pro-tip: читать комментарии к документации, разбираться в приведенных примерах.
  • ТырБыр

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 8 февраля 2012 г. 12:25, спустя 44 минуты 50 секунд

    Большое спасибо. По видимому я столкнулся с такой проблемой, что без возможности отследить историю появления, сейчас мне доступны ВСЕ наработки и примеры за всю историю (хотябы на официальном сайте), поэтому и сложно понять, зачем они есть при наличие все тогоже filter_var, которое вы повсей видимости не используете? Ведь смысл еще в том, что не хочется учить то, от чего откажутся, например, в 6ой версии. Немного подожду, попробую, вскоре постараюсь быть более конкретным в примерах.


  • lolcat

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 8 февраля 2012 г. 12:35, спустя 10 минут 7 секунд

    Незначительным мелочам внимание придаешь. Надо от задачи идти.
  • kostyl

    Сообщения: 5201 Репутация: N Группа: Джедаи

    Spritz 8 февраля 2012 г. 14:04, спустя 1 час 28 минут 16 секунд

    ТырБыр, надо понять принципы, а не искать решение, которые каждый на свой вкус делает, просто зная принципы…
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 9 февраля 2012 г. 1:59, спустя 11 часов 54 минуты 57 секунд

    Пусть хоть обосрутся, подсовывая кавычки.

    представил как это…
    не всё полезно, что в swap полезло
  • ТырБыр

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 11 февраля 2012 г. 12:39, спустя 2 дня 10 часов 40 минут

    Спасибо, я принципов и искал. Смутили эти новые теги.

    Вопрос в догонку. Правильно ли я понимаю что такие как $_POST экранируются в любом случае и не допускают отключения чтобы их не "того"?
  • kostyl

    Сообщения: 5201 Репутация: N Группа: Джедаи

    Spritz 11 февраля 2012 г. 12:56, спустя 16 минут 6 секунд

    чего того, кого их?
  • ТырБыр

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 11 февраля 2012 г. 13:14, спустя 18 минут 30 секунд

    Ну как чего … того!

    Я вроде бы все меджики отключил, а переменные $_POST всеравно при изъятии экранированы.
  • kostyl

    Сообщения: 5201 Репутация: N Группа: Джедаи

    Spritz 12 февраля 2012 г. 8:21, спустя 19 часов 7 минут 12 секунд

    значит не все отключил или старые данные остались
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 12 февраля 2012 г. 10:12, спустя 1 час 51 минуту 3 секунды

    ТырБыр, phpinfo() покажи
    не всё полезно, что в swap полезло
  • ТырБыр

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 26 февраля 2012 г. 11:35, спустя 14 дней 1 час 22 минуты

    Извините, насчет экранирования сЛошил. (перепутал локальный и удаленный хост).

    Зато я видимо понял, что ходел спросить. ))) Правильно ли я понимаю что:

    1) хранение в GPC массивах опасного содержимого допускается и не может навредить, покуда не начинаешь его выводить или делать его частью запроса и т.п.
    (Ведь тот же $_POST наполняется пользователем через форму, и кроме magic_quotes нет способа на это содержимое воздействовать на шаге ввода. Следовательно, этот magic сделан для защиты от необдуманного вывода, как средство, чтобы вместо реальной бяки получился мусор.)
    2) экранирование, а точнее конкретные действия зависят от конкретной ситуации, и не имеет значения (помимо производительности) как ты его делаешь, addslashes или даже str_replace("<", "<", $text) или еще как.
  • kostyl

    Сообщения: 5201 Репутация: N Группа: Джедаи

    Spritz 26 февраля 2012 г. 11:59, спустя 23 минуты 56 секунд

    Маджик квотс это старое гавно, как и addslashes, которое при нём делается.
    Ты можешь либо использовать данные полученные от ползователя, либо не использовать. Например, если ты просишь пользователя ввести одни цыфры, а он вводит буквы - пошел он нахуй сразу, даже не надо обрабатывать эти данные.
    Если он вводит всё как ты просишь и у тебя теоретически нет претензий, тогда ты просто вставляешь это в БД, используя механизмы защиты драйверов БД (типа mysqli->escape (или как там…), pdo->prepare->execute) ), а если выводишь данные будь то из базы или нет, то преобразуешь их в html-сущьности как бы (htmlentities htmlspecialchars).
    Вот и всё.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!