О безопасности входящей информации
Как с помощью PHP-функции обезвредить данные полученные извне
Для начала хочу предупредить - не тратьте время на чтение этой статьи, потому что она совершенно бесполезна.
Ну а с теми, кто все-таки решил уделить моему материалу несколько драгоценных минут продолжим.
Когда мы добавляем в базу данных информацию, полученную из внешних источников нужно сохранять предельную осторожность. Это связано как с угрозами SQL-инъекций, так и с другими способами внедрения вредоносного кода в базу данных любимого проекта. Функция, приведенная ниже, возможно, является наиболее полным и эффективным методом очистки поступающих данных:
function cleanInput($input) {
$search = array(
'@<script[^>]*?>.*?</script>@si', // удаляем javascript
'@<[\/\!]*?[^<>]*?>@si', // удаляем HTML теги
'@<style[^>]*?>.*?</style>@siU', // удаляем теги стилей
'@<![\s\S]*?--[ \t\n\r]*>@' // удаляем многострочные комментарии
);
$output = preg_replace($search, '', $input);
return $output;
}
function sanitize($input) {
if (is_array($input)) {
foreach($input as $var=>$val) {
$output[$var] = sanitize($val);
}
}
else {
if (get_magic_quotes_gpc()) {
$input = stripslashes($input);
}
$input = cleanInput($input);
$output = mysql_real_escape_string($input);
}
return $output;
}
Посмотрим на примере:
$bad_string = "Hi! <script src='http://www.evilsite.com/bad_script.js'></script> It's a good day!";
$good_string = sanitize($bad_string);
// $good_string возвращает "Hi! It\'s a good day!"
// не забываем пользоваться функцией очистки данных для POST/GET переменных
$_POST = sanitize($_POST);
$_GET = sanitize($_GET);
Однако, я думаю, что многократное использование такой (или подобной) функции для очистки данных поступающих из полей ввода, внешних API, переменных POST и GET запросов - весьма утомительное занятие. Возможно, это слишком тяжело для большинства php-разработчиков.
Лучше не использовать код, приведенный выше. Хотя бы потому, что в случае внедрения вредоносного кода в проект, Вы, как программист, вместе с негодованием клиента и возмущением менеджера получите что-то новое и неожиданное - а это выход из зоны комфорта, это адреналин в крови и новые свершения.
Спасибо за внимание.
Написано по материала статьи Imam Ali Mustofa “Don’t Reject Something”.