Секретная страница

Php-«песочница»

Здравствуйте. С вами Андрей Чернобай с новым выпуском «PHP — песочницы». Рассылка создана для самых «маленьких» — для тех, кто делает только первые шаги в программировании на PHP. Если Вы хотите двигаться быстрее и освоить создание PHP- сайтов профессионально, рекомендую курс PHP+MySQL для начинающих, потому что в этом курсе собрано всё то, что необходимо именно для создания сайтов, никакой «воды», при этом всё доступно, подробно до мелочей и наглядно.

Для отписки от рассылки внизу страницы есть ссылка. А с остальными продолжим.

В прошлых выпусках я начал выкладывать свою коллекцию скриптов. Сегодня новый скрипт.

Секретный раздел на сайте

На индексной странице добавляем заголовок «Секретная страница » и делаем из него ссылку на файл именем secret.php. Создаём этот файл.

Запускаем Денвер, открываем индексную страницу в браузере и проверяем, как работает новая ссылка на новую страницу, которая пока пуста.

Открываем secret.php в своём редакторе и добавляем к базовому коду этой страницы заголовок «Секретная страница» — просто чтобы в процессе переходов по ссылкам видеть, что мы попали именно на эту страницу. К тому же, можно разместить ссылку и на главную страницу — для возвращения. Таким образом, весь код секретной страницы должен выглядеть так:

Секретная страница

На главную

Сохраните изменения, обновите страницу в браузере, должен появиться заголовок «Секретная страница» и ссылка на главную. Надеюсь, у вас получилось. Теперь нужно создать скрипт, который закроет доступ к файлу secret.php для всех, кто не знает пароля.

Вводят пароль всегда в форму, у которой есть поле для собственно ввода пароля и кнопка, запускающая скрипт, проверяющий соответствие пароля. Форма будет расположена на отдельной странице, которой дадим имя psw.php.

Создайте файл psw.php. Код этого файла будет содержать базовый HTML-код и код формы, ну, и для комфорта навигации можно добавить заголовок «Ввод пароля» и ссылку на главную страницу:


Ввод пароля

На главную


Мы не указали значение атрибута action, потому что скрипт будет в этом же файле.

Сохраните изменения, в адресной строке браузера наберите http://php/psw.php. Должна открыться страница с формой из текстового поля и кнопки «Проверить пароль «.

Осталось создать скрипт-обработчик формы. Скрипт должен делать следующее:

проверять, существует ли в поле формы переменная;

если существует — сходится ли она с заранее установленым паролем;

Читайте также:  Save file as utf 8 java

если пароль верен, перенаправить пользователя на секретную страницу;

если пароль НЕ верен, никуда не перенаправлять.

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

Вот так это будет выглядеть (скрипт зелёным):

if (isset ($_POST[‘psw’])) //если в поле формы существует переменная, то сравниваем её с заранее установленным паролем, в нашем случае пароль «12345»
if ($_POST[‘psw’] == ‘12345’) //если переменная из формы равна паролю, то
header (‘Location: secret.php?psw=12345’); //перенаправляем пользователя на секретную страницу
>
else //иначе, то есть, если данные из формы на пароль не похожи, то
header (‘Location: psw.php’); //оставляем пользователя на странице с формой
>
exit(); //и останавливаем скрипт
>
?>

Ввод пароля

На главную


Вот и всё, ничего сложного. Думаю, в комментариях всё объясняется достаточно подробно.

Единственное, что могло вызвать недоумение, если вы внимательно всё делали, это вот эта строка:

.
header (‘Location: secret.php?psw=12345’);
.

Вернее, внешний вид ссылки. Такой вид ссылка имеет, когда данные передаются методом GET. Для чего это было нужно здесь, вы поймёте, выполняя упражнение дальше.

А дальше нужно ещё уделить внимание файлу secret.php. Открываем его в редакторе. В код этого файла нужно добавить скрипт, который запретит вход с главной страницы (как вы помните, именно с неё ведёт сюда ссылка), а всех, кто попытается попасть на секретную страницу, минуя форму проверки пароля, направит к форме.

Делается это очень просто, в код файла secret.php добавляем следующее:

if ($_GET[‘psw’] != ‘12345’) //вот здесь-то и проверяется, есть ли в ссылке, сформированной методом GET, наш пароль. И если пароля «12345» в ссылке нет, то
header (‘Location: psw.php’); //пользователь перенаправляется на страницу с формой
exit(); //и скрипт останавливается
>
?>

Секретная страница

На главную

Сохраните все изменения в файлах и обновите страницы в браузере.

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

Надеюсь, у вас всё получилось.

Но у такого способа организации секретного раздела есть недостаток: при выходе с секретной страницы потом приходится заново вводить пароль. На практике так не делается, а пользоватль имеет доступ ко всем защищённым страницам в процессе всего своего пребывания на сайте. Такая возможность реализуется при помощи сессий и cookies.

Читайте также:  Фсс эрс java lang exceptionininitializererrorjava lang exceptionininitializererror

P. S. Если Вы хотите научиться создавать PHP-сайты профессионально и сэкономить на освоении программирования несколько лет, то Вам сюда.

«PHP + MySQL для начинающих»

P. S. Остальные уроки и статьи по PHP Вы найдёте как всегда здесь. Все возникающие вопросы Вы можете задать, прислав мне письмо на электроный адрес (см. подпись к выпуску) или через форму для добавления комментариев на страницах сайта.

Автор расылки: Андрей Чернобай
kapitansg@yandex.ru

Источник

Шифрование отдельной части PHP-скрипта

Многие из тех, кто программируют на PHP, сталкивались с необходимостью шифрования своих скриптов в байткод для передачи на сторону. Слава богу, в наши дни существует огромный ассортимент PHP Encoder’ов, — как говорится, на любой вкус и цвет!

Мы же в своей работе столкнулись с нетривиальной задачей. Требовалось скрыть лишь некоторую часть кода, — функцию, содержимое которой не должен увидеть никто, кроме нас.

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

Что делать? Первое, что пришло на ум — так называемые обфускаторы, то есть «запутывальщики» кода. При этом такой код может быть загружен без необходимости дополнительных модулей loader’ов для PHP, что является плюсом. Минусом же является то, что даже самый лютый обфускатор, который удалось найти, шаг за шагом ломался в течение 15-20 минут без излишней спешки.

На полке тем временем пылился старый добрый Zend Encoder 3.6. Понятно, что encoder’ом часть скрипта не зашифруешь, но задача требовала решения. Если посмотреть в получившийся зашифрованный файл, то можно обнаружить некоторую часть PHP-кода в начале каждого файла, а именно:

  1. 3272 ;
  2. /* This is not a text file ! */
  3. print «\n» ;
  4. print «\n» ;
  5. print «&# 38 ; lt ; h1 > Zend Optimizer not installed < /h1 >«;
  6. print «This file was encoded by the Zend Encoder / Zend SafeGuard Suite\n»;
  7. print «In order to run it, please install the freely available Zend Optimizer, version 2.1.0 or later.\n»;
  8. print » < h2 >What is the Zend Optimizer? < /h2 >
  9. «;
  10. print < < < EOM
  11. The Zend Optimizer is one of the most popular PHP plugins for performance-improvement , and has been freely available since the early days of PHP 4 . It improves performance by taking PHP ‘ s intermediate code through multiple Optimization Passes , which replace inefficient code patterns with efficient code blocks . The replacement code blocks perform exactly the same operations as the original code , only faster .
  12. In addition to performance-improvement , the Zend Optimizer also enables PHP to transparently load files encoded by the Zend Encoder or Zend SafeGuard Suite .
  13. The Zend Optimizer is a freely-available product from Zend Technologies . Zend Technologies is the company that develops the scripting engine of PHP , also known as the Zend Engine .
  14. EOM ;
  15. print «\n» ;
  16. exit ();
  17. ? >

Этот кусок создается на случай, если на сервере не установлен Zend Optimizer, и при загрузке любого шифрованного файла заявляет на весь мир, что пора бы задуматься о смене системного администратора :). Но нас больше привлекло другое. Что же это за загадочное «@Zend; \n 3272;» в первых строчках скрипта? Опытным путем установлено, что 3272 — это количество байт, заключенное между строчками «/* This is not a text file! */» и «exit();», умноженное на два. При этом конструкции типа «\n» и «

Далее задача свелась к размещению основного («видимого») кода на место этой Zend Encoder’овской занавески и написанию лоадера, который бы исполнил «видимый» скрипт после основного зашифрованного.

Итогом стал вполне простой файл:

  1. function Secret()
  2. // наша секретная функция
  3. >
  4. // загрузчик «видимого» скрипта:
  5. $script = «» ;
  6. $file = file($_SERVER[ «script_FILENAME» ]);
  7. foreach ($file as $k => $v)
  8. if ($k >= 3)
  9. $script .= $v;
  10. if (substr($v, 0, 7) == «exit();» ) break ;
  11. >
  12. >
  13. eval($script);
  14. exit;

Далее мы шифруем этот файл и вместо Encoder’овской заглушки ставим нужный нам скрипт.

Осталось лишь подсчитать количество байт в нашем «видимом» скрипте, дабы правильно установить значение для Zend Optimizer’а во второй строчке файла (после «@Zend»). Было лень высчитывать его вручную, поэтому написали еще один скрипт с двумя циклами: в первом цикле создавалось некоторое количество копий файла с разными «около-правдивыми» значениями байт, а во втором все эти скрипты дергались wget’ом. Скрипт с правильным значением вернет 200-й заголовок вместо 500-го.

Все готово. Итоговый файл содержит «видимую» часть скрипта и байткод. Если сервер сконфигурирован с модулем Zend Optimizer’а, то при вызове скрипта сначала исполнится его зашифрованная часть, а после — та, которую мы не скрываем. В некоторых коммерческих задачах это действительно очень необходимо.

Источник

Оцените статью