Normalerweise versuchen alle vernünftigen Entwickler, die Eingabe aller öffentlichen Methoden zu sichern (Casting auf die richtigen Typen, Validieren, Desinfizieren usw.)
Meine Frage ist: Sind Sie in Ihrem Code und validieren auch Parameter, die an geschützte / private Methoden übergeben werden? Meiner Meinung nach ist es nicht notwendig, wenn Sie Parameter von öffentlichen Methoden korrekt sichern und Werte von außen zurückgeben (andere Klassen, db, Benutzereingaben usw.).
Aber ich stehe ständig vor Frameworks und Anwendungen (dh Prestashop, um einen zu nennen), wo die Validierung häufig im Methodenaufruf, im Methodenkörper und erneut für den gesicherten zurückgegebenen Wert wiederholt wird - was, denke ich, Performace Overhead erzeugt und ist auch ein Zeichen für schlechtes Design.
Wenn Sie der Meinung folgen, dass öffentliche APIs Implementierungen haben sollten, die sich gegen schlechte Parameter wehren, sollte Ihr Kriterium nicht die Sichtbarkeit der Methoden sein, sondern ob der Benutzer der API diese Methode (oder indirekt) direkt aufrufen wird nenne es durch einen anderen, der die Validierung verschiebt).
Beispiele für Methoden, die eine Validierung durchführen sollten:
%Vor%Für protected sollten Sie diese validieren, da die Methode später überschrieben oder von einer anderen Klasse aufgerufen werden kann und Sie keine gültigen Eingaben für die Methode annehmen können. Dies gilt insbesondere, wenn dies eine Komponente ist, die von anderen Anwendungen verwendet wird.
Für Privatpersonen halte ich es für eine Verschwendung, weil Sie kontrollieren, was an die Methoden weitergegeben wird, damit die Daten überprüft werden sollten, bevor Sie die private Methode aufrufen.
Genau - wenn Sie Ihre App gut entwerfen, sollte es nicht notwendig sein.
Bereinigen Sie die Eingabe nur bei der letzten möglichen Chance. Ich sehe nicht, wie OO-Semantik das anders macht.
Zum Beispiel wenn aus irgendeinem Grund Sie keine parametrisierten Abfragen oder ein ORM verwenden können (ich denke nur an ein Beispiel :), schreiben Sie die Funktion so:
%Vor%Nun ist es unmöglich, dass irgendein Code diese Funktion aufruft und unerwartete Ergebnisse verursacht.
Tags und Links php security design frameworks