Является ли filter_var хорошим способом?

На Ubuntu просто выполните

sudo apt-get install php5-mysql
37
задан Ross 18 March 2009 в 17:29
поделиться

4 ответа

Для защиты от Внедрения SQL используют подготовленные операторы, если это возможно. В противном случае используйте mysql_real_escape_string для строк, (международного) кастинга или intval () для целых чисел, (плавания) или floatval () для плаваний и addcslashes ($input, '% _'), чтобы строки использовались в операторах LIKE. Вещи становятся еще более сложными при попытке выйти из строк, которые будут использоваться в операторах RLIKE.

Для фильтрации содержимого HTML, лучшим был бы strip_tags (без передающего $allowable_tags), но... Вы не можете любить/хотеть его, в этом случае наиболее доступное решение:

$escaped = htmlspecialchars($input, ENT_QUOTES, $your_charset);

А более надежное решение состояло бы в том, чтобы пользоваться библиотекой как Очиститель HTML

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

24
ответ дан Ionuț G. Stan 18 March 2009 в 17:29
поделиться

Это действительно зависит, что Вы пытаетесь сделать, я не могу действительно ответить, не зная специфических особенностей. Возможные фильтры и их эффекты перечислены здесь: Типы фильтров

1
ответ дан Chad Birch 18 March 2009 в 17:29
поделиться

Вы корректируетесь filter_var при помощи его с FILTER_* константы . Это кажется, что Вы ищете санитизация из данных (на самом деле корректирующий данные для создания этого безопасным*), а не проверка (проверка, что данные безопасны).

Различные фильтры могут помочь с различными задачами. В то время как mysql_real_escape_string хорошо для очистки данных для предотвращения Внедрения SQL, это бесполезно для вывода данных, которые могут содержать HTML. Вот несколько фильтров, которые я использовал бы для повседневных задач:

  • FILTER_SANITIZE_SPECIAL_CHARS - полезный для отображения (не удаляющий) код HTML, предотвращая нападения на XSS и преобразовывая символы в объекты HTML.
  • FILTER_SANITIZE_STRING с STRIP_LOW/HIGH флаги - на самом деле удаляют HTML (см. strip_tags).
  • FILTER_SANITIZE_URL - делает URL safe*.
  • FILTER_SANITIZE_EMAIL - делает адреса электронной почты безопасными, хотя я предпочел бы использовать, это - кузен проверки прежде, чем сохранить адрес.

* я использую безопасный свободно, я имею мнение, что Вы никогда не можете быть слишком уверены.

18
ответ дан Adriano Varoli Piazza 18 March 2009 в 17:29
поделиться
  • 1
    Нет ничего объектно-ориентированного об этом; it' s главным образом о Java' s статический контроль типов и слабые дженерики. JavaScript объектно-ориентирован и doesn' t нужен другой класс для каждого кортежа. – Marko Topolnik 17 May 2013 в 12:47

Только на основе некоторого незначительного тестирования, я пришел к выводу это filter_varконстанты не защищены.

Например:

filter_var('a@b-.c', FILTER_VALIDATE_EMAIL); // valid
filter_var('http://.', FILTER_VALIDATE_URL); // valid
filter_var('a@b-.c', FILTER_SANITIZE_EMAIL); // a@b-.c
filter_var('http://.', FILTER_SANITIZE_URL); // http://.

Это явно недопустимые значения, но передача filter_varконстанты. Не доверять filter_var.

-5
ответ дан 27 November 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: