Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Sicherheit in PHP-Code

Die Sicherheitsregeln für PHP-Code in Exponential an einem Ort - Eingaben validieren, Zahlen casten, SQL und Ausgaben je nach Kontext maskieren, POSTs mit dem Formular-Token schützen, Berechtigungen an jedem…

Download as PDF

Address: https://doc.exponential.earth/learninminutes/exphelp/viewer/help/php-developers/security-in-php-code.md

On this page

This page is a translation. Read the English original

Sicherheit in PHP-Code

Diese Seite richtet sich an PHP-Entwickler, die Code schreiben, der Anfragen, Daten oder Dateien verarbeitet. Sie sammelt die Regeln, die Exponential-Code sicher halten, und verweist auf die Seite, die jede davon erklärt. Der Sicherheitsstandard des Projekts ist der Sicherheitsstandard; Administratoren härten die Installation mit Sicherheitshärtung.

Inhalt

  1. Die Regeln
  2. Woher Eingaben kommen
  3. Berechtigungen an jedem Einstiegspunkt
  4. Weiterleitungen
  5. Geheimnisse
  6. Dateien und Uploads
  7. Was der Kernel für Sie tut
  8. Eine Schwachstelle melden

Die Regeln

#RegelSeite
1Validieren Sie Eingaben dort, wo sie hereinkommen: Zahlen mit (int) und (float) casten, Auswahlwerte gegen Allow-Listen prüfen, Längen begrenzenEingaben validieren und casten
2Maskieren Sie Strings für SQL mit $db->escapeString(), oder verwenden Sie Bedingungen von eZPersistentObjectSQL mit eZDB, sicher
3Maskieren Sie Ausgaben für ihren Kontext: |wash in Templates, htmlspecialchars() mit ausdrücklichen Flags in PHP, json_encode() für JSONAusgaben aus PHP maskieren
4Ändern Sie Daten nur per POST, geschützt durch das Formular-TokenCSRF-Schutz und ezformtoken
5Prüfen Sie Berechtigungen in jeder View, Fetch-Funktion, Serverfunktion, REST-Aktion und jedem BefehlBerechtigungen an jedem Einstiegspunkt
6Leiten Sie nur an Adressen weiter, die die Regeln des Kernels akzeptierenWeiterleitungen
7Halten Sie Geheimnisse in den Einstellungen der Installation, niemals in Code, URLs oder LogsGeheimnisse
8Speichern Sie Dateien über den Kernel; prüfen Sie Uploads nach Inhalt und GrößeDateien und Uploads
9Fügen Sie in von Ihnen erzeugtes Markup keine Inline-Skripte und kein style="" einContent Security Policy für Ihren Code

Woher Eingaben kommen

Behandeln Sie all das als nicht vertrauenswürdig:

  • $Params und ungeordnete Parameter einer View: Strings aus der Adresse.
  • eZHTTPTool::instance()->postVariable(), getVariable(), variable(): die Anfrage. Lesen Sie Eingaben über eZHTTPTool, nicht direkt aus $_POST und $_GET, damit die Anfragevorbereitung des Kernels greift (unter Velocity bereitet er sie pro Anfrage vor).
  • Argumente von ezjscore-Serverfunktionen und REST-Routen.
  • Einstellungen: von Menschen geschrieben, manchmal von anderen Erweiterungen.
  • Die Datenbank: früher von jemandem geschrieben, vielleicht von einem Import.
  • Header wie Referer, Host und X-Forwarded-For; verwenden Sie die Behandlung vertrauenswürdiger Proxys des Kernels, nicht den rohen Header (Vertrauenswürdige Proxys).

Berechtigungen an jedem Einstiegspunkt

$user = eZUser::currentUser();
$access = $user->hasAccessTo( 'acmereport', 'read' );
if ( $access['accessWord'] === 'no' )
    return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
  • accessWord ist yes, no oder limited; bei limited prüfen Sie die Einschränkung gegen das Objekt (oder verwenden Sie für Inhalte $node->canRead(), $object->canEdit()).
  • Die functions einer View in module.php prüft der Kernel, bevor Ihr Code läuft, aber Fetch-Funktionen, ezjscore-Serverfunktionen, REST-Aktionen und Befehle werden von Stellen aufgerufen, die nicht prüfen: Sie müssen selbst prüfen (Zugriffskontrolle im Code).
  • Inhaltslisten aus eZContentObjectTreeNode::subTreeByNodeID() wenden content/read des aktuellen Benutzers an, sofern Sie nicht 'Limitation' => array() übergeben; übergeben Sie das niemals für Ergebnisse, die Benutzer sehen.

Weiterleitungen

Leiten Sie niemals ungeprüft an eine Adresse weiter, die aus der Anfrage stammt. eZRedirectManager (kernel/classes/ezredirectmanager.php) enthält die Regeln: Pfade derselben Site, der aktuelle Host oder Hosts aus site.ini [SiteSettings] AllowedRedirectHosts, keine Steuerzeichen oder Backslashes, kein // und keine fremden Schemata, auch nicht prozentkodiert, keine Zugangsdaten in der URL. eZRedirectManager::safeURI( $uri ) prüft eine Adresse; redirectTo() und returnURI() wählen ein sicheres Ziel mit einem Standardwert (Sichere Weiterleitungen).

Geheimnisse

  • API-Schlüssel, Passwörter und Tokens liegen in settings/override/ der Installation oder in Umgebungsvariablen, niemals im Repository Ihrer Erweiterung und niemals in einer URL.
  • Protokollieren Sie sie niemals; geben Sie sie niemals in der Debug-Ausgabe aus; maskieren Sie sie in Fehlermeldungen.
  • Vergleichen Sie Geheimnisse mit hash_equals(); speichern Sie Tokens nach Möglichkeit als Hashes (die API-Schlüssel des Kernels speichern nur einen gesalzenen HMAC-SHA-256-Hash, expservices-Tokens nur einen SHA-256-Hash).
  • Erzeugen Sie Zufallswerte mit random_bytes() oder random_int().

Dateien und Uploads

  • Lesen Sie Uploads über eZHTTPFile::canFetch() und eZHTTPFile::fetch(); prüfen Sie den Typ nach Inhalt und die Größe gegen eine Allow-Liste.
  • Speichern Sie Dateien bevorzugt als Inhalte (die Klassen file und image), was Speicherung, Clustering und SVG-Bereinigung übernimmt (SVG-Bilder).
  • Bauen Sie niemals einen Dateipfad aus einer Eingabe, ohne ihn zu normalisieren und zu prüfen, dass er im erwarteten Verzeichnis bleibt.
  • autoload.php hebt bei jeder Anfrage die Registrierung des Stream-Wrappers phar:// auf (sofern die Laufzeitumgebung nicht selbst aus einem Archiv läuft), sodass eine hochgeladene Datei, die zugleich ein gültiges phar ist, niemals als Code eingebunden werden kann. Registrieren Sie ihn nicht erneut.

Was der Kernel für Sie tut

SchutzWo
Formular-Token bei jedem POST angemeldeter Benutzerezformtoken
|wash maskiert einfache Anführungszeichen unter jeder PHP-Versiondie Template-Engine, seit 6.0.15
Sicherheits-Header auf jeder SeiteezpKernelWeb::securityHeaders()
eine Content Security Policy für die AdministrationContent Security Policy
Einordnung von Sondierungen und Angriffen in security.logAnfrage-Logs
ein Audit-Trail sensibler AktionenAudit-Trail

Eine Schwachstelle melden

Wenn Sie ein Sicherheitsproblem in Exponential finden, melden Sie es vertraulich an die Adresse in SECURITY.md im Wurzelverzeichnis des Repositorys, nicht in einem öffentlichen Issue.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x