> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/de/hacking-tools/web/php-security-scanner.md).

# PHP-Sicherheitsscanner

PHP Security Scanner ist ein statisches Prüfwerkzeug nur für Abonnenten, das dazu dient, gefährliche PHP-Funktionen, schwache Konfigurationen, riskante Source-to-Sink-Pfade und Hinweise auf Privilegieneskalation in PHP-Anwendungen zu finden.

Verwende den Funktionsfinder als primäre Triage-Ansicht: Suche nach Funktionsname, Kategorie, Auswirkung oder Schweregrad.

## Funktionsfinder

<table data-view="cards" data-full-width="true" data-search="true"><thead><tr><th>Funktion / Muster</th><th>Kategorie</th><th>Schweregrad</th><th>Auswirkungen</th><th>Scanner-Prüfung</th><th>Behebung</th></tr></thead><tbody><tr><td><code>system()</code></td><td>Befehlsausführung</td><td>Kritisch</td><td>RCE als Web-User</td><td>Markiere manipulierte Befehlsstrings, Interpolation, Verkettung und vom Benutzer gesteuerte Argumente.</td><td>Verwende native PHP-APIs oder strikt zulässige Befehle und Argumente aus der Positivliste.</td></tr><tr><td><code>exec()</code></td><td>Befehlsausführung</td><td>Kritisch</td><td>RCE, Erfassung der Befehlsausgabe</td><td>Prüfe, ob Eingaben aus Request, Cookie, DB, Datei oder CLI den Befehl erreichen.</td><td>Entferne die Shell-Nutzung oder kapsle feste Befehle hinter Positivlisten.</td></tr><tr><td><code>shell_exec()</code></td><td>Befehlsausführung</td><td>Kritisch</td><td>RCE mit zurückgegebener Ausgabe</td><td>Erkenne dynamische Befehlszusammenstellung und in Antworten ausgegebene Ausgabe.</td><td>Ersetze es durch sichere Bibliotheksaufrufe.</td></tr><tr><td><code>passthru()</code></td><td>Befehlsausführung</td><td>Kritisch</td><td>RCE mit Roh-Ausgabe</td><td>Hochstufen, wenn aus Web-Routen oder Dateiverarbeitung erreichbar.</td><td>Shell-Aufrufe vermeiden; feste Eingabesätze validieren.</td></tr><tr><td><code>proc_open()</code></td><td>Prozesssteuerung</td><td>Kritisch</td><td>RCE, Prozessinteraktion</td><td>Befehl, Descriptor-Spezifikation, Umgebung und Arbeitsverzeichnis prüfen.</td><td>Eingeschränkte Worker und feste Befehlsvorlagen verwenden.</td></tr><tr><td><code>popen()</code></td><td>Prozesssteuerung</td><td>Kritisch</td><td>RCE über Prozess-Stream</td><td>Markiere manipulierte Befehlsstrings und Stream-Lesezugriffe.</td><td>Wenn möglich durch PHP-Stream-/Datei-APIs ersetzen.</td></tr><tr><td><code>pcntl_exec()</code></td><td>Prozesssteuerung</td><td>Kritisch</td><td>Prozessersetzung, Risiko der Privilegieneskalation</td><td>In CLI-, Cron-, SUID-, sudo- und Worker-Kontexten hochstufen.</td><td>Ausführung privilegierter Interpreterpfade entfernen.</td></tr><tr><td><code>`backticks`</code></td><td>Befehlsausführung</td><td>Kritisch</td><td>Versteckte Shell-Ausführung</td><td>Erkenne Variable-Interpolation innerhalb von Backtick-Ausdrücken.</td><td>Durch explizite sichere APIs ersetzen.</td></tr><tr><td><code>eval()</code></td><td>Codeausführung</td><td>Kritisch</td><td>Beliebige PHP-Ausführung</td><td>Alle Verwendungen markieren; hochstufen, wenn der ausgewertete String dynamisch ist.</td><td>Verwende Closures, Parser, feste Dispatch-Maps oder sichere Vorlagen.</td></tr><tr><td><code>assert()</code></td><td>Codeausführung</td><td>Hoch</td><td>Risiko durch Legacy-Codeausführung</td><td>String-Assertions in älteren PHP-Codebasen markieren.</td><td>Nur boolesche Assertions verwenden; dynamische Strings entfernen.</td></tr><tr><td><code>create_function()</code></td><td>Codeausführung</td><td>Hoch</td><td>Legacy-evaluierten Code</td><td>Alte Plugins und Kompatibilitätscode für PHP 5/7 erkennen.</td><td>Durch anonyme Funktionen ersetzen.</td></tr><tr><td><code>preg_replace()</code> durch <code>/e</code></td><td>Codeausführung</td><td>Hoch</td><td>Legacy-evaluierter Ersatz</td><td>Auswertung von Legacy-Regex-Ersetzungen markieren.</td><td>Verwenden Sie <code>preg_replace_callback()</code>.</td></tr><tr><td><code>mb_ereg_replace()</code> durch <code>e</code></td><td>Codeausführung</td><td>Hoch</td><td>Risiko durch ausgewerteten Ersatz</td><td>Dynamische Muster und Ersatzwerte prüfen.</td><td>Callback-sichere Logik ohne Auswertung verwenden.</td></tr><tr><td><code>include</code></td><td>Dateieinbindung</td><td>Kritisch</td><td>LFI/RFI bis zur Codeausführung</td><td>Vom Benutzer gesteuerte Pfade, Wrapper und Erweiterungstricks markieren.</td><td>Benutzerauswahlen auf feste Dateien abbilden.</td></tr><tr><td><code>include_once</code></td><td>Dateieinbindung</td><td>Kritisch</td><td>LFI/RFI bis zur Codeausführung</td><td>Dynamische Include-Pfade und Autoload-Nebenwirkungen prüfen.</td><td>Feste Include-Maps und kanonische Pfade verwenden.</td></tr><tr><td><code>require</code></td><td>Dateieinbindung</td><td>Kritisch</td><td>Ausführung von Anwendungscode</td><td>Hochstufen, wenn der Pfad Request-Daten enthält.</td><td>Dynamische Dateisystem-Eingaben ablehnen.</td></tr><tr><td><code>require_once</code></td><td>Dateieinbindung</td><td>Kritisch</td><td>Ausführung von Anwendungscode</td><td>Framework-Loader, Plugin-Loader und Template-Pfade prüfen.</td><td>Nur Module aus der Positivliste verwenden.</td></tr><tr><td><code>file_get_contents()</code></td><td>Datei-/Netzwerkzugriff</td><td>Hoch</td><td>LFI, SSRF, Offenlegung von Geheimnissen</td><td>Markiere manipulierte Pfade, URLs und <code>php://input</code> Parsing.</td><td>Pfade kanonisieren und riskante Schemas blockieren.</td></tr><tr><td><code>readfile()</code></td><td>Dateilesen</td><td>Hoch</td><td>Direkte Offenlegung von Dateien</td><td>Pfad-Traversal und öffentliche Download-Handler erkennen.</td><td>Dateien anhand der ID aus freigegebenen Verzeichnissen bereitstellen.</td></tr><tr><td><code>fopen()</code></td><td>Datei-/Netzwerkzugriff</td><td>Hoch</td><td>LFI, SSRF, beliebiges Schreiben</td><td>Modus, Pfadquelle und URL-Wrapper nachverfolgen.</td><td>Schema, Modus und kanonischen Pfad validieren.</td></tr><tr><td><code>file()</code></td><td>Dateilesen</td><td>Hoch</td><td>Zeilenbasierte Offenlegung von Dateien</td><td>Vom Benutzer gesteuerte Dateinamen markieren.</td><td>Feste Speicherpfade und Grenzprüfungen verwenden.</td></tr><tr><td><code>SplFileObject</code></td><td>Dateizugriff</td><td>Hoch</td><td>LFI, Pfad-Traversal</td><td>Dynamische Konstruktorargumente erkennen.</td><td>Anwenden <code>realpath()</code> Grenzdurchsetzung.</td></tr><tr><td><code>file_put_contents()</code></td><td>Dateischreiben</td><td>Kritisch</td><td>Web-Shell, Überschreiben, Config-Verunreinigung</td><td>Hochstufen, wenn Dateiname und Inhalt manipuliert sind oder der Pfad öffentlich ist.</td><td>Dateinamen generieren und außerhalb des Webroots schreiben.</td></tr><tr><td><code>fwrite()</code></td><td>Dateischreiben</td><td>Hoch</td><td>Beliebige Dateimodifikation</td><td>Herkunft des Handles verfolgen von <code>fopen()</code>.</td><td>Schreibbare Verzeichnisse und Dateitypen einschränken.</td></tr><tr><td><code>copy()</code></td><td>Dateischreiben / Verschieben</td><td>Hoch</td><td>Dateipflanzung oder Überschreiben</td><td>Taint von Quelle und Ziel prüfen.</td><td>Feste Ziele und kollisionssichere Namen verwenden.</td></tr><tr><td><code>rename()</code></td><td>Dateiverschiebung</td><td>Hoch</td><td>Upload-Bypass, Überschreiben</td><td>Vom Benutzer gesteuerte Zielpfade markieren.</td><td>Generierte Speichernamen verwenden.</td></tr><tr><td><code>unlink()</code></td><td>Dateilöschen</td><td>Hoch</td><td>Beliebige Dateilöschung</td><td>Manipulierte Pfade und Traversal erkennen.</td><td>Nach Objekt-ID löschen, nicht nach Rohpfad.</td></tr><tr><td><code>chmod()</code></td><td>Berechtigungen</td><td>Hoch</td><td>Abschwächung von Privilegien</td><td>Markiere weitreichende Modi wie <code>0777</code> und manipulierte Pfade.</td><td>Modi mit minimalen Rechten und feste Pfade verwenden.</td></tr><tr><td><code>chown()</code> / <code>chgrp()</code></td><td>Eigentümerschaft</td><td>Hoch</td><td>Manipulation von Privilegien</td><td>Deployment- und Admin-Skripte prüfen.</td><td>Eigentümerwechsel nicht über Anwendungseingaben verfügbar machen.</td></tr><tr><td><code>mkdir()</code></td><td>Dateisystem</td><td>Mittel</td><td>Pfad-Traversal, schwache Berechtigungen</td><td>Dynamische Pfade und zu freizügige Modi markieren.</td><td>Pfade normalisieren und strenge Berechtigungen setzen.</td></tr><tr><td><code>touch()</code></td><td>Dateisystem</td><td>Mittel</td><td>Dateierstellung, Missbrauch von Zeitstempeln</td><td>In Cron- oder privilegierten Verzeichnissen hochstufen.</td><td>Feste Pfade und Eigentumsprüfungen verwenden.</td></tr><tr><td><code>unserialize()</code></td><td>Deserialisierung</td><td>Kritisch</td><td>PHP-Objektinjektion</td><td>Alle Verwendungen mit Daten aus Request, Cookie, Upload, DB, Cache oder Queue markieren.</td><td>JSON verwenden oder einschränken <code>allowed_classes</code>.</td></tr><tr><td><code>Phar</code> / <code>phar://</code></td><td>Deserialisierung</td><td>Hoch</td><td>Objektinjektion durch Metadaten ausgelöst</td><td>Akzeptierte <code>phar://</code> Pfade und Dateifunktionen markieren, die Uploads berühren.</td><td>Wrapper blockieren und Pfade mit Objekt-Metadaten vermeiden.</td></tr><tr><td><code>__wakeup()</code></td><td>Magische Methode</td><td>Hoch</td><td>Objektinjektions-Gadget</td><td>Datei-, SQL-, Befehls- und Netzwerkaktionen prüfen.</td><td>Magische Methoden nebenwirkungsfrei halten.</td></tr><tr><td><code>__destruct()</code></td><td>Magische Methode</td><td>Hoch</td><td>Objektinjektions-Gadget</td><td>Hochstufen, wenn gelöscht, geschrieben, eingebunden oder ausgeführt wird.</td><td>Gefährliche Nebenwirkungen in Destruktoren vermeiden.</td></tr><tr><td><code>__toString()</code></td><td>Magische Methode</td><td>Mittel</td><td>Implizite Gadget-Ausführung</td><td>Template-Rendering- und Logging-Pfade prüfen.</td><td>Konvertierungsmethoden rein halten.</td></tr><tr><td><code>curl_exec()</code></td><td>Netzwerk / SSRF</td><td>Hoch</td><td>SSRF, Zugriff auf interne Dienste</td><td>URL, Weiterleitungen, Header, Proxy- und Protokolloptionen nachverfolgen.</td><td>Hosts aus der Positivliste erlauben und private Bereiche blockieren.</td></tr><tr><td><code>fsockopen()</code></td><td>Netzwerk</td><td>Hoch</td><td>Roher Zugriff auf das interne Netzwerk</td><td>Dynamische Host- und Portwerte markieren.</td><td>Ziele und Egress einschränken.</td></tr><tr><td><code>pfsockopen()</code></td><td>Netzwerk</td><td>Hoch</td><td>Persistenter Zugriff auf das interne Netzwerk</td><td>Lang laufende Dienstverbindungen prüfen.</td><td>Feste Endpunkte verwenden.</td></tr><tr><td><code>stream_socket_client()</code></td><td>Netzwerk</td><td>Hoch</td><td>SSRF und Protokollmissbrauch</td><td>Dynamische Schemas, Hosts und Ports markieren.</td><td>Netzwerkziele aus der Positivliste verwenden.</td></tr><tr><td><code>SoapClient</code></td><td>Netzwerk</td><td>Mittel</td><td>SSRF-ähnliche Anfragen</td><td>Dynamische WSDL- und Endpunktwerte prüfen.</td><td>Feste WSDLs verwenden und Weiterleitungen blockieren.</td></tr><tr><td><code>mysqli_query()</code></td><td>SQL</td><td>Hoch</td><td>SQL-Injection</td><td>Verkettete oder interpolierte SQL-Anweisungen markieren.</td><td>Prepared Statements verwenden.</td></tr><tr><td><code>mysqli_multi_query()</code></td><td>SQL</td><td>Hoch</td><td>Gestapelte SQL-Injection</td><td>Dynamische Mehrfachanfragen hochstufen.</td><td>Multi-Query-APIs für vom Benutzer beeinflusste Daten vermeiden.</td></tr><tr><td><code>PDO::query()</code></td><td>SQL</td><td>Hoch</td><td>SQL-Injection</td><td>Rohes Query-String- mit Variablen markieren.</td><td>Verwenden Sie <code>prepare()</code> und gebundene Parameter.</td></tr><tr><td><code>PDO::exec()</code></td><td>SQL</td><td>Hoch</td><td>SQL-Injection oder destruktives SQL</td><td>Admin-Aktionen und Migrationen prüfen.</td><td>Parametrisierte Anweisungen verwenden.</td></tr><tr><td><code>call_user_func()</code></td><td>Dynamischer Dispatch</td><td>Hoch</td><td>Missbrauch von Callbacks</td><td>Manipulierte Callback-Namen markieren.</td><td>Feste Dispatch-Maps verwenden.</td></tr><tr><td><code>call_user_func_array()</code></td><td>Dynamischer Dispatch</td><td>Hoch</td><td>Missbrauch von Callbacks mit dynamischen Argumenten</td><td>Quellen von Callback und Argumenten nachverfolgen.</td><td>Explizite Handler und typisierte Eingaben verwenden.</td></tr><tr><td><code>$fn()</code></td><td>Variable Funktion</td><td>Hoch</td><td>Beliebiger Funktions-Dispatch</td><td>Funktionsnamen aus Request- oder DB-Daten markieren.</td><td>Namen festen Funktionen zuordnen.</td></tr><tr><td><code>$object->$method()</code></td><td>Dynamische Methode</td><td>Hoch</td><td>Missbrauch von Method-Dispatch</td><td>Methodennamen aus Eingaben markieren.</td><td>Methoden-Maps aus der Positivliste verwenden.</td></tr><tr><td><code>ReflectionFunction</code></td><td>Reflection</td><td>Mittel</td><td>Dynamische Aufrufausführung</td><td>Reflektierte Namen und Aufruf prüfen.</td><td>Reflection auf interne Werkzeuge beschränken.</td></tr><tr><td><code>register_shutdown_function()</code></td><td>Verzögerter Callback</td><td>Mittel</td><td>Versteckter Ausführungspfad</td><td>Dynamische Callbacks und Argumente markieren.</td><td>Explizite feste Callbacks verwenden.</td></tr><tr><td><code>move_uploaded_file()</code></td><td>Hochladen</td><td>Hoch</td><td>Web-Shell, Überschreiben, Pfad-Traversal</td><td>Zielpfad, Erweiterungslogik, öffentlicher Speicherort und Verwendung des Originaldateinamens prüfen.</td><td>Dateien umbenennen, Erweiterungen aus der Positivliste erlauben, außerhalb des Webroots speichern.</td></tr><tr><td><code>getimagesize()</code></td><td>Upload-Validierung</td><td>Mittel</td><td>Schwache Inhaltsvalidierung</td><td>Markieren, wenn es als einzige Upload-Validierung verwendet wird.</td><td>Erweiterung, MIME, Inhalt und Speicher-Kontrollen kombinieren.</td></tr><tr><td><code>ZipArchive::extractTo()</code></td><td>Archivextraktion</td><td>Hoch</td><td>Zip Slip, beliebiges Schreiben</td><td>Namen der Archiveinträge und Extraktionsverzeichnis prüfen.</td><td>Jeden extrahierten Pfad kanonisieren.</td></tr><tr><td><code>phpinfo()</code></td><td>Informationsoffenlegung</td><td>Mittel</td><td>Leck von Konfiguration, Pfad, Modulen und Umgebung</td><td>Markieren, wenn außerhalb der lokalen Entwicklung erreichbar.</td><td>Aus der Produktion entfernen.</td></tr><tr><td><code>var_dump()</code> / <code>print_r()</code></td><td>Debug-Ausgabe</td><td>Niedrig</td><td>Daten- und Geheimnisleck</td><td>Hochstufen, wenn in Antworten oder Exception-Pfaden verwendet.</td><td>Strukturierte Logs mit Redaktion verwenden.</td></tr><tr><td><code>debug_backtrace()</code></td><td>Debug-Ausgabe</td><td>Mittel</td><td>Offenlegung von Pfaden und Argumenten</td><td>Fehlerbehandler und Debug-Routen prüfen.</td><td>Ausführliche Debug-Ausgabe in der Produktion deaktivieren.</td></tr></tbody></table>

## Konfigurationsfinder

<table data-view="cards" data-full-width="true" data-search="true"><thead><tr><th>Direktive</th><th>Schweregrad</th><th>Risiko</th><th>Scanner-Prüfung</th></tr></thead><tbody><tr><td><code>disable_functions</code></td><td>Hoch</td><td>Gefährliche Ausführungsfunktionen bleiben verfügbar.</td><td>Fehlende oder unvollständige Härtung melden, insbesondere wenn Befehls-Sinks vorhanden sind.</td></tr><tr><td><code>open_basedir</code></td><td>Mittel</td><td>PHP kann auf breitere Dateisystempfade zugreifen.</td><td>Fehlende, leere oder zu weit gefasste Werte markieren.</td></tr><tr><td><code>allow_url_fopen</code></td><td>Mittel</td><td>Datei-APIs können URLs abrufen.</td><td>URL-basierte Dateilesevorgänge und SSRF-anfällige Funktionen hochstufen.</td></tr><tr><td><code>allow_url_include</code></td><td>Kritisch</td><td>Dynamische Includes können entfernte Ressourcen laden.</td><td>Kritisch, wenn zusammen mit dynamischen Include-Pfaden aktiviert.</td></tr><tr><td><code>display_errors</code></td><td>Mittel</td><td>Stack Traces, Pfade und Geheimnisse können durchsickern.</td><td>Aktivierte Produktionskonfigurationen markieren.</td></tr><tr><td><code>expose_php</code></td><td>Niedrig</td><td>Offenlegung der PHP-Version.</td><td>Empfehlen, in der Produktion zu deaktivieren.</td></tr><tr><td><code>file_uploads</code></td><td>Info</td><td>Es besteht eine Upload-Angriffsfläche.</td><td>Mit Prüfungen für Upload-Pfad, Größe, Erweiterung und Inhalt kombinieren.</td></tr><tr><td><code>upload_max_filesize</code></td><td>Mittel</td><td>Zu große Uploads und Speicher-Missbrauch.</td><td>Werte markieren, die größer sind, als die Anwendung benötigt.</td></tr><tr><td><code>session.cookie_httponly</code></td><td>Mittel</td><td>Session-Cookie-Diebstahl über clientseitige Skripte ist leichter.</td><td>Empfehlen, aktiviert zu sein.</td></tr><tr><td><code>session.cookie_secure</code></td><td>Mittel</td><td>Cookies können über HTTP gesendet werden.</td><td>Empfehlen, auf HTTPS-Seiten aktiviert zu sein.</td></tr><tr><td><code>session.cookie_samesite</code></td><td>Niedrig</td><td>CSRF-Exposition kann zunehmen.</td><td>Explizit empfehlen <code>Lax</code> oder <code>Strict</code>.</td></tr></tbody></table>

## Source-to-Sink-Eingaben

| Quelle               | Beispiele                                                              |
| -------------------- | ---------------------------------------------------------------------- |
| Anfrage              | `$_GET`, `$_POST`, `$_REQUEST`                                         |
| Cookies / Sitzungen  | `$_COOKIE`, Sitzungswerte                                              |
| Uploads              | `$_FILES`, ursprüngliche Dateinamen, temporäre Pfade                   |
| Header               | `$_SERVER['HTTP_*']`, `getallheaders()`                                |
| Unverarbeiteter Body | `php://input`, dekodiertes JSON/XML                                    |
| CLI / Worker         | `$argv`, `STDIN`, Umgebungsvariablen                                   |
| Gespeicherte Daten   | Datenbankzeilen, Cache-Einträge, Warteschlangen, serialisierte Spalten |
| Lokale Dateien       | Konfigurationsdateien, CSV-Importe, temporäre Dateien                  |

## Regel-IDs

| Regel-ID           | Schweregrad | Bedeutung                                                                                   |
| ------------------ | ----------- | ------------------------------------------------------------------------------------------- |
| `PHP-CMD-001`      | Kritisch    | Manipulierte Eingabe erreicht die Befehlsausführung.                                        |
| `PHP-EVAL-001`     | Kritisch    | Manipulierte Eingabe erreicht die Auswertung von PHP-Code.                                  |
| `PHP-INCL-001`     | Kritisch    | Manipulierte Eingabe steuert Include-/Require-Pfade.                                        |
| `PHP-DESER-001`    | Kritisch    | Manipulierte Eingabe erreicht `unserialize()`.                                              |
| `PHP-WRITE-001`    | Kritisch    | Vom Benutzer gesteuerte Dateischreibung führt zu einem ausführbaren oder öffentlichen Pfad. |
| `PHP-UPLOAD-001`   | Hoch        | Upload-Validierung oder -Speicherung kann ausführbare Dateien zulassen.                     |
| `PHP-SSRF-001`     | Hoch        | Manipulierte URL erreicht HTTP-, Stream-, Socket- oder cURL-Sinks.                          |
| `PHP-SQL-001`      | Hoch        | Manipulierte Eingabe erreicht rohes SQL.                                                    |
| `PHP-PATH-001`     | Hoch        | Manipulierter Pfad erreicht Logik für Datei lesen/schreiben/löschen/verschieben.            |
| `PHP-CALLBACK-001` | Hoch        | Vom Benutzer gesteuerter Funktions- oder Methodenname erreicht dynamischen Dispatch.        |
| `PHP-CONFIG-001`   | Hoch        | Gefährliche PHP-Konfiguration erhöht die Ausnutzbarkeit.                                    |
| `PHP-PRIV-001`     | Kritisch    | PHP-Ausführung hat SUID-, sudo-, cron- oder privilegierten Kontext.                         |

## Schnelle Triage

| Frage                                                                                 | Schweregrad-Erhöhung               |
| ------------------------------------------------------------------------------------- | ---------------------------------- |
| Kann Anfragedaten die Funktion erreichen?                                             | Auf Hoch oder Kritisch anheben.    |
| Führt die Funktion Befehle, PHP-Code, Includes oder Deserialisierung aus?             | Kritisch.                          |
| Berührt sie Dateien unterhalb des Web-Roots?                                          | Hoch oder Kritisch.                |
| Akzeptiert sie URLs, Wrapper, Hosts oder Ports?                                       | Hoch.                              |
| Wird sie per cron, sudo, SUID, Worker oder Deployment-Hooks ausgeführt?               | Kritisch.                          |
| Basiert die Validierung nur auf Blocklisten, nur auf Erweiterungen oder nur auf MIME? | Eine Stufe höher ansetzen.         |
| Wird der Wert aus einer strikten Allowlist ausgewählt?                                | Vertrauen oder Schweregrad senken. |

## Signale für Privilegieneskalation

| Signal                                                         | Risiko                                                                            |
| -------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| SUID-PHP-Binary                                                | PHP kann mit erhöhten Dateibesitzer-Rechten ausgeführt werden.                    |
| sudo-Regel erlaubt PHP                                         | Benutzer darf PHP als anderer Benutzer ausführen.                                 |
| Root-gehörter cron-Job führt beschreibbares PHP aus            | Beschreibbares Skript kann zu privilegierter Ausführung werden.                   |
| Beschreibbarer Web-Root                                        | Ein Fehler bei Dateischreibung oder Upload kann zu Codeausführung werden.         |
| Secrets mit Welt-Leserechten                                   | Anmeldeinformationen der App können laterale Bewegung ermöglichen.                |
| Composer-Skripte werden als privilegierter Benutzer ausgeführt | Ausführung von Abhängigkeiten oder Skripten kann die Bereitstellung beeinflussen. |

## Berichtsvorlage

```json
{
  "id": "PHP-CMD-001",
  "severity": "critical",
  "function": "shell_exec",
  "file": "app/Controllers/ReportController.php",
  "line": 84,
  "source": "$_POST['format']",
  "impact": "Remote-Befehlsausführung als Benutzer des Webservers",
  "fix": "Ersetze die Shell-Ausführung durch eine native PHP-Bibliothek oder strikt auf eine Allowlist beschränkte Argumente."
}
```

## Scanner-Checkliste

* Parsen `.php`, `.inc`, `.phtml`, `.module`, `.theme`, Framework-Routen, Controller, Jobs und CLI-Skripte.
* Verfolge Anfragen-, Cookie-, Upload-, Header-, Roh-Body-, CLI-, Umgebungs-, Datenbank-, Cache-, Warteschlangen- und dateibasierte Eingaben.
* Erkenne Befehlsausführung, Codeausführung, Include-, Datei-, Netzwerk-, SQL-, Deserialisierungs-, Upload-, Callback-, Debug- und Konfigurations-Sinks.
* Bewerte Funde anhand von Erreichbarkeit, Bereinigung, PHP-Version, Konfiguration, Web-Root, Berechtigungen und Ausführungskontext.
* Exportiere Funktionsname, Kategorie, Schweregrad, Quelle, Sink, Datei, Zeile, Auswirkung, Vertrauen und Fix.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/de/hacking-tools/web/php-security-scanner.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
