Для безопасной обработки данных, полученных через POST-запросы, важно их правильно очищать. Вот несколько способов очистки POST данных в PHP:
1. Базовая очистка строк
$clean = array(); foreach ($_POST as $key => $value) { // Удаляем пробелы из начала и конца строки $value = trim($value); // Экранируем специальные символы $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); // Удаляем слеши, если magic_quotes включены $value = stripslashes($value); $clean[$key] = $value; }
2. Фильтрация с помощью filter_input_array()
$args = array( 'username' => FILTER_SANITIZE_STRING, 'email' => FILTER_SANITIZE_EMAIL, 'age' => array( 'filter' => FILTER_SANITIZE_NUMBER_INT, 'options' => array('min_range' => 1, 'max_range' => 120) ), 'website' => FILTER_SANITIZE_URL ); $clean = filter_input_array(INPUT_POST, $args);
3. Для разных типов данных
// Очистка строки function cleanString($input) { return htmlspecialchars(strip_tags(trim($input)), ENT_QUOTES, 'UTF-8'); } // Очистка целого числа function cleanInt($input) { return (int) filter_var($input, FILTER_SANITIZE_NUMBER_INT); } // Очистка email function cleanEmail($input) { return filter_var(trim($input), FILTER_SANITIZE_EMAIL); } // Очистка URL function cleanUrl($input) { return filter_var(trim($input), FILTER_SANITIZE_URL); }
4. Для работы с базой данных (используйте подготовленные выражения)
// С PDO $stmt = $pdo->prepare("INSERT INTO users (username, email) VALUES (:username, :email)"); $stmt->bindParam(':username', $_POST['username'], PDO::PARAM_STR); $stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR); $stmt->execute(); // С MySQLi $stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)"); $stmt->bind_param("ss", $_POST['username'], $_POST['email']); $stmt->execute();
Важные замечания:
- Всегда проверяйте существование ключа в массиве $_POST перед использованием:phpCopy$username = isset($_POST[‘username’]) ? cleanString($_POST[‘username’]) : ”;
- Для разных типов данных используйте разные методы очистки.
- Для работы с БД всегда используйте подготовленные выражения вместо прямой подстановки данных в запрос.
- Для защиты от XSS используйте htmlspecialchars() при выводе данных в HTML.
- Для загрузки файлов проверяйте их MIME-тип и расширение.