Ich habe einen Webhook geschrieben, um in den Chat (slack/mattrestampi) zu integrieren.Wie man böswillige Injektion in Argument zu PHP "exec" verhindert (Webhook -> Bash-Skript)
Der einfachste Weg, um es zu bekommen und läuft war ein schneller PHP-Skript, das wie folgt aussieht:
<?php
$token = $_POST["token"];
$arg = $_POST["text"];
$output = exec("./webhook_script.sh {$token} {$arg}");
Wie es aussieht, wird das Skript funktioniert gut, aber ich mache mir Sorgen, dass jemand böswillig eine tun kann http POST, wo der Abfrageparameter text
(Skript: $arg
) eine Art Injektion Angriff hat.
Beispiel: http://myserver/webhook.php?token=abc&text=123;rm -rf *
So $arg
wird 123; rm -rf
und die exec
Befehle ausführen ein böswilligen rm -rf *
Dies ist ähnlich in der Natur „SQL-Injection“, die ich kenne, mit, aber ich bin nicht sicher, wie um ein Bash-Skript sicher zu machen ...
Ist es eine einfache Sache, die Argumente irgendwie zu zitieren, oder vielleicht mit einem regex
, um gegen die Skriptparameter zu überprüfen?
Wenn ich sagen darf, das ist ein schrecklicher Ansatz für eine Produktionsmaschine. Wenn Sie wirklich exec() mit vom Benutzer bereitgestellten Argumenten aufrufen müssen, schlage ich vor, dass Sie eine Whitelist und keine Blacklist anwenden. Welche Argumente erwarten Sie? – Calchas
Das Argument ist eine interne URL. Ich könnte eine Regex auf das Muster anwenden? – vikingsteve
@Calchas oder können Sie eine bessere Möglichkeit vorschlagen, auf einen Web-Hook zu reagieren und ein Bash-Skript zu starten. Die php-Lösung scheint schnell und einfach zu sein, und Michaels Antwort unten zeigt Schritte, um es sicher zu machen. – vikingsteve