@JoeUser: Volltreffer, die ABI-breaks in der Ruby-Welt sind einfach eine Katastrophe und der Grund, warum ich sehr ungern auf Rails setze. Ich möchte hier auch keine Lanze für Ruby oder Python oder irgendwas brechen, siehe die Aussagen zu Flamewars von d4f. Ich denke aber trotzdem, dass explizit PHP um Längen grottiger ist als der Rest.
Nicht schwerer als andere Sprachen.
Und genau das behaupte ich. In PHP muss ich wissen, dass es SQL-Injections gibt und deswegen eine entsprechende Funktion aufrufen. Vergesse ich die Funktion, habe ich eine Injection. In Rails/Python/Java/Foo kann ich nichts vergessen, weil das der Datenbank-Absraction-Layer auf einer anderen Ebene kapselt.
Ein solcher Schutz ist uebrigens sehr simpel indem man ein md5-Hash der Session-ID als GET-Parameter anhaengt;
Klar ist vieles simpel, aber ich muss es bei PHP auf dem Schirm haben und auch einbauen. Gerade Anfänger coden halt simple PHP runter und freuen sich, wenn's geht.
Ein Beispiel fuer sicherheitsrelevante Defizite der Sprache waere nicht schlecht...
Das Argument zieht meiner Meinung nach so rum nicht. Die Zeiten, in denen es eine konkrete Sicherheitslücke gab, die dann exploitet wurde, sind vorbei. Heute laufen viele Angriffe über Bande und Ecken, die man im einzelnen nie als Bedrohung sehen würde. Gerade daher ist es enorm wichtig, dass eine Sprache im Core sauber ist. Im Link weiter oben habe ich schon gepostet, welch ominöses Verhalten PHP z.T. an den Tag legt. Wenn z.B. eine simple Addition ein falsches Ergebnis liefert (und sowas kommt bei PHP leider immer wieder vor), dann ist das per se erstmal nur ärgerlich aber nicht kritisch. Wenn ich diese Addition aber einsetze, um eine Vorbedingung meiner App zu testen und es ausreicht, diese Funktion durch eine ganz bestimmte Zahl zu exploiten, dann habe ich das Loch, weil PHP im Core Mist baut. Gerüchteweise sollen ja nichtmal die Testcases vom PHP-Core sauber durchlaufen. Ich verwette meinen Allerwertesten darauf, dass in PHP noch eine Menge ungehoben Schätze liegen.
Wenn man entscheidet, dass man ein GET-Parameter diret auf die Datenbank jagen will erlaubt die Sprache es. Warum sollte sie auch nicht?
Genau mein Reden: Die Sprache sollte es erlauben. Aber es sollte nicht der unhinterfragte Default sein, weil es eben wahnsinnig gefährlich ist. Bei PHP entscheidet man nicht, einen GET-Parameter direkt auf die Datenbank zu jagen. Bei PHP vergisst man, es nicht zu tun.
Ich gebe euch aber unwiedersprochen Recht, dass es unfair ist ein Framework mit einer Scriptsprache zu vergleichen. Ich höre sofort auf damit, wenn hier jemand postet: "Ich habe mir die PHP-Quellen gezogen und alle Test-Cases laufen sauber durch" ;-)