Aktueller Standort: Startseite> Neueste Artikel> Gibt es ein Risiko sensibler Informationen in Konstanten?

Gibt es ein Risiko sensibler Informationen in Konstanten?

M66 2025-05-24

In PHP ist Get_Defined_Constants () eine Funktion, die alle definierten Konstanten (einschließlich benutzerdefinierter und PHP-Systeme vordefinierte Konstanten) und deren entsprechende Werte erhält. Diese Funktion ist sehr nützlich, wenn Debugging, Konfigurationsprüfung oder Entwicklung von Debugging -Tools. Wenn sie jedoch nicht ordnungsgemäß verwendet werden, kann sie auch Sicherheitsrisiken verursachen, insbesondere in Szenarien mit sensiblen Informationen.

Funktion Einführung

get_defined_constants ([bool $ categorize = false]): Array
Diese Funktion gibt alle definierten Konstanten im aktuellen Skript zurück. Wenn der Parameter $ categorize auf true festgelegt wird, wird das zurückgegebene Array vom Modul klassifiziert, um die Identifizierung der Quelle verschiedener Konstanten zu erleichtern.

Zum Beispiel:

 $constants = get_defined_constants();
print_r($constants);

Dieser Code gibt alle definierten Konstanten und deren Werte aus, einschließlich Konstanten wie E_Error , PHP_VERSION und vom Benutzer definierten Konstanten durch define () oder const .

Potenzielles Risiko sensibler Informationen

Obwohl die meisten systemvorbereiteten Konstanten harmlos sind, können benutzerdefinierte Konstanten sensible Informationen enthalten, wie z. B. Datenbankanmeldeinformationen, API-Schlüssel, Pfadinformationen usw. Zum Beispiel:

 define('DB_PASSWORD', 'SuperSecretPassword123');
define('API_KEY', 'sk_live_abc123xyz789');

Wenn das Rückgabeergebnis von get_defined_constants () im Debugging -Tool oder im Protokollierungssystem direkt ausgeht und externen Benutzern ausgesetzt ist, können vertrauliche Informationen durchgesickert werden. Dies ist besonders gefährlich, wenn Online-Umgebungen in Mehrbenutzerumgebungen oder Debugging-Tools bereitgestellt werden.

Insbesondere auf einigen Debug -Seiten oder Fehlerbehandlungssystemen können Entwickler globale Zustände gewöhnlich ausgeben, um Probleme zu analysieren, wie z. B.:

 echo '<pre>';
print_r(get_defined_constants());
echo '</pre>';

Wenn eine solche Ausgabe nicht durch Berechtigungen eingeschränkt wird, kann ein Angreifer auf die Seite zugreifen, um konstante Inhalte mit sensiblen Daten zu erhalten.

Reale Fallanalyse

Angenommen, ein PHP -Debugging -Tool (z. B. ein benutzerdefinierter Fehlermonitor) wird unter https://debug.m66.net/debug.php bereitgestellt und enthält den folgenden Code:

 if ($_GET['debug'] === '1') {
    echo '<pre>';
    print_r(get_defined_constants());
    echo '</pre>';
}

Sobald der Debug -Switch aktiviert ist, gibt die Seite alle konstanten Informationen aus. Wenn einige Konstanten Folgendes enthalten:

 define('PAYMENT_GATEWAY_SECRET', 'sk_test_abc123');
define('AWS_SECRET_ACCESS_KEY', 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY');

Angreifer können diese Informationen leicht lesen und schwerwiegende Sicherheitskonsequenzen haben.

Beratung zur Risikominderung

Um sensible Informationen zu verhindern, wird empfohlen, die folgenden Best Practices zu befolgen, wenn Sie Get_Defined_Constants () verwenden:

  1. Vermeiden Sie es, alle Konstanten in Produktionsumgebungen auszugeben . Verwenden Sie diese Funktion nur in lokalen oder vertrauenswürdigen Entwicklungsumgebungen.

  2. Klassifizierungsmanagement sensibler Informationen . Platzieren Sie die sensible Konfiguration in einer separaten Konfigurationsdatei und stellen Sie sicher, dass die Datei nicht als Konstante definiert ist, sondern im Speicher als Variable gespeichert ist.

  3. Zugangskontrolle . Alle Schnittstellen, die Debugging -Informationen enthalten, müssen authentifiziert sein und der öffentliche Zugriff ist verboten.

  4. Bedingter Filterausgang . Überprüfen Sie den konstanten Namen vor der Ausgabe, z. B. ohne Konstanten, die sensible Schlüsselwörter wie Geheimnis , Schlüssel , Passwort usw. enthalten,:

 $constants = get_defined_constants();
foreach ($constants as $name => $value) {
    if (preg_match('/(SECRET|KEY|PASSWORD)/i', $name)) {
        continue;
    }
    echo "$name => $value\n";
}
  1. Log -Desensibilisierung . Wenn konstante Informationen in das Protokollsystem geschrieben werden, stellen Sie sicher, dass Sie die Desensibilisierung vor dem Schreiben durchführen.

Zusammenfassen

get_defined_constants () ist eine leistungsstarke Funktion, aber "Je größer die Fähigkeit ist, desto größer ist die Verantwortung". Entwickler müssen potenzielle Sicherheitsrisiken bei der Verwendung vollständig berücksichtigen, insbesondere in Kontexten mit sensiblen Informationen. Durch gute Zugangskontrolle, Ausgangsfilterung und Umweltisolation können die durch die Verwendung dieser Funktion eingeführten Risiken effektiv reduziert und die Gesamtsicherheit der Anwendung gewährleistet werden.