Hallo,
ich erloege derzeit wohl einer Denkblockade und hoffe, dass Ihr mir weiterhelfen könnt.
Es geht immer noch um das Thema "Sicherheit" bei der PHP-Programmierung.
Um die Ausführung von Shell-Befehlen zu verhindern (ich hoffe zumindest, dass ich hier in die richtige Richtung arbeite), habe ich ein umfangreiches, mehrdimensionales Array definiert, das etliche Shell-Befehle enthält:
$Shell = array ("a" => array ("adduser",
"alias",
"arch",
"awk"),
"b" => array ("bc",
"bg",
"break",
"breaksw"),
... => ...));
Ich habe die gefundenen Befehle deshalb so organisiert, damit die Suche schneller abläuft.
Meine Überlegung geht nun in die Richtung, den Inhalt der Variablen $Feld_Inhalt zunächst anhand mehrerer Trennzeichen aufzusplitten:
$Einzelwoerter = explode (" ", $Feld_Inhalt);
Danach wird eine Schleife von 0 bis zur Anzahl der einzelnen Wörter durchlaufen und
for ($i = 0; $i < count ($Einzelwoerter); $i++)
{
Nun wird von jedem einzelnen Wort der Anfangsbuchstabe ermittelt...
$Anfangsbuchstabe = substr ($Einzelwoerter [$i], 0, 1);
... und ermittelt, ob sich das aktuelle Wort NICHT in dem Array befindet, das mit dem Anfangsbuchstaben übereinstimmt:
if (! in_array ($Einzelwoerter [$i], $Shell [$Anfangsbuchstabe]))
wenn dem so ist, dann wird das Wort einer temporären Variablen hinzugefügt:
$Temporaerer_String .= $Einzelwoerter [$i];
Am Schluss wird die Schleife wieder geschlossen und die ursprüngliche Variable $Feld_Inhalt erhält den u.U. bereinigten Code zugewiesen:
}
$Feld_Inhalt = $Temporaerer_String;
Hier der Code nochmal in einem zusammenhängenden Block:
$Einzelwoerter = explode (" ", $Feld_Inhalt);
for ($i = 0; $i < count ($Einzelwoerter); $i++)
{
$Anfangsbuchstabe = substr ($Einzelwoerter [$i], 0, 1);
if (! in_array ($Einzelwoerter [$i], $Shell [$Anfangsbuchstabe]))
$Temporaerer_String .= $Einzelwoerter [$i];
}
$Feld_Inhalt = $Temporaerer_String;
Mein Problem ist nun erstens, dass ich mit meiner explode-"Variante" nur nach dem Leerzeichen splitte.
Bekomme ich ein verfeinertes Array, wenn ich folgende Schleife einfüge ?
$Zeichen = " .,!?";
for ($i = 0; $i < strlen ($Zeichen); $i++)
{
$Einzelnes_Zeichen = substr ($Zeichen [$i], 0, 1);
$Einzelwoerter = explode ($Einzelnes_Zeichen, $Feld_Inhalt);
}
Zweitens weiss ich nicht, ob mein Vorhaben so funktioniert und / oder so überhaupt sinnvoll ist.
Bin schon gespannt auf Eure Antworten.
Gruss, Enrico