Wordpress ist ja nun eines der besseren in PHP geschriebenen Systeme. Und was ist? Es finden sich eine Reihe unsauberer Programmierungen da drin. Ja, ich weiss, das tritt auch in andren Sprachen auf. Der Punkt ist: die Wordpress-Programmierer sind relativ gut qualifiziert und relativ sorgfältig in ihrer Arbeit - und trotzdem treten solche Probleme auf. Unter andrem eben weil bei PHP die Sourcen innerhalb der Server-Root liegen, also Files die eigentlich nur intern genutzt werden über HTTP erreichbar sind. Und weil PHP-Lösungen eben nicht von Hause aus schon eine Eingangsprüfung und ein brauchbares Quoting von Texten vornehmen. Nö, sorry, aber ich mag solch ein Kuddelmuddel einfach nicht.
Gerd Riesselmann March 2, 2006, 4:45 p.m.
Die Sourcen müssen natürlich nicht zwangsläufig über HTTP erreichbar sein. Für meine Projekte packe ich alle includes (und das ist mehr oder weniger aller Code der was sinnvolles macht) in ein Verzeichnis unterhalb des öffentlichen Verzeichnises. Öffentlich sichtbar kommt nur Code, der includes aufruft und Dinge ausgibt.
Bei sowas ist es dann aber natürlich Essig mit dem One-Click-Install ;-)
Andere CMS-Projekte, etwa Drupal, schützen ihre Includeverzeichnisse über Zugriffsrestriktionen in .htaccess. Auch effektiv.
Wo du aber Recht hast, ist das Escaping et al in PHP immer manuell gemacht werden muss, das ist natürlich (flüchtigkeits)fehler-anfällig und ein echte Schwäche der Sprache.
Armin Ronacher March 2, 2006, 9:10 p.m.
PHP ist nicht nur derwegen katastrophal. Das neue "always pass by reference" war zwar schon längst nötig, damit funktioniert aber fast keine php4 software ohne größerer Anspassungen unter PHP5, um daten aus einer form zu bekommen braucht man eine 20 Zeilen lange wrapper funktion, die auf magic_quotes und so einen scheiß aufpasst. Nein. Nie wieder PHP. NIE WIEDER.
Alex Knaub March 3, 2006, 12:16 a.m.
Schau Dir den Code von Rasmus Lerdorf an (http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html). Er besteht aus spagetti-Code, Zugriffen auf globale Variablen, direkten Zugriffen auf $_SERVER. Darin sucht man vergeblich nach Abstraktion, loser Kopplung. Solcher Code wirklich schlechter Code ist paradigmatisch für PHP Software. Er ist ein wesentlicher Bestandteil der Kultur und der Geisteshaltung in der PHP Community. Als Belege dafür lassen sich Wordpress, s9y, Joomla und viele weitere anführen.
Es ist sehr schwierig guten PHP-Code zu finden. Wenn mal was entdeckt, dann stellt man sehr schnell fest, dass es sich dabei um eine direkte Portierung von Java, Python oder Perl handelt.
Gerd Riesselmann March 3, 2006, 10:58 a.m.
Was das Code-Beispiel von Rasmus angeht muss man aber auc fairerweise sagen, dass dies eben ein Beispiel ist. Ein-Punkt-Code, wenn man so will. Abstraktionen, lose Kopplung et. al. wären hier wohl overkill. Mir ist allerdings auch ein Rätsel, was genau Rasmus uns mit diesem Artikel eigentlich sagen will :-).
Vielleicht sowas wie das hier: Abstraktionen fügen dem Projekt eine neue Ebene der Komplexität hinzu, lösen dabei aber lokal (etwa auf Funktionsebene) Komplexität auf. Man muss schauen, dabei das Optimum zu erreichen.
Auch die meisten Java- und Phython-Projekte kommen ja mit einem mittleren Abstraktionslevel aus, wenn man das mal mit sowas wie Model-Driven-Development und generischen Regelsystemen vergleicht ;-). Und für die allermeisten Projekte ist das auch gut so.
Zurück zu Wordpress: Ich habe mir jetzt mal den Security Advisory angesehen: Das ist schon keine Flüchigkeit mehr. Die Eingaben werden 1 zu 1 übernommen, da wird nicht einmal escaped. Und das im Kommentarform, also *dem* öffentlichen Form überhaupt.
Das passt aber irgendwie ins Wordpress-Bild, finde ich. Denn im Gegensatz zu Georg halte ich die WP-Programmierer für alles andere als sorgfältig :-/.
Es gilt aber wie immer: In jeder Sprache kann man schlechten Code schreiben, gerade die Copy-and-Paste-Mentalität ist nicht auszurotten. Und in jeder Sprache muss man sich einen guten Kodierstil erst mühsam aneignen. Wieviele der VB, .NET, C++, Java etc. Programmierer da draußen haben etwa McConnels "Code Complete" oder Fowlers "Refactoring" gelesen? Zwei Prozent?