dr.Brain

doctor Brain

мир глазами веб-разработчика

О безопасности входящей информации

Как с помощью PHP-функции обезвредить данные полученные извне

dr.Brain

время чтения 2 мин.

Photo by Curology on Unsplash

Для начала хочу предупредить - не тратьте время на чтение этой статьи, потому что она совершенно бесполезна.

Ну а с теми, кто все-таки решил уделить моему материалу несколько драгоценных минут продолжим.

Когда мы добавляем в базу данных информацию, полученную из внешних источников нужно сохранять предельную осторожность. Это связано как с угрозами 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”.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.