php - безопасность веб-сайта с использованием глобальной переменной


Недавно я просматривал некоторые исходные коды php, в частности, такие программы для форумов, как phpbb и esotalk

Я заметил одну вещь, большинство из них использовали глобальную переменную в начале своей страницы в качестве своего рода защиты, например:

if (!defined("IN_ESOTALK")) exit; //For esotalk
if (!defined("IN_PHPBB")) exit; //FOR phpbb

Что это за безопасность? Я не понимаю. Не могли бы вы объяснить мне, что это мешает и как?

Спасибо, Видху

Author: Krimson, 2013-01-02

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 может быть полезен для понимания того, как это работает.

 7
Author: Levi, 2013-01-01 22:32:17

Это также предотвращает манипулирование переменными с помощью register_globals.

Если в php.ini включена функция register_globals, пользователи могут изменять переменные в скрипте, изменяя переменную в URL-адресе, но это не позволит им изменять значения постоянных переменных, которые были определены с помощью функции define

 1
Author: Ingmaras Keleras, 2013-01-01 22:02:30

Это глобальные константы. С их помощью они удостоверяются, что их программное обеспечение работает так, как оно предназначено.

 1
Author: Nox, 2013-01-01 22:05:17