Давайте-ка, обговоримо, як можна ламати PHP-скрипти. Мене часто про це просять. Отже, перший спосіб — підміна змінної. Робиться це дуже просто через браузер. Припустимо, нодо, що б мінлива root була дорівнює 1. Набиваємо рядок http://www.xxx.com/admin.php3?$root=1 і у нас мінлива root робиться рівній одиниці.
Але тут є один маленький напряг. Підмінити її таким чином можна тільки в тому випадку, якщо змінна передається від скрипта скрипту, а не визначається всередині самого скрипта.

Наступний метод обходу авторизації полягає в наступному: більшість скриптів перевіряють Ти це чи не Ти, по змінній $HTTP_REFERER. Вона містить URL, звідки Ти сюди прийшов.Його можна підмінити без особливих проблем щойно описаним методом. Якщо користуєшся таким методом, то треба написати в рядку браузера $HTTP_REFERER=адрес_с_которого_прошла_авторизация. Але насправді змінних типу цьому є величезна купа. Давай подивимося як ламати всі з них, які можуть допомогти при авторизації.

HTTP_VIA, HTTP_USER_AGENT, HTTP_X_FORWARDED_FOR, HTTP_REFERER — ламаються звичайної підміною через браузер по HTTP.

REMOTE_ADDR — для підміни можна використовувати проксі сервер.

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

HTTP_COOKIE_VARS, HTTP_GET_VARS, HTTP_POST_VARS — теж ламаються через браузер.

PHP_AUTH_USER, PHP_AUTH_PW — ці скрипти перехоплюють для захоплення пароля. Ось ці поїхати — вже проблема. Як їх ламати сам не знаю. Є підозра, що методом підробки HTML-сторінок з відповідним JavaScript-кодом для виводу їх на екран. Але це лише підозра. Якщо хто знає краще, напиши як. Хоча якщо використовується SSL, то перехопити можна просто при використанні проксі сервера, зарегестрированого в компанії, що видає сертифікати. Тоді Тобі все саме на монітор виповзе.

Наступний спосіб відноситься тільки до людей, добре знають PHP. Фішка така: «root»!=«root». Але strcmp («root», «root»)==true. Так що роби висновки. Наступний спосіб полягає в тому, що розмір надсилають інфи не перевіряється PHP3 (так само як і в Perl ‘ е). Якщо отримана інфа зберігається на сервері (наприклад, ГК, форум, реєстрація тощо), то може виникнути помилка типу Out of Memory. Але це тільки в тому випадку, якщо максимальний розмір повідомлення не заданий вручну. Є ще можливість вставки PHP3-скриптів в такі поля як textarea або. Якщо на екрані це буде парс, то виконуються введені тобою команди. Приблизно такий спосіб я використав у статті «Злом московського провайдера». Тільки там був Perl. Відверто кажучи, з методів, які я навів тут, реально можуть допомогти тільки метод підміна перменной і останній. Просто теоретично можливий кожен, але я ще не зустрічав такого захисту.

У багатьох програмістів, виникне питання: а як же тоді захищатися? Ось саме їм і присвячено другий розділ статті. Найнадійніший метод — використовувати $HTTP_REFERER. Що б його не підмінили треба використовувати тактику переходу від одного сценарію до іншого. Тобто логін і пароль відправляються в скрипт login.php3, який після їх перевірки переводить Тебе на 1.php3, на якому стоїть редирект enter.php3. $HTTP_REFERER повинен дорівнювати 1.php3. Дізнатися на яку сторінку йде редирект неможливо, якщо тільки в нього немає шелла з доступом для читання з папці з CGI-скриптами. Але якщо у нього є шелл, навряд чи він буде ламати цей CGI-скрипт, адже там вже відкривається безмежне поле для експериментів з файлами налаштувань. Другий спосіб захисту більш корисний і надійний. Якщо логін і пароль правильний, то з файлу зчитуються права, якими володіє цей користувач під цим логіном та паролем у вигляді цифри. Потім за придуманим тобою алгоритмом логін і пароль права достуа шифруфруются і заносяться до $ID. Далі цей ID передається з скрипта в скрипти, в яких відбувається дешифрування і витягування цифри з правами. Цей спосіб більш надійний, неломаем напряму та розмежуванням прав доступу. Якщо Ти застосуєш цей метод, чи впевнений, що Тебе не зламають, якщо тільки Ти туди не насажаешь інших дірок. Але Ти їх не насажаешь, адже Ти людина розумна! Удачі Тобі у твоїй нелегкій справі, сисадмін!