Hakan: PHP, RUBY, JSP???

Hallo Leute,

ich will zwar keine Grundsatzdiskussion starten, die wahrscheinlich sooft schon gefragt wurde, aber leider finde ich in Google keine aktuellen Nachrichten. Alles, was ich gefunden habe sind zum Teil 6-7 Jahre alt.

Meine Frage ist:
Ich entwickle seit zwei Jahren an einem Tool rum, dass für registrierte User gedacht ist und es muss eine sehr hohe Sicherheit bieten.
Ich entwickle das Teil serverseitig hauptsächlich mit PHP.

Die Logik allg. kann ich in Java, PHP, ASP, RUBY....etc. abbilden.
Nun frag ich mich, was ist in Punkte SIcherheit wohl eher besser??
(Injection & Co.)

Kann man das überhaupt so salop sagen, was besser/sicherer ist?

Gruß, Hakan

  1. Hi,

    Kann man das überhaupt so salop sagen, was besser/sicherer ist?

    nein, kann man nicht, denn die Sicherheit hängt in erster Linie nicht von der Technik ab, sondern von dem, der sie bedient - also Dir. Es wird Dir mit jeder Technik gelingen, Sicherheitslöcher aufzureißen, und mit jeder Technik kannst Du eben dies auch vermeiden. Die einzige Faustregel, die ich Dir an die Hand geben kann, ist diese:

    Je mehr frei verfügbare Frameworks Du einsetzt, umso höher ist das Risiko einer Sicherheitslücke *und* (bzw. vor allem) der Ausnutzung der selben.

    Was PHP betrifft: Diese Sprache tut nicht wirklich etwas dagegen, dass der Entwickler Sch**ße baut; anderswo werden gewisse Dinge schon deutlicher erschwert. Das ist aber nur für einen Programmieranfänger ein Problem. Und genau diese sind auch Schuld daran, dass PHP einen eher schlechten Ruf in Sachen Sicherheit hat - es gibt so viele Anfänger, die so schnell und so viel Mist machen, dass man gute Entwicklungen leicht übersieht.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Den schlechten Ruf beim Thema Sicherheit hat PHP größtenteils schlechten PHP-Programmierern zu verdanken. Eine Programmiersprache kann keine Sicherheitsprobleme verhindern, sie kann nur dabei helfen, sie zu vermeiden.
    Hier haben Python und Ruby einen besseren Ruf. Der Code ist nach Meinung Vieler verständlicher, die Programmierer sind oftmals besser (viele Programmierer fangen mit PHP an, arbeiten einige Zeit damit, und entdecken dann andere Sprachen).
    Außerdem unterstützen entsprechende Frameworks (Django, RoR, ...) die Entwickler bei der Vermeidung von Sicherheitslücken. In PHP ist es leider noch nicht Gang und Gäbe, Frameworks (wie etwa das Zend Framework) einzusetzen. Viele PHP-Entwickler kennen auch das Konzept der Prepared Statements und der Kontext-Abhängigen Maskierung nicht.
    Allerdings behaupte ich einfach mal, dass ein fähiger Programmierer in jeder dieser Sprachen eine sichere Anwendung schreiben können wird. Die Scriptsprachen selbst sind relativ stabil, Lücken gibt es immer, davon ist nicht nur PHP betroffen, auch bei Python gab es unlängst ein Sicherheitsupdate.

    Fazit: Nicht die Sprache macht es aus, sondern der Programmierer. Die Sprache kann den Entwickler nur dabei unterstützen, bessere Anwendungen zu schreiben, aber eine Garantie für mehr Sicherheit gibt es dabei nicht.
    Die Sprache sollte je nach Geschmack gewählt werden, jeder sollte sich bestehende Sprachen und Frameworks ansehen und selber entscheiden, welches Konzept ihm am Besten gefällt.

  3. Hallo Hakan,

    Die Logik allg. kann ich in Java, PHP, ASP, RUBY....etc. abbilden.
    Nun frag ich mich, was ist in Punkte SIcherheit wohl eher besser??
    (Injection & Co.)

    Kann man das überhaupt so salop sagen, was besser/sicherer ist?

    Nein, kann man nicht.
    Jede Sprache bietet diverse Konfigurationsmöglichkeiten an, die den Skripten mehr Funktionen (= höhere Angriffsfläche) oder eben weniger Funktionen ermöglichen.

    Weiterhin gilt:
     - Immer die neuesten Sicherheitsupdates einspielen
     - Code Review (jeden Teil gegenchecken, alle Benutzereingaben prüfen)
     - Anwendung pflegen

    Auf diese Art und Weise kannst du mit jeder Sprache Sicherheit erreichen.
    Wichtig ist die Erkenntnis, dass Sicherheit kein Zustand ist, sondern ein Prozess - man muss also stets daran arbeiten.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    panic("Oh boy, that early out of memory?");
            linux-2.2.16/arch/mips/mm/init.c
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  4. Sup!

    Die Sicherheit hängt von vielen Dingen ab.
    Datenbankabfragen z.B. sollten immer als prepared statement gemacht werden, nie sollte man eine Abfrage aus irgendwelchen Nutzer-Eingaben zusammensetzen.
    Buffer- und Heap-Overflows sollte man vermeiden; in den meisten Skriptsprachen ist man automatisch vor solchen Dingen geschützt.
    Um den Server zu schützen, kann man den Webserver und ggf. weitere Skripte mit eingeschränkten Rechten und ggf. in einem jail/compartment laufen lassen.

    Man kann quasi beliebig paranoid werden beim Thema Sicherheit - denn am allerwenigsten sollte man sich selbst oder seinen Annahmen vertrauen, denn die Hauptfehlerquelle ist der Programmierer selbst.

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!