Sicherheit: Denial of Service Attacken abwehren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sicherheit: Denial of Service Attacken abwehren

    Hi !!

    Ich hatte gestern auf meine Webseite eine Denial-of-Service Attacke. Verursacht wurde sie durch einen Kumpel von mir, der mich nur auf ein Sicherheitsloch aufmerksam machen wollte. Daß er dadurch den Server flachgelegt und 4 GB Traffic verursacht hat, zeigt mir zumindest, daß Handlungsbedarf besteht ;-)

    Ich biete auf der Seite (Community) für jeden Nutzer ein eigenes Gästebuch an. Auf der Gästebuchseite ist ein Formular, anhand dessen andere Nutzer Einträge in das GB machen können. Die Daten werden per POST-Formular an den Webserver übergeben.

    Mein Kumpel hat nun eine einfache HTML-Datei geschrieben, die sich per meta-refresh jede Sekunde neu lädt und jedes Mal meine Gästebuchseite auf meinem Server mit den entsprechend übergebenen Formularparametern aufruft.

    So trägt mein Server jede Sekunden einen Gästebucheintrag beliebigen Inhalts in meine Datenbank ein ...

    Zu meiner GB-Datei:
    Die Datei prüft zuerst, ob die Formularvariablen ($_POST['...']) gesetzt sind,
    wenn ja, Datenbankeintrag,
    wenn nein Anzeige aller bisherigen Einträge und Anzeige des Eintragsformulars mit action=diese GBuchdatei.

    Bitte helft mir *seufz*
    Yeah !

  • #2
    PS: Meine Lösungsansätze und wieso sie nicht funktionieren ...

    -Spam-Sperre: Ich könnte datenbankgestützt prüfen, wie lange der letzte Beitrag des entsprechenden Users her ist und so etwa nur alle 10 Sekunden einen Eintrag zulassen. Das würde allerdings nur die Frequenz der Attacke verringern, nicht aber die Effizienz. Außerdem würde ich meine Poweruser in ihrem Handeln einschränken.

    - Prüfen, ob der Spammer eine gültige User_id hat: Geschieht sowieso. das Script Kiddie braucht die Schaddatei bloß aus einem Childthread meiner Seite heraus zu starten. Ich kann den User dann zwar identifizieren, aber einen Fake-Account anlegen kann jeder ...

    - kryptische Hidden-variablen übergeben: macht keinen sinn - einen Blick in den Quelltext meiner Seite und er hat se ...

    - prüfen, ob die Herkunfts-URL der $_POST-variablen eine url von mir ist: hört sich klasse an, aber ich habe keine Ahnung, wie ich das realisieren soll ;-)
    Yeah !

    Kommentar


    • #3
      Einfach die IP sperren.
      PHP
      MySQL
      Jetzt klicken & reich werden

      Kommentar


      • #4
        LöL

        Leider hat er die gleich IP wie ich, weil wir beide hinter dem selben Router sitzen ;-))

        Davon abgesehen: nach welchen Kriterien stellst Du Dir vor, soll ich die IP sperren ? Ich will ja, daß meine fleissigen Nutzer weiterhin machen können, was sie wollen. Ich will nur massenspaming verhindern ... ?!?
        Yeah !

        Kommentar


        • #5
          ich würde einen Code erzeugen, der bei einem Neueintrag in das GB mit eingegeben werden muss. Einfach und sehr effektiv.

          Der Code wird immer neu erzeugt und als z.b. Image ausgegeben.

          cu
          berni

          php-Entwicklung | ebiz-consult.de
          PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
          die PHP Marktplatz-Software | ebiz-trader.de

          Kommentar


          • #6
            Prima Idee !!! *Daumen hoch!*

            wenn ich den Gedanken aber fortspinne, muß ich solch eine Eingabe dann aber auch bei mails, votes und forumseinträgen machen und das würde den services i.m.o unattraktiv weil umständlich machen

            Gibt es denn eine Möglichkeit, zu überprüfen, von welcher url aus die Formulardaten ausgesendet werden ?

            Dann könnte ich die Datenbankroutine anweisen, nur daten anzunehmen, die von der url domain/gbuch.php kommen ...
            Yeah !

            Kommentar


            • #7
              Original geschrieben von DaGuertliz
              Gibt es denn eine Möglichkeit, zu überprüfen, von welcher url aus die Formulardaten ausgesendet werden ?

              Dann könnte ich die Datenbankroutine anweisen, nur daten anzunehmen, die von der url domain/gbuch.php kommen ...
              jein.

              du könntest natürlich den referrer überprüfen, aber dieser ist bekanntlich eine sehr unzuverlässige grösse, da beliebig änder- und fälschbar.

              da viele firewalls, proxies etc. den referrer ganz blocken, müsstest du neben der adresse deiner eigenen seite zumindest noch einen komplett leeren referrer als gültig zulassen, weil du sonst zu viele benutzer verärgern würdest.
              seinen referrer ganz zu blocken, auf die idee kommt aber auch dein script-kiddie-freund wahrscheinlich noch ganz schnell.


              ich würde vielleicht die kombination aus postername, (überschrift) und beitragstext in der DB auf unique setzen - dann müsste er schon bei jedem neuen beitrag eine kleine änderung machen, damit sie angenommen wird ...
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                ich persönlich finde immer noch die ip-sperre am besten - sie braucht ja nur temporär sein und sich aktivieren, wenn x zugriffe innerhalb y zeit erfolgen und dann für meinetwegen 1 minute mit einem entsprechenden hinweis aktiv bleiben
                (-:
                Bookmarks:·Bilder·Jobs·Recht·
                kostenloser Webkataloge-Assistent

                Kommentar


                • #9
                  die IP-Sperre kann ich stattdessen auch mit einer Datenbankgestützten Spam-Sperre realisieren ... Dadurch könnte ich dann immherhin schonmal das Problem umgehen, daß sich teilweise zig Nutzer eine geroutete Internetverbindung teilen ... aber wenn mein Script-Kiddie seine routine die ganze nacht durchlaufen läßt, habe ich trotzdem über nacht ein paar tausend gästebucheinträge gesammelt ;-)

                  dann müsste er schon bei jedem neuen beitrag eine kleine änderung machen, damit sie angenommen wird ...
                  --> dann lädt er sich sein script auf seinen server hoch und läßt per php einfach eine endlosschleife hochzählen. Als Änderung trägt er dann jeweils den Schliefenzähler per echo ein ... Die Idee hatte ich auch schon :-(
                  Zuletzt geändert von DaGuertliz; 12.02.2004, 09:53.
                  Yeah !

                  Kommentar


                  • #10
                    Folgender Lösungsansatz vorab:

                    Ich verhindere per

                    PHP-Code:
                    <body oncontextmenu='return false'
                    daß das Kiddie sich meinen Quelltext anzeigen lassen kann.

                    Dann baue ich in das Formular ein hidden-Feld ein, daß eine völlig kryptische Variable übergibt und auf vorhandensein und Richtigkeit dieser Variable prüfe ich dann bevor ich einen Datenbankeintrag mache ...

                    Was haltet ihr davon ???
                    Yeah !

                    Kommentar


                    • #11
                      ich schalte einfach js ab, lese mir den quelltext durch und grins mir einen
                      (-:
                      Bookmarks:·Bilder·Jobs·Recht·
                      kostenloser Webkataloge-Assistent

                      Kommentar


                      • #12
                        Ja, nicht schlecht

                        Aber schon mal ein Anfang...

                        Ergänzende Vorschläge ?

                        und ich kann mir echt per php nicht angeben lassen, wie die datei heißt und wie die url der datei ist, von der die per POST eingesackten formulardaten kommen ??? Also ich meine rein Serverseitig, so daß Firewalls, Proxys etc. nicht betroffen sind, wie bei Wahsagas Vorschlag ?
                        Zugriffsauswertesysteme können doch auch die referrer-urls auslesen, oder ? *grübel*
                        Yeah !

                        Kommentar


                        • #13
                          Original geschrieben von DaGuertliz
                          Ich verhindere per
                          <body oncontextmenu='return false'>
                          daß das Kiddie sich meinen Quelltext anzeigen lassen kann.
                          pfui-bah ... lass das.

                          das hindert auch leute mit geringen kenntnissen nicht, an deinen quellcode zu kommen, und ausserdem verärgert es die benutzer, da man das kontextmenü ja auch noch für andere sachen brauchen kann.

                          also schmeiss es wieder raus, und lies auch mal das hier.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            OK, überzeugt ;-)

                            Nichtsdestotrotz ... ich fühle mich unsicher ... *g*
                            Yeah !

                            Kommentar


                            • #15
                              Und was haltet ihr davon:

                              PHP-Code:


                              if ($_SESSION[zufallszahl]) == $_POST[zufall]  && isset($_POST[text])) {
                                  
                              Datenbankeintrag
                              }
                              $_Session[‚zufallswert’] = zufallszahl //Zufallszahl generieren

                              <form action=’diesedatei.php’ method=’post’ name=’xyz’>
                                  <
                              input type=’hidden’ name=’zufall’ value=’$_SESSION[zufallswert]>
                                  <
                              input type=’text’ name=’text’>
                                  <
                              input type=’submit’ value=’absenden’>
                              </
                              form
                              Leider hab ich hier auf Arbeit keine Testumgebung und kann es nicht testen ...
                              Yeah !

                              Kommentar

                              Lädt...
                              X