Перевірені засоби захисту PHP. PHP вразливість та захист від PHP ін'єкцій. Правила безпечного програмування на PHP Керування доступом до файлів

У всьому світі в аеропортах можна знайти гасло "Security is not a joking matter" (Безпека – насамперед). Таке ж гасло кожен системний адміністратор мав би закріпити поряд зі своїм сервером PHP. А будь-хто, хто підключається до сервера, що знаходиться в Інтернеті, повинен вживати належних заходів захисту або ризикувати втратою даних і навіть грошей через те, що зловмисні зломщики програмного забезпеченнязможуть завдати шкоди, користуючись клавіатурою свого комп'ютера.

Розробник сайту, стурбований проблемами захисту, повинен постійно повторювати: "Не довіряйте мережі". Якщо ви турбуєтеся про захист свого сайту, повторюйте цей вислів, розробляючи код майбутніх сторінок сайту. Будь-яка інформація, що передається на сервер по мережі (чи URL, дані з форми HTML або дані, що надходять через якийсь інший мережевий порт), повинна розглядатися як потенційно небезпечна. У цій статті запропоновано кілька методів, що дозволяють убезпечити інформацію, що надходить. Необхідно не тільки застосовувати ці методи, але й приділяти певний час для того, щоб виявити інші потенційні небезпеки та знайти способи запобігання їм.

Другим емпіричним правилом створення захищеного сайту є таке: "Мінімізуйте збитки". Що буде, якщо написана вами програма, яка, на вашу думку, цілком надійна, фактично виявиться вразливою? Навіть просто для того, щоб залишатися в повній безпеці, обмежуйте збитки, які міг би завдати порушник, скориставшись цією вразливістю.

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

Але ці міркування не повинні перешкоджати вашим намірам, наприклад, що стосуються виведення свого сайту електронної комерції в оперативний режим.

Можливі напади

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

Зазвичай хакераминазивають тих, кого було б правильніше назвати зломщиками програмного захисту . У комп'ютерній спільноті зломниками захисту називають фахівців, які, користуючись вдалим збігом обставин або своїми навичками, долають захист комп'ютерних системі завдають шкоди. А хакери - це програмісти, які вміють віртуозно складати програми і здатні не тільки розумітися на складному коді, але й самостійно писати ефективний (і часто недоступний для розуміння сторонніх) код багатьма мовами. Для програміста придбання звання хакера є честю, а звання зломщика програмного забезпечення, мабуть, означає, що його власник повинен стежити за нотатками у рубриці "Розшукується".

Не розуміючи того, наскільки принизливим є звання зломщика програмного забезпечення, багато програмістів-початківців вступають на цей шлях, вдаючись до використання інструментальних засобів і сценаріїв, які вони знаходять у веб. Таких зламщиків-початківців називають script-kiddie або по нашому кулхацкерами. Ці люди часто самі майже не розуміють, що роблять. Зазвичай саме така категорія порушників стоїть за примітивними атаками, такими як компрометація сайту, XSS та SQL-ін'єкції.

Компрометація сайту та атаки XSS

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

Сторінка із простою формою додавання коментарів ".$row["text"].""; } } ?> Основи PHP

Ця програма реалізує систему коментарів у дуже примітивній формі (якщо ви вивчаєте мій посібник з PHP з початку, то можливо ви ще не знайомі з операціями роботи з базами даних; якщо це так, то рекомендую вам повернутися до цієї статті після ознайомлення з відповідним матеріалом з MySQL).

Читаючи цей код, досвідчений програміст починає почуватися не зовсім впевнено (пам'ятаєте – "Не довіряйте мережі"). Така програма набуває даних форм, які, згідно з очікуваннями, мають містити текст коментаря. Цей текст надається змінною $comment і зберігається в базі даних для відображення перед наступними відвідувачами. Якщо введені дані будуть такими, на які ми очікуємо, то проблеми не виникнуть.

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