[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита от ложного запуска скрипта
kirik
Многие из вас, из них и из нас, вероятно, защищали свои скрипты от прямого обращения примерно таким образом (.htaccess не берем в рассчет):
if(!defined('CONST')) {
exit('Хакер?');
}

Ну или таким:
if(!defined('CONST')) exit('Хакер?');

Мне всегда не нравилась эта строчка, и совсем недавно вчера я неожиданно для себя открыл абсолютно очевидное и невероятное решение этого "недоразумения". Все просто и чисто как ясный день в начале января.
defined('CONST') or die;

и все smile.gif Никаких тебе if и восклицательных знаков. Вполне аккуратно и в одну строчку smile.gif

Вот smile.gif



Спустя 6 часов, 49 секунд (3.11.2010 - 10:46) ИНСИ написал(а):
kirik я видел такую защиту на многих cms. Не мог бы в двух словах сказать, как и что надо делать?

Спустя 1 минута, 38 секунд (3.11.2010 - 10:47) DmitryOpalev написал(а):
Если константа (вроде она) есть - все хорошо (гуд), если нет, обрываем скрипт... да?

Спустя 9 минут, 44 секунды (3.11.2010 - 10:57) sergeiss написал(а):
Красивое решение smile.gif +1

По лаконичности напоминает известное "со щитом или на щите" wink.gif

Спустя 8 часов, 33 минуты, 45 секунд (3.11.2010 - 19:31) kirik написал(а):
Цитата (DmitryOpalev @ 3.11.2010 - 02:47)
да?

Ага smile.gif
Цитата (welbox2 @ 3.11.2010 - 02:46)
Не мог бы в двух словах сказать, как и что надо делать?

Вот небольшой пример. Есть два файла:
1.php
$var = 1;
include('2.php');

2.php
echo $var;


Если вызвать файл 2.php, то мы получим нотис о несуществующей переменной, так как задается она только в файле 1.php. Чтобы запретить прямое обращение к скрипту 2.php и используется то, о чем я писал в первом посте.

1.php
define('OK', 1); // объявляем константу, которую будем проверять в других файлах
$var = 1;
include('2.php');

2.php
defined('OK') or die; // если константа объявлена (тоесть файл вызван инклюдом из файла, где эта константа объявлена), то продолжаем работу скрипта, ну а если константы нет - умираем smile.gif
echo $var;

Спустя 35 минут, 4 секунды (3.11.2010 - 20:06) ИНСИ написал(а):
kirik супер объяснил, но почему у тебя стоит: include('1.php');? То есть он вставляет сам себя? Может там файл 2.php надо вставить?

Спустя 1 час, 25 минут, 39 секунд (3.11.2010 - 21:31) inpost написал(а):
welbox2
Опечатался, с кем не бывает =)

Спустя 27 минут, 26 секунд (3.11.2010 - 21:59) kirik написал(а):
Цитата (welbox2 @ 3.11.2010 - 12:06)
Может там файл 2.php надо вставить?

Ага, сори smile.gif Поправил.

Спустя 22 минуты, 23 секунды (3.11.2010 - 22:21) ИНСИ написал(а):
kirik а я сижу и думаю .... smile.gif smile.gif smile.gif

Большое спасибо! Очень познавательно и круто smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.