php - безопасность веб-сайта с использованием глобальной переменной
Недавно я просматривал некоторые исходные коды php, в частности, такие программы для форумов, как phpbb и esotalk
Я заметил одну вещь, большинство из них использовали глобальную переменную в начале своей страницы в качестве своего рода защиты, например:
if (!defined("IN_ESOTALK")) exit; //For esotalk
if (!defined("IN_PHPBB")) exit; //FOR phpbb
Что это за безопасность? Я не понимаю. Не могли бы вы объяснить мне, что это мешает и как?
Спасибо, Видху
3 answers
Это работает, убедившись, что php-скрипт не запускается, если платформа не запущена. Таким образом, пользователь не сможет выполнить скрипт, не пройдя соответствующую страницу.
Вот пример. У нас есть 2 файла:
Index.php
<?php
define("_MY_FRAMEWORK", 1);
echo 'started';
require('script.php');
?>
И script.php
<?php
if (!defined("_MY_FRAMEWORK")) exit;
echo "my script";
?>
Если вы запустите script.php напрямую ничего не произойдет, потому что _MY_FRAMEWORK
не был определен. он выйдет.
Однако, если вы запустите index.php, который включает в себя script.php, сценарий будет продолжен потому что вы сначала определили _MY_FRAMEWORK
. Вы получите полный вывод: started
, за которым следует my script
.
@Gumbo делает хороший вывод: если вы раньше не видели define, он определяет константу, которую нельзя изменить. Вклад пользователей в документацию PHP может быть полезен для понимания того, как это работает.
Это также предотвращает манипулирование переменными с помощью register_globals.
Если в php.ini включена функция register_globals, пользователи могут изменять переменные в скрипте, изменяя переменную в URL-адресе, но это не позволит им изменять значения постоянных переменных, которые были определены с помощью функции define
Это глобальные константы. С их помощью они удостоверяются, что их программное обеспечение работает так, как оно предназначено.