Аккуратный способ очистить ваши переменные URL? - PullRequest
2 голосов
/ 10 ноября 2008

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

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

Ответы [ 4 ]

6 голосов
/ 10 ноября 2008

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

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

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

3 голосов
/ 10 ноября 2008

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

2 голосов
/ 10 ноября 2008

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

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

1 голос
/ 11 ноября 2008

Я использую приведенный ниже метод для очистки ввода для использования базы данных 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;
  }
}
...