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% защитой от различных манипуляций с вашим коом со стороны недоброжелателей.