Безпека php на сервері
PHP - це один з найпопулярніших серверних мов програмування з відкритим вихідним кодом. Він використовується не тільки для створення сайтів, але і в якості мови програмування загального призначення, а також для написання серверної частини різних веб-додатків.
Виконувати скрипти на PHP можуть веб-сервери Apache, Nginx і Lighttpd. Також PHP може виконуватися інтерпретатором прямо з командного рядка. Але оскільки PHP встановлений на сервері, він може створити ряд проблем з безпекою, тому його потрібно застосовувати обережно.
Всі програми містять уразливості і PHP не виняток. У цій статті ми зібрали поради, які допоможуть вам підтримувати безпеку в PHP, а отже, безпеку вашого сервера на вищому рівні.
Як поліпшити безпеку PHP?
Всі наведені нижче поради розраховані на те, що PHP працює під управлінням Nginx або Apache, сам інтерпретатор PHP недоступний з зовнішньої мережі. А тепер, перейдемо до розгляду того як виконується захист php коду, сайту і сервера в цілому.
1. Знайте ворога в обличчя
Додатки на основі PHP можуть піддаватися різним типам атак, ось основні з них:
- XSS - це вразливість в веб-додатках, за допомогою якої зловмисники можуть виконувати довільний jаvascript код в браузері користувачів, і таким чином, вкрасти його дані. Виникає через відсутність перевірки на даних скриптів правильність;
- SQL ін`єкція - це вразливість в коді роботи з базою даних. Якщо для користувача введення невірно фільтрується скриптом, і використовується для формування запиту до бази даних, то зловмисники можуть виконати будь-які запити до бази даних. Для запобігання такої проблеми рекомендується фільтрувати дані функцією mysql_real_escape_string () перед відправкою запиту;
- Завантаження файлів - дозволяє відвідувачеві завантажувати файли на ваш сервер. Завантаживши певний тип файлів, користувачі можуть отримати доступ до системи або навіть вкрасти інформацію з бази даних, тому потрібно стежити щоб можна було завантажувати тільки картинки;
- віддалене виконання - зловмисник може віддалено виконувати php файли, які є на сервері, тому разом з можливістю завантаження PHP файлів це становить серйозну небезпеку;
- Eval () - дозволяє виконати код PHP, переданий в рядку, часто використовується зловмисниками, щоб приховати свій код на вашому сервері;
- CSRF атака - дозволяє змусити користувача виконати небажані дії в веб-додатках. Якщо користувач є адміністратором, це може поставити під загрозу весь додаток.
2. Використовуйте тільки необхідні модулі
Щоб подивитися всі скомпільовані модулі PHP виконайте команду:
expose_php = OffЯкщо встановлено значення On, то PHP буде відправляти версію PHP у відповідь на всі запити в заголовку X-Powered-By. Також рекомендується приховати версію Apache і іншу інформацію. Захист php від злому, це не тільки акуратне програмування, а й приховування інформації про систему.
4. Вимкніть динамічні розширення
PHP підтримує динамічне завантаження розширень. За замовчуванням завантажуються всі розширення, конфігураційні файли яких є в /etc/php/conf.d/. Також завантажуються модулі, які вказані директивою extension в основному конфіге php.ini. Ми можете видалити непотрібне.
5. Висновок помилок
Повідомлення про помилки містять багато інформації, не дозволяйте їх дивитися всім користувачам сайту. Наведіть директиву display_errors до такого виду:
log_errors = Onerror_log = /var/log/httpd/php_scripts_error.log
6. Забороніть завантаження файлів
Якщо завантаження файлів не потрібна, забороніть її:
file_uploads = Onupload_max_filesize = 1M
Користувачі зможуть завантажувати файли розміром не більше 1 мегабайт, так безпеку в php буде більше.
6. Вимкніть віддалене виконання коду
якщо параметр allow_url_fopen включений, php може використовувати такі файлові функції, як file_get_contents. За допомогою неї скрипт може завантажувати файли з віддалених серверів. Програмісти часто забувають виконати належну фільтрацію даних, і тим самим відкривають уразливість. Для відключення змініть директиву:
allow_url_include = Off7. Увімкніть безпечний режим SQL
У безпечному режимі SQL, інтерпретатор ігнорує всі аргументи, що передаються в функції mysql_connect і mysql_pcconnect. Але в такому режимі працюватимуть не всі скрипти, наприклад, не буде працювати WordPress, так що використовуйте акуратно. Для включення додайте директиву:
magic_quotes_gpc = Off9. Контролюйте розмір POST
Метод POST використовується, коли браузер хоче передати веб-сервера певну кількість даних як частина запиту, наприклад, при завантаженні файлу. Зловмисники можуть використовувати великі запити, щоб витратити ресурси сервера. Тому розмір краще обмежити:
max_execution_time = 30max_input_time = 30
memory_limit = 40M
11. Вимкніть небезпечні функції
PHP містить безліч функцій, які можуть використовуватися для злому сервера, наприклад, ті, які дозволяють виконувати команди оболонки. Щоб відключити, досить їх перерахувати в директиві disable_functions:
cgi.force_redirect = On13. UID і GID інтерпретатора PHP
Якщо ви використовуєте зовнішній FastCGI сервер, то потрібно щоб він був запущений не від користувача root. Запускайте php від імені непрівелігірованного користувача. Як ви знаєте, у PHP є функції, які дозволяють виконувати команди оболонки. Дуже небезпечно, якщо вони будуть виконуватися від суперкористувача.
14. Обмеження доступу до файлової системи
Директива open_basedir дозволяє встановити каталог, в якому php може отримати доступ до файлів за допомогою таких функцій, як fopen, file_get_contents і т д. Якщо файл знаходиться поза цією директорії PHP відмовиться його відкривати. Ви навіть не зможете використовувати символічні посилання.
upload_tmp_dir = "/ var / lib / php / session"16. Тримайте програмне забезпечення в актуальному стані
Всі програми можуть містити різні уразливості, тому важливо виконувати регулярне оновлення системи, щоб вчасно застосувати всі патчі безпеки. Потрібно оновлювати не тільки PHP, а весь програмний стек, в тому числі Apache.
17. Використовуйте SELinux
SELinux - це система безпеки, яка використовується за умовчанням в RedHat. Її можна використовувати для запобігання несанкціонованому доступу до файлів і ресурсів. Наприклад, ви можете встановити політики безпеки для веб-сервера Apache або окремого сервера PHP. Це теж відмінний захист PHP і не тільки.
18. Встановіть mod_security
Це модуль Apache для виявлення і запобігання в веб-додатки. Він може захистити php і ваше додаток від XSS і SQL-Inj атак. Наприклад, щоб не дозволяти відкривати файли в / etc / після установки модуля додайте в конфігураційний файл Apache:
SecFilter "delete [[: space:]] + from"SecFilter "select. + From"
19. Переглядайте журнали
Регулярно переглядайте файли журналів Apache і PHP, ви зможете отримати деякі уявлення про те, як працює сервер і перевірити рівень безпеки.
$ Tail -f /var/log/httpd/php_scripts_error.log
висновки
У цій статті ми розглянули кілька способів збільшити безпеку сайту PHP. Вони допоможуть вам тримати свій сервер у максимальній безпеці. Можливо, це не всі доступні варіанти, якщо ви знаєте інші способи, напишіть в коментарях.
На завершення лекція про безпеку написання скриптів в PHP:
>
Нові мови програмування 2016
Келебії докса - введення в програмування на go
Системи моніторингу сервера linux
Список серверів openvpn
Кращі сканери вразливостей для linux
Кращі проксі сервери linux
Що краще nginx або apache 2016
Що значить 502 bad gateway nginx
Як налаштувати https-з`єднання?
Обговорюється закриття проекту apache openoffice
Проблема зв`язки php і html
Адміністрування linux
Модулі apache
Написання скриптів оболонки - поради експертів
Microsoft збирається відкрити вихідний код powershell
Установка ispmanager 5 на ubuntu server
Налаштування файлу php.ini
Установка lamp ubuntu 16.04
Orwl перший безпечний мікрокомп`ютер з відкритим вихідним кодом
Установка nginx ubuntu 16.04
Пошук вразливостей на сайті 2017
Список серверів openvpn
Помилка 403 forbidden nginx 1.4 6 ubuntu
Установка nginx ubuntu 16.04
Нові мови програмування 2016
Келебії докса - введення в програмування на go
Як налаштувати https-з`єднання?
Системи моніторингу сервера linux
Установка ispmanager 5 на ubuntu server
Модулі apache