Вы можете просто array_map
strip_tags
до $_POST
, но гораздо приятнее написать пользовательскую функцию для получения данных из нее:
function post_data($name) {
global $post_cache;
if (in_array($name, $post_cache)) {
return $post_cache[$name];
}
$val = $_POST[$name];
if (is_string($val)) {
$val = strip_tags($val);
} else if (is_array($val)) {
$val = array_map('strip_tags', $val);
}
$post_cache[$name] = $val;
return $val;
}
Это сделает ваш код более читабельным (другие, изучающие его, обычно считают, что $_POST['foo']
- это данные в поле формы foo
, а не то, что вы уже предварительно обработали), не вызовут проблем с плагинами или библиотеками. который пытается получить прямой доступ к $ _POST, облегчает добавление дополнительной логики к $_POST
предварительной обработке (unescape, когда включены магические кавычки - обычное явление) без поиска всех мест в вашем коде, где у вас есть использовать данные POST и избавляет вас от огромных головных болей, когда вы понимаете, что есть несколько полей POST, где вам нужны HTML-теги. Как правило, это действительно плохая идея - напрямую изменить любой из суперглобальных элементов.
Кроме того, лучше очищать данные на выходе, а не на входе. Для разных целей потребуются разные методы, например, если вы используете
<div class="user_photo">
<img src="<?php echo photo_path($user_id) ?>" alt="<?php echo $user_name ?>" />
</div>
затем $user_name
является вектором атаки XSS, и strip_tags
не помогает против него вообще; вам нужно будет htmlspecialchars . Если в качестве URL-адреса используются пользовательские данные, вам потребуется еще один метод защиты от javascript:
URL-адресов и т. Д.