2 Stimmen

Dynamischer Aufruf von PHP-Klassenmethoden

Gibt es ein Sicherheitsproblem beim dynamischen Aufruf einer Methode in einer Klasse durch Benutzereingaben? Zum Beispiel:

<?php
    class A {
        public function foo() {
            return true;
        }
    }

    $obj = new A();

    $method = $_GET['method'];

    $obj->$method();

Ich bin mir bewusst, dass der Benutzer jede Methode innerhalb der A und ich habe kein Problem damit. Ich bin nur neugierig, ob es andere mögliche Sicherheitsprobleme geben könnte.

4voto

Pascal MARTIN Punkte 384469

Ihr Benutzer kann versuchen, jede mögliche Methode aus Ihrer Klasse aufzurufen - sogar nicht existierende Methoden (und erhalten einen fatalen Fehler) .
Wenn Sie damit einverstanden sind... nun, ich nehme an, das ist OK.

Das sieht nicht schön aus, aber ich glaube nicht, dass man irgendeine andere Art von Code einfügen könnte.

Dennoch würde ich zumindest prüfen, ob die Methode existiert - mit method_exists()

1voto

Adam Pointer Punkte 1482

Ja, das ist wahrscheinlich eine schlechte Idee, vielleicht sollte man die erlaubten Methoden einschränken. Vielleicht definieren Sie erlaubte Methoden in einem Array und werfen dann eine Ausnahme, wenn $method nicht in dieser Whitelist ist.

Außerdem müssen Sie die magische Methode __call($name, $args) verwenden, damit diese benutzerdefinierten Methoden aufgerufen werden können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X