PHP: Очистка данных
В этой заметке я поделюсь с вами несколькими способами фильтрации пользовательских данных, перед их передачей в программу. Я поагаю что вам не стоит объяснять какими последствиями вам грозит перечача сырых данных в программу.
Проверка на выбор числа в заданном интервале с использованием filter_input()
<?php
$value = filter_input(INPUT_GET, "value", FILTER_VALIDATE_INT,
array("options" => array("min_range" => 15, "max_range" => 20)));
if ($value) {
// Выполняем обработку данных
}
else {
// Обрабатываем ошибку
print "Вы ввели недопустимое значение";
}
Валидация e-mail:
<?php
function emailUser($email) {
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
if ($email !== false) {
mail($email, "Письмо", "Содержание");
}
else {
// Обработка ошибки адреса
}
}
Очистка запроса средствами PDO:
<?php
$pdo = new PDO('sqlite:users.db');
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');
$stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT); //<-- Автоматически очищено с помощью PDO
$stmt->execute();
Список доступных фильтров:
Здесь вы сможете найти все доступные фильтры для очистки данных и ниже универсальный рецепт для подстановки.
FILTER_SANITIZE_STRING — Вырезает символы <>?
FILTER_SANITIZE_ENCODED — Кодирует символы `~!@#$%^&*()=+[{]};:'".?/| в HEX
FILTER_SANITIZE_SPECIAL_CHARS — Кодирует специальные символы <>&" в &type
FILTER_SANITIZE_EMAIL — Вырезает символы <>();:,\”
FILTER_SANITIZE_URL — Оставляет a-zA-Z0-9`~!@#$%^&*()-_=+[{]};:'"<,>.?/|
FILTER_SANITIZE_NUMBER_INT — Оставляет 1234567890-+
FILTER_SANITIZE_NUMBER_FLOAT — Оставляет 1234567890-+.
FILTER_SANITIZE_MAGIC_QUOTES — Кодирует '”\, так же, как magic quotes
Пример подстановки:
<?php
$check = filter_var($input, нужный_тип_проверки);
?>
И помните данные фильтрв лишь очередной помошник в процессе очистки, но они не являються 100% защитой от различных манипуляций с вашим коом со стороны недоброжелателей.