2013-01-01 10 views
6

ich vor kurzem einige PHP-Quellcode graste, insbesondere diejenigen der Forum-Software wie phpBB und esotalkPHP - Website-Sicherheit globale Variable mit

ich eine Sache bemerkt, verwendet die meisten von ihnen eine globale Variable zu Beginn ihrer Seite als eine Art Sicherheit wie so:

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

Was für eine Art von Sicherheit ist das? Ich verstehe nicht. Können Sie mir erklären, was das verhindert und wie?

Dank, Vidhu

+2

Dies um Zugriff auf das Skript von außerhalb der Anwendung zu verhindern – SaidbakR

Antwort

7

es funktioniert durch den PHP-Skript ausgeführt werden sicherstellen, dass nicht, wenn der Rahmen nach oben begonnen hat. Auf diese Weise kann der Benutzer kein Skript ausführen, ohne die richtige Seite zu durchlaufen.

Hier ist ein Beispiel. Wir haben 2-Dateien:

index.php

<?php 
    define("_MY_FRAMEWORK", 1); 
    echo 'started'; 
    require('script.php'); 
?> 

und script.php

<?php 
    if (!defined("_MY_FRAMEWORK")) exit; 
    echo "my script"; 
?> 

Wenn Sie script.php direkt ausführen, wird nichts passieren, weil _MY_FRAMEWORK ist nicht definiert. Es wird beendet.

Wenn Sie jedoch index.php ausführen, das script.php enthält, wird das Skript fortgesetzt, weil Sie zuerst _MY_FRAMEWORK definiert haben. Sie erhalten die volle Ausgabe: started gefolgt von my script.

@Gumbo macht einen guten Punkt: Wenn Sie difanne vorher nicht gesehen haben, definiert es eine Konstante, die nicht geändert werden kann. Die user contributions to the PHP documentation kann hilfreich sein, um zu verstehen, wie es funktioniert.

+2

Sie sollten erwähnen, dass dies Konstanten und keine Variablen sind. – Gumbo

1

Dies verhindert auch die variable Manipulation durch Verwendung von register_globals. Wenn register_globals in der Datei php.ini aktiviert ist, können Benutzer Variablen im Skript ändern, indem sie die Variable in der URL ändern. Dies würde ihnen jedoch nicht erlauben, den Wert von konstanten Variablen zu ändern, die mit der define-Funktion definiert wurden

1

Dies sind globale Konstanten. Damit stellen sie sicher, dass ihre Software so läuft, wie sie gedacht ist.