Десять правил написання безпечного коду на php, php

У серії статей "Ten Security Checks for PHP" коротко розглядаються 10 найбільш часто здійснюються PHP програмістами помилок, що призводять до проблем з безпекою скриптів.

Уникайте використання змінних сформованих на підставі даних користувача в функції включення файлу (include, require) або доступу до файлу (readfile, fopen, file). Наприклад: include ($ lib_dir. "Functions.inc"); include ($ page); змінні $ lib_dir і $ page перед цим потрібно перевірити або на предмет наявності заборонених символів, або зіставити з наперед визначеним масивом допустимих значень:

Необхідно екранувати небезпечні символи ( "і") в змінних беруть участь в SQL запросах.Напрімер, зловмисник може передати змінну виду "password = a% 27 + OR + 1% 3Di% 271" яка буде використана в SQL запиті як "Password = 'a 'or 1 =' 1 ' ". Рішення: включити magic_quotes_gpc в php.ini або екранувати змінні самостійно через addslashes ();

Ніколи не потрібно довіряти глобальних змінних, при включеному в php.ini режимі register_globals зловмисник може підмінити значення глобальної змінної. Використовуйте асоціативні масиви $ HTTP_GET_VARS і $ HTTP_POST_VARS з вимкненим register_globals і на початку скрипта явно Ініціалізуйте всі глобальні змінні.

Визначайте місцезнаходження закачаного файлу тільки через is_uploaded_file () або використовуючи move_uploaded_file (), але не довіряйте глобальної змінної з шляхом до закачаного файлу, значення якої зловмисник може підмінити.

Використовуйте функції htmlspecialchars (), htmlentities () для екранування HTML тегів присутніх в даних отриманих від користувача.

Розміщуйте файли даних поза дерева файлової системи доступної через web (рівнем нижче htdocs, або "document root") або захищайте директорії через .htaccess.

mod_php запускайте в режимі safe_mode.

Перевіряйте наявність заборонених символів в змінні використовуваних у функціях eval, preg_replace, exec, passthru, system, popen, ``.

При використанні не mod_php, а CGI варіанти php.cgi не забувайте, що через php.cgi можна отримати доступ до будь-якого файлу в директорії захищених через .htaccess, так як доступ в цьому випадку обмежений тільки для прямих запитів, але не для запитів через CGI скрипт php.cgi.

Схожі статті