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






Я использую PHP входные фильтры и функцию urlencode.
Регулярные выражения могут быть полезны, а также в PHP 5.2.0 было введено целое расширение фильтр, предназначенное для фильтрации входных переменных различными способами.
Трудно рекомендовать одно решение, потому что природа входных переменных очень ... переменная. :-)
Идея очистки ввода никогда не имела для меня особого смысла. Он основан на предположении, что некоторые виды ввода опасны, но на самом деле опасного ввода не существует; Просто код, который неправильно обрабатывает ввод.
Причина в том, что если вы вставляете переменную в какую-то строку (код), которая затем оценивается любым интерпретатором, вы должны убедиться, что переменная правильно экранирована. Например, если вы вставляете строку в SQL-оператор, вы должны заключить в кавычки и экранировать определенные символы в этой строке. Если вы вставляете значения в URL-адрес, вы должны экранировать его с помощью urlencode. Если вы вставляете строку в документ HTML, вы должны выйти с помощью htmlspecialchars. И так далее.
Попытка «очистить» данные заранее - обреченная стратегия, потому что в этот момент вы не можете знать, в каком контексте будут использоваться данные. Печально известная антифункция PHP magic_quotes является ярким примером этого. ошибочная идея.
Это нормально с точки зрения безопасности - htmlentities - это надмножество htmlspecialchars. Однако вам это не нужно, если вы используете UTF-8 в качестве кодировки.
Я использую приведенный ниже метод для очистки ввода для использования базы данных 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;
}
}
Я использовал htmlentities вместо htmlspecialchars; он выполняет полное преобразование сущности.