XSS mit PHP erkennen und loggen

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

  • XSS mit PHP erkennen und loggen

    Hallo,

    wie ich meine Formulare vor XSS schütze weiß ich...
    Nun stehe ich aber vor einem Problem. Ich will die Angriffe erkennen und loggen. Nur habe ich irgendwie keine Idee wie ich das machen soll. Vielleicht könnt ihr mir einen Ansatz geben.

    Soll ich zwei Funktionen nutzen? Eine zum erkennen und loggen und eine zum "säubern"?

    Gruß Nordin

  • #2
    Welche "Architektur" du am besten verwendest, bleibt eigentlich dir überlassen. machs so, wie es am besten in deinen bestehenden Code reinpasst.

    Die eigentliche Frage kann ich dir auch nur schwer konkret beantworten. Wenn du weißt, was du herausfilterst/blockst, dann wirst du ja auch wissen, was du entsprechen loggen musst.

    Kommentar


    • #3
      Hi,

      hier gibt es eine Möglichkeit, wie man z.B. htacces Angriffe "protokollieren" kann: .htaccess: Angriffe sehen und blockieren [toscho.design]

      mfg streuner
      Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
      der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

      "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

      Kommentar


      • #4
        Ich glaub ich habe meine Lösung gefunden. Hier ein vereinfachtes Beispiel:

        PHP-Code:
        $_POST['vorname'] = 'Max';
        $_POST['name'] = 'Mustermann <script>XSS</script>';

        function 
        xss() {
            
        $post '';
            foreach(
        $_POST as $key => $value){
                
        $post htmlspecialchars($_POST[$key],ENT_QUOTES);
                if (
        $post != $_POST[$key]) {
                    
        // Angriff loggen und Script beenden
                    
        die('Hacking attempt detected');
                }
            }
        }

        xss(); 
        Ich habe es noch nicht weiter zu ende gedacht und getestet, hatte noch keine Zeit. Werde mich nachher mal genauer darüber Gedanken machen.

        Aber ich glaube damit filter ich noch nicht zu 100% da folgendes sicher noch funktionieren wird:

        Code:
        <script>XSS</script>
        Codiert in:

        Hex:
        Code:
        %3C%73%63%72%69%70%74%3E%58%53%53%3C%2F%73%63%72%69%70%74%3E
        Hex-HTML:
        Code:
        &#x3C;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;&#x58;&#x53;&#x53;&#x3C;&#x2F;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;
        Decimal:
        Code:
        &#60&#115&#99&#114&#105&#112&#116&#62&#88&#83&#83&#60&#47&#115&#99&#114&#105&#112&#116&#62
        Dies sollte der Browser ja als ausführbaren Code interpretieren richtig?
        Wie gesagt, habe es noch nicht probiert... wer lange weile hat kann mir ja gern zuvor kommen

        PS: Interessant, dass beim bearbeiten des Beitrags bei der Dezimal-Code wieder der richtige (decodiert) angezeigt wird.

        Freue mich auch jeden Gedankenanreiz!!

        Kommentar


        • #5
          Zitat von Nordin Beitrag anzeigen
          PHP-Code:
                  $post htmlspecialchars($_POST[$key],ENT_QUOTES);
                  if (
          $post != $_POST[$key]) {
                      
          // Angriff loggen und Script beenden
                      
          die('Hacking attempt detected'); 
          Und diese nette Meldung wirfst du dann jedem Nutzer an den Kopf, der sowas wie „in der Mathematik gilt, 3 < 5“ posten will …?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Irgendwie war klar das sowas kommt!
            Hier ein vereinfachtes Beispiel:

            Kommentar


            • #7
              Na ja, du meintest, eine „Lösung“ gefunden zu haben … und das ist es so halt absolut nicht.

              (Davon abgesehen, sehe ich nicht mal ein zu lösendes Problem … wenn alles gegen XSS getan ist, dann lass’ ich die Kiddies doch spielen, wenn sie wollen …)
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Zitat von Nordin Beitrag anzeigen
                Dies sollte der Browser ja als ausführbaren Code interpretieren richtig?
                Nein, sollte er nicht und wird er auch nicht tun. Die Spitzklammern müssen auch als solche vorkommen, damit der Browser darin Tags erkennt. Sobald du sie maskierst (und das tust du ja mit der Character Reference &#x3c; = &lt; = &#60, wird der Browser das Kleiner-Als-Zeichen einfach anzeigen.

                Gruß,

                Amica
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar

                Lädt...
                X