Безпека 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