MB: PHP Webseiten Sicherheit! Angriffe abwehren

moin Community,

auf welche Web Angriffe müsste man sich in PHP Webseitenbetrieb gefasst machen:

  • .htaccess Zugriffsreglung
  • Formular Validatoren
  • SQL-Injection Abfang

… habe ich auf m schirm und werde ich angehen.

Wo tun sich pauschal gesagt weitere Angriffsmethoden und Wegw auf die man als "PHP-Entwichler" schließen kann? Ich denke mir, dass das situationsabhängig ist, daher begnüge ich mich mit einer Generalisierung + Präventivmaßnahmen.

vlg MB

  1. Hello,

    • .htaccess Zugriffsreglung
    • Formular Validatoren
    • SQL-Injection Abfang
    • eMail-Injection
    • Login-Script mit Log-Datei belegen, die von fail2ban (oder Nachfolger) ausgewertet werden kann. Bei reiner Basic-Authentication via Apache kann dieser das passende loggen selbst übernehmen.

    Nur mit https und hsts arbeiten.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. moin TS,

      • eMail-Injection
      • Login-Script mit Log-Datei belegen, die von fail2ban (oder Nachfolger) ausgewertet werden kann. Bei reiner Basic-Authentication via Apache kann dieser das passende loggen selbst übernehmen.

      Danke für die weiteren Punkte. Kannst du mal ein Anwendungsbeispiel geben? Wenns aber zu komplex ist reiucht mir eine nähere Erläuterung.

      Nur mit https und hsts arbeiten.

      Das gleiche gillt hierfür.

      vlg MB

  2. Tach!

    • Formular Validatoren

    Validierung sollte sich auf die Geschäftslogik beschränken und ist damit nicht sicherheitsrelevant. Wichtiger hingegen ist ...

    • SQL-Injection Abfang

    ... nicht nur SQL-Injection zu beachten, sondern den Kontextwechsel generell - in allen, auch anderen Situationen. Code und Daten zu mischen ist in sehr vielen Systemen die Art und Weise, wie sie funktionieren. Programmiersprachen mit eingebetteten String, HTML-Code mit auszugebendem Text, Trennzeichen in Datendateien, alles was mehr ist als nackiger Text. Es darf beim Einfügen von Daten in Code keine Syntaxfehler geben, weil irgendwelche Sonderzeichen nicht korrekt maskiert wurden. Die Injection-Verhinderung ist dabei nur eine Nebenwirkung. Einige denken sich "Sicherheit mach ich später", aber das ist der falsche Ansatz. Das Hauptaugenmerk sollte sein, das Programm fehlerfrei zu gestalten, so dass auch nicht als Angriff gedachte Daten kontextgerecht ausgegeben werden.

    Wo tun sich pauschal gesagt weitere Angriffsmethoden und Wegw auf die man als "PHP-Entwichler" schließen kann?

    Alles was interne Daten sind, auf die nicht direkt zugegriffen werden soll, sollten sich außerhalb des Documentroot befinden. Konfigurationsdaten, Temp-Verzeichnisse, Log-Verzeichnisse, gegebenenfalls Upload-Verzeichnisse. Leider ist bei zu billigen Hostern keine Möglichkeit vorhanden, neben dem Documentroot Verzeichnisse anzulegen, oder der Vorgang ist für das Zielpublikum zu kompliziert. Deswegen werden die Systeme gern so aufgesetzt, dass ein einfaches Uploaden reicht - alles ins selbe Verzeichnis. Das hat dann den erwähnten Nachteil dass nichtöffentliche Verzeichnisse trotzdem öffentlich sind. Mitunter wird dann auch gern vergessen, in Temp- und Upload-Verzeichnissen das Ausführen von PHP-Dateien (und was der Hoster sonst noch ausführbar gemacht hat) zu untersagen, und die Angreifer können sich dann ihr eigenes Script hochladen und ausführen.

    dedlfix.

      • Formular Validatoren

      Validierung sollte sich auf die Geschäftslogik beschränken und ist damit nicht sicherheitsrelevant. Wichtiger hingegen ist ...

      bin grade dabei.

      • SQL-Injection Abfang

      Einige denken sich "Sicherheit mach ich später", aber das ist der falsche Ansatz. Das Hauptaugenmerk sollte sein, das Programm fehlerfrei zu gestalten, so dass auch nicht als Angriff gedachte Daten kontextgerecht ausgegeben werden.

      sehe ich exakt genauso. Lieber fehlerfreien und sauberen Code programmieren als irgenswas hinrotzen, was zwar auch funzt aber man damit rechnen muss, den totalen Überblick zu verlieren, ergo auch das dieser Code angriffsanfälliger sein kann.

      Wo tun sich pauschal gesagt weitere Angriffsmethoden und Wegw auf die man als "PHP-Entwichler" schließen kann?

      Alles was interne Daten sind, auf die nicht direkt zugegriffen werden soll, sollten sich außerhalb des Documentroot befinden.

      Ist logisch, aber ich aber nich gesehen. Besten Dank.

      Leider ist bei zu billigen Hostern keine Möglichkeit vorhanden, neben dem Documentroot Verzeichnisse anzulegen, oder der Vorgang ist für das Zielpublikum zu kompliziert.

      Was is mit den .htaccess Dateien? Da kannn ich doch einstellen was öffentlich is und was nicht. Insofern stellte das aus meiner Sicht kein Problem dar oder nich?

      Mitunter wird dann auch gern vergessen, in Temp- und Upload-Verzeichnissen das Ausführen von PHP-Dateien (und was der Hoster sonst noch ausführbar gemacht hat) zu untersagen, und die Angreifer können sich dann ihr eigenes Script hochladen und ausführen.

      Ok hab verstenden. Danke

      vlg MB

      1. Tach!

        Was is mit den .htaccess Dateien? Da kannn ich doch einstellen was öffentlich is und was nicht. Insofern stellte das aus meiner Sicht kein Problem dar oder nich?

        Njein, damit konfiguriert man nur eine Zugriffsbeschränkung im öffentlichen Teil. Das ist ein Notnagel im Verhältnis zum Gar-nicht-erst-öffentlich-Hinstellen.

        Du musst bei diesen Dateien noch dafür sorgen, dass sie kein Upload-Prozess oder ähnlicher Vorgang manipulieren kann. Wenn die .htaccess für die Anwendung schreibbar ist, kann man sie ja ändern. Und wenn das Verzeichnis beschreibbar sein soll (Upload-Verzeichnis), dann ist auch die .htaccess löschbar, denn das ist ein Schreibprozess im Verzeichnis. Ein Read-Only der Datei reicht nicht zum Absichern. Da muss man schon mit anderen nur vom Administrator setzbaren Berechtigungen ankommen, beispielsweise mit chattr +i ein Unveränderlichkeitsattribut setzen.

        dedlfix.

  3. Du solltest dir auch Gedanken um die Sicherheit deiner Benutzer machen, das gehört meiner Auffassung nach auch zu den Pflichten eines Webentwicklers - Beispiele: Passwörter sicher und nachhaltig hashen (password_hash()), Massnahmen gegen Session-Hijacking und CSRF.

    1. moin chron,

      Du solltest dir auch Gedanken um die Sicherheit deiner Benutzer machen

      wenn ich benutzer anlege ja. Erstmal muss ich ja präsentieren. Wie von @@dedlfix muss ich die struktur im Augebehalten und sauberen Code schreiben.

      vlg MB

      1. Nein. Es geht nicht um dich. Es geht um deine Verantwortung den Benutzern gegenüber, dass die dir anvertrauten Daten geschützt sind, und du die Leute nicht unnötig Angriffen aussetzt.

  4. Lieber MB,

    auf welche Web Angriffe müsste man sich in PHP Webseitenbetrieb gefasst machen: [...] … habe ich auf m schirm und werde ich angehen.

    meiner Meinung nach sollte man vor dem Schreiben von Code solche Überlegungen anstrengen, um sie jederzeit beim Schreiben von Code anzuwenden!

    Liebe Grüße,

    Felix Riesterer.

    1. moin Felix,

      auf welche Web Angriffe müsste man sich in PHP Webseitenbetrieb gefasst machen: [...] … habe ich auf m schirm und werde ich angehen.

      meiner Meinung nach sollte man vor dem Schreiben von Code solche Überlegungen anstrengen, um sie jederzeit beim Schreiben von Code anzuwenden!

      Bitte entschuldige. Auf welche meiner Aussagen oder Fragen nimmst du bezug?

      vlg MB

      PS: Ich will behaupten das Ich ziehmlich Gut im Kontext interpretieren bin, aber gerade was natürliche Sprache angeht bin ich miserabel.

      1. Lieber MB,

        Bitte entschuldige. Auf welche meiner Aussagen oder Fragen nimmst du bezug?

        Dein "werde ich angehen" klingt für mich so, als hättest Du schon eine PHP-Applikation, die Du nun in Sachen Sicherheit überarbeiten wolltest, so nach dem Motto "erst muss es tun, dann erst auf sichere Art und Weise". Da wollte ich dagegen halten.

        PS: Ich will behaupten das Ich ziehmlich Gut im Kontext interpretieren bin, aber gerade was natürliche Sprache angeht bin ich miserabel.

        Was erzeugt für Dich diesen Eindruck?

        Liebe Grüße,

        Felix Riesterer.

        1. moin Felix,

          Bitte entschuldige. Auf welche meiner Aussagen oder Fragen nimmst du bezug?

          Dein "werde ich angehen" klingt für mich so, als hättest Du schon eine PHP-Applikation, die Du nun in Sachen Sicherheit überarbeiten wolltest, so nach dem Motto "erst muss es tun, dann erst auf sichere Art und Weise". Da wollte ich dagegen halten.

          Naja, ich habs früher so gemacht: Alles zusammenklecksen mit dem Hintergedanken das ich das doch noch irgend wie aufdrösern kann bis es zuspät ist. Jetzt arbeit ich Schrittweise: Konzeption, Datenmodell, Programmstruktur anlegen, Kern Programmieren. Weite bin ich noch nicht. Ich will vorausplanen.

          PS: Ich will behaupten das Ich ziehmlich Gut im Kontext interpretieren bin, aber gerade was natürliche Sprache angeht bin ich miserabel.

          Was erzeugt für Dich diesen Eindruck?

          Deine Einleitung bezogen auf ein Fragment meiner Eingangsfrage hier im Thread ist für mich immer noch verwirrend. Aber durch deine Aufklärung bin ich im Bilde.

          vlg MB

          PS: Ich hab zudem auch noch ein miserables Arbeitsgedächtnis 😕.

  5. Moin,

    mein erstes Sicherheitsproblem hatte ich gleich zu Anfang meines Einstiegs in die Webentwicklung:

    /cgi-bin/index.cgi?file=phone.html

    wobei doch die Idee gar nicht mal so schlecht war, Inhalte beliebiger Dateien im Browser auszugeben und Header, Footer automatisch einzubauen. Aber so einfach wie die Idee war dann auch die Lösung zur Sicherheitsfrage:

    /cgi-bin/index.cgi?file=1

    und ideenreich die Fehlermeldung zum Versuch, sich eine nichtkonfigurierte Seite ausgeben zu wollen 😉

    Tipp: Parameter ziehen Hacker magisch an, also so sparsam wie möglich verwenden und das was konfigurierbar ist, raus aus der Parameterliste. Und guck daß auch bei etwaigen Fehlermeldungen nicht allzuviele Informationen im Browser landen, bspw. abolute Pfadangaben. VG

  6. auf welche Web Angriffe müsste man sich in PHP Webseitenbetrieb gefasst machen:

    • .htaccess Zugriffsreglung
    • Formular Validatoren
    • SQL-Injection Abfang

    … habe ich auf m schirm und werde ich angehen. Wo tun sich pauschal gesagt weitere Angriffsmethoden und Wegw auf die man als "PHP-Entwichler" schließen kann?

    + DDoS-Attacken. Manche Webseitenbetreiber wissen nicht wie leicht ein Server zu "dossen" ist, wenn die Generierung einer Seite "nur" 10 Sekunden braucht.