Для безопасной обработки данных, полученных через 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-тип и расширение.
