Аккуратный способ очистить переменные URL-адреса?

Мне интересно, есть ли быстрая и простая функция для очистки переменных get в моем URL-адресе, прежде чем я буду работать с ними. (Или $ _POST, если подумать ...)

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
7 676
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Я использую PHP входные фильтры и функцию urlencode.

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

Трудно рекомендовать одно решение, потому что природа входных переменных очень ... переменная. :-)

Идея очистки ввода никогда не имела для меня особого смысла. Он основан на предположении, что некоторые виды ввода опасны, но на самом деле опасного ввода не существует; Просто код, который неправильно обрабатывает ввод.

Причина в том, что если вы вставляете переменную в какую-то строку (код), которая затем оценивается любым интерпретатором, вы должны убедиться, что переменная правильно экранирована. Например, если вы вставляете строку в SQL-оператор, вы должны заключить в кавычки и экранировать определенные символы в этой строке. Если вы вставляете значения в URL-адрес, вы должны экранировать его с помощью urlencode. Если вы вставляете строку в документ HTML, вы должны выйти с помощью htmlspecialchars. И так далее.

Попытка «очистить» данные заранее - обреченная стратегия, потому что в этот момент вы не можете знать, в каком контексте будут использоваться данные. Печально известная антифункция PHP magic_quotes является ярким примером этого. ошибочная идея.

Я использовал htmlentities вместо htmlspecialchars; он выполняет полное преобразование сущности.

Alex Weinstein 10.11.2008 22:21

Это нормально с точки зрения безопасности - htmlentities - это надмножество htmlspecialchars. Однако вам это не нужно, если вы используете UTF-8 в качестве кодировки.

troelskn 10.11.2008 23:03

Я использую приведенный ниже метод для очистки ввода для использования базы данных MYSQL. Подводя итог, выполните итерацию по массиву $ _POST или $ _GET через foreach и передайте каждый $ _POST или $ _GET через функцию DBSafe, чтобы очистить его. DBSafe можно легко модифицировать для другого использования переменных данных (например, вывода HTML и т. д.).

// Iterate POST array, pass each to DBSafe function to clean up data
foreach ($_POST as $key => $PostVal) {

  // Convert POST Vars into regular vars
  $$key=DBSafe($PostVal);

  // Use above statement to leave POST or GET array intact, and use new individual vars
  // OR, use below to update POST or GET array vars

  // Update POST  vars
  $_POST[$key]=DBSafe($PostVal);
}


function DBSafe($InputVal) {
// Returns MySQL safe values for DB update. unquoted numeric values; NULL for empty input; escaped, 'single-quoted' string-values; 

  if (is_numeric($InputVal)) {
    return $InputVal;
  } else {
    // escape_string may not be necessary depending on server PHP and MySQL (i.e. magic_quotes) setup.  Uncomment below if needed.
    // $InputVal=mysql_escape_string($InputVal);
    $InputVal=(!$InputVal?'NULL':"'$InputVal'");
    return $InputVal;
  }
}

Другие вопросы по теме