Post_80bДля того щоб досягти успіху постійно потрібно розширювати і поглиблювати свої знання. Не зупинятись на якомусь одному елементі коли його вже засвоїли, а намагатись засвоїти більше.

В першу чергу це стосується дуже важливої теми як безпека. Сьогоднішня  публікація буде стосуватись безпеки в РНР.

Тема даної  публікації  стосується такого питання як спочатку виявляти проблемні місця в безпеці РНР, потім вияснити яким способом можна захистити ваш РНР проект.

На мові програмування РНР дуже просто реалізувати різні доповнення. Синтаксис мови швидко засвоюється, і велика кількість спеціалістів в даній області використовують його. РНР досить розпоширена мова програмування.

Але не все так просто. Більшість користувачів зовсім не знають про основні правила безпеки в мові, і не в повній мірі використовують її можливості. В результаті виходить багато недопрацювань в області інтернет безпеки при використання РНР.

Я вважаю що потрібно мати поняття про основні елементи безпеки мови РНР, крім того також навчитись включати їх в свої розробки. А потім бути впевненому в собі коли можна буде сказати що я навчився багато в веб–дизайні, а головне розробляти безпечні РНР проекти.

Правильно побудований захист, повинен виконувати всі основні вимоги безпеки, і в той же час не повинен негативно впливати на роботу користувача. Перш за все мабуть кожному цікаво які загрози можуть існувати з використанням РНР.

В мережі інтернет є багато користувачів, які маючи за мету привабити до себе увагу. І кращий спосіб для цього це взломавши чийсь код нашкодити сайту, опублікувати в ньому неумістний контент.

Полюбому кожен являється обєктом їх уваги незалежно від того чи мова йде про потужний корпоративний портал, чи про невеликий власний сайт.

Більшість початківців не знайомі з проблемами безпеки мови РНР, і звичайно не задумуються про захист проекту, маючи надію  на можливість  відновлення. Але краще, все таки застосувати функції безпеки і уже в самому початку.

В даній категорії “Безпека в PHP” ви познайомитись з матеріалами в яких буде говоритись про правила безпеки РНР, а також можна буде дізнатись про способи, за допомогою яких можна відкинути атаку на безпеку РНР.

Повідомлення про помилки.

Аналіз проблем і недостатків в безпеці можна зробити шляхом перевірки повідомлень про помилки в РНР.

Аналізувати проблему також означає відкрити спосіб її вирішення.

Добре, коли ще на самому початку визначити чому елемент в РНР не працює належним чином. За допомогою повідомлень про  помилки, ми можемо визначити, що іменно, і в якому місці не працює так як потрібно.

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

Журнал помилок дозволяє їм визначити слабі місця вашого сайту, і здійснити атаку. Крім того стане зрозуміло як працює ваш додаток, що дозволить його скомпроментувати. Нападників зацікавить ваш додаток, і вони захочуть використати любу можливість для атаки.

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

Всі види багів англ жук на жаргоні програмістів означає помилка в програмному коді, можуть часто появлятись, і  тому в подальшому журнал помилок необхідно перевіряти регулярно на їх усунення.

Зміна рядків в файлах конфігурації

Що необхідно зробити щоб зробити доступ до журналу помилок як можна більше безпечним. По замовчуванню РНР–сервер зберігає всі помилки в окремому журналі. Ідеально було б мати доступ до цього сервера (консоль доступу до системи Linux, консуль доступу до системи Windows).

В більшост випадків прямого доступу до РНР сервера у вас не буде, а це означає що прийдеться вносити деякі зміни в файл конфігурації РНР, для того щоб налаштувати журнал помилок.

Змініть чотири рядки в файлі конфігурації php.ini, (як знайти файл php.ini можна перелянути в публікації “Як імпортувати базу даних великих розмірів на Денвер”, або організувати пошук по імені файлу) для створення окремого зовнішнього журналу помилок РНР.

display_errors —  ця опцція дозволяє нам показувати або не показувати помилки безпосередньо на екрані, як зазвичай дана опція включається на час написання РНР–скриптів, для того щоб мати можливість бачити повідомлення про помилки, на реальних ж серверах в інтернеті вона зазвичай виключена із за безпеки.

error_reporting — ця опція визначає про які типи помилок РНР повідомляється.

Типи помилок

E_ALL — ВСІ ПОПЕРЕДЖЕННЯ ПРО ПОМИЛКИ

E_ERROR — КРИТИЧНІ ПОМИЛКИ ЧАСУ ВИКОНАННЯ

E_WARNING — ПОПЕРЕДЖЕННЯ ЧАСУ ВИКОНАННЯ

E_PARSE — ПОМИЛКИ ТРАНСЛЯЦІЇ

E_NOTICE — ВІДМІТКИ ЧАСУ ВИКОНАННЯ (попередження які скоріш за все свідчать про логічні помилки в сценарії, наприклад використання неініціалізованої змінної)

E_CORE_ERROR — КРИТИЧНІ ПОМИЛКИ В МОМЕНТ СТАРТА РНР

E_CORE_WARNING — НЕ КРИТИЧНІ ПОМИЛКИ В МОМЕНТ СТАРТА РНР 

E_COMPILE_ERROR — КРИТИЧНІ ПОМИЛКИ ЧАСУ ТРАНСЛЯЦІЇ 

E_COMPILE_WARNING — ПОПЕРЕДЖЕННЯ ЧАСУ ТРАНСЛЯЦІЇ

E_USER_ERROR — СГЕНЕРОВАНІ КОРИСТУВАЧЕМ ПОМИЛКИ

E_USER_WARNING — СГЕНЕРОВАНІ КОРИСТУВАЧЕМ ПОПЕРЕДЖЕННЯ

E_USER_NOTICE — СГЕНЕРОВАНІ КОРИСТУВАЧЕМ ЗАМІТКИ

Приклад

// відключити всі повідомлення про помилки

error_reporting(0);

// повідомляти про прості помилки під час виконання

error_reporting(E_ERROR | E_WARNING | E_PARSE);

// повідомлення E_NOTICE може стати в нагоді( для неініціалізованих змінних або для неправильного ввода імені змінних)

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// повідомляти про всі помилки РНР

error_reporting (E_ALL)

Рекомендують встановити E_ALL (повідомляти про всі помилки РНР)

log_errors — дана опція визначає, чи повинні повідомлення про помилки скриптів протоколюватись в файлі регістрації помилок.

error_log — ця опція дозволяє визначити шлях до файлу помилок;

значення може бути виставлено на імя файла на рядок “syslog” або зовсім не виставлене (по засовчуванню).

В випадку коли error_log в php.ini  не виставлений, логи РНР ведуться за рахунок веб–сервера (наприклад в Apache error_log), якщо значення виставлено на імя файла, то РНР буде писати логи в указаний файл, якщо ж значення вииставлено на ключове слово “syslog”, то логи РНР будуть вестись за рахунок регістрації операційної системи ( для UNIX–СИСТЕМ це стандартний журнал [syslog]  для систем Windows [event log]).

Рекомендації 

Рекомендації про те як працювати з параметрами на різних етапах розвитку вашого РНР проекту.

На стадії розвитку проекту параметри проекта повинні бути

display_errors–On

error_reporting–E_ALL

log_errors–On

error_log–Varies

На стадії роботи готового проекту

display_errors-Off

error_reporting–E_ALL

log_errors–On

error_log–Varies

 

Під час роботи проекта (в інтернеті) необхідно призупинити відображення помилок на екрані для того, щоб вони не були замітні користувачам, зберегти ці помилки в окремому документі і виправити пізніше.

Конфігурація параметрів системи повідомлення про помилки

Далі ми зосередимо увагу на конфігурації опцій які ми згадували, ми побачимо які іменно можно настроювати і які параметри необхідно обєднати для правильного функціонування.  

Існує багато способів налаштування цих параметрів. В цій публікації вибраний найбільшрозпоширений спосіб забезпечити РНР, і самі розпоширені процедури.

Першим, і найбільшважливим кроком,  являється зміна значення в файлі конфігурації php.ini

Файл конфігурації htaccess

Веб–сервер Apache володіє власними конфігураційними файлами. Найбільш використовуваний це .htaccess в котрому ми можем поміняти параметри  Apache.

Зазвичай файл .htaccess лежить в кореневому каталозі і діє на весь сайт і на всі директорії ( навіть якщо в них не має свого .htaccess ). Якщо необхідно створити конкретні налаштування Apache для визначеної папки, потрібно помістити  в неї новий файл .htaccess, і його дія розпоширеться на дану папку.

Причому .htaccess який лежить в корні сайту ніяк впливати на цю папку не буде.

Деякі із параметрів .htaccess посилаються і на РНР. В якості альтернативного способу ми можемо поміняти параметри РНР безпосередньо в файлі конфігурації Apache, .htaccess.  Як раніше згадувалось це допоможе в тому випадку  якщо у нас не беде доступу, безпосередньо до файлу php.ini на РНР сервері.

Рядок який необхідно внести в .htaccess буде наступний php_flag directive_name directive_value

В такому випадку ми не зможемо використовувати такі константи як “E_ALL”. Необхідно їх заповнити числовими значеннями. Для E_ALL числове значення буде 8191.

Числові значення для всіх констант РНР.

1 — E_ERROR;

2 — E_WARNING;

4 — E_PARSE;

8 — E_NOTICE;1

16 — E_CORE_ERROR;

32 — E_CORE_WARNING;

64 — E_COMPILE_ERROR;

128 — E_COMPILE_WARNING;

256 — E_USER_ERROR;

512 — E_USER_WARNING;

1024 — E_USER_NOTICE;

8191 — E_ALL

Таким чином ми вводимо наступні кодові рядки в конфігурацію сервера Apache

php_flag display_errors off

php_flag error_reporting 2047

php_flag log_errors on

php_flag error_log/site/logs/php_errors/log


Цікаве завдання

Для того щоб зробити debug ( перевірку і налагодження виконуючих файлів) в додатку вам необхідно виконати налаштування повідомлень про помилки, які ми би хотіли отримати в випадку, якщо виникнуть проблеми. Ця конфігурація не реалізується по замовчуванню в файлі конфігурацій РНР.

<?PHP

error_reporting($змінна)

………………..

?>

В представлену вище модель скрипта ми ввели $змінна. Виберіть з вказаних пунктів кодовий рядок, на який на вашу думку, потрібно замінити $змінна в нашому скрипті.

а) error_reporting(E_ERROR | E_WARNING | E_NOTICE);

б) error_reporting (E_ALL^E_NOTICE);

в) error_reporting(E_ERROR |  E_PARSE | E_NOTICE);

г) error_reporting (E_WARNING);

Відповідь

Показати текст »

 б) error_reporting (E_ALL^E_NOTICE);

<?PHP

error_reporting (E_ALL^E_NOTICE);

………………..

?>

 

 


Пора закінчувати публікацію, сьогодні новинка це практичне завдання відповідь можна переглянути розкривши “Прихований текст”. Взагалі практика це річ необхідна, в наступній публікації опишу як створити контактну форму на мові програмування РНР, і підєднати її до сайту щоб користувач мав змогу звязатись з вами при бажанні.

А також як перевірити дану форму в програмах типу Денвер (пакет який створить локальний сервер у вас на компютері) чи правильно вона функціонує.

На цьому все до зустрічі.