Spam durch Mailversand über Formular

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

  • Spam durch Mailversand über Formular

    Hallo,

    es werden Spamnachrichten über ein Mailformular auf meiner Internetseite versendet. Ich bin auch schon bei mehreren Blacklists gelistet.

    Der Fehler lag offensichtlich in der "Absenderzeile". Man konnte dort ohne weiteres "To:" und "Bcc:" Blöcke einfügen.

    Ich habe mir nun eine Funktion geschrieben die:

    [1] den Referer überprüft
    [2] den Absender auf Zeilenumbrüche überprüft

    Ich glaube dass das alles war, um dem Spam entgegen zu wirken. Aber ich möchte sicherheitshalber nochmal andere Profis über mein Script schauen lassen um auch wirklich keine Sicherheitslücke mehr zu hinterlassen.

    Also hier mein Script:
    PHP-Code:
    <?php
    function mailsend($empfaenger,$betreff,$nachricht,$absender) {
        
    $send 0;

        
    $hosts = array();
        
    // hier den referer eintragen
        
    $host[] = "http://192.168.0.2";
        
    $host[] = "www.DeineDomainAdresse.de";

        
    $referer $_SERVER['HTTP_REFERER'];
        
    $remote_addr $_SERVER['REMOTE_ADDR'];

        if(
    $referer != "") {
            if(!(
    ereg("\n"$absender) OR ereg("\r"$absender))) {
                foreach(
    $host as $key => $val) {
                    
    #print $key . " " . $val . " " . $referer . "<br>";
            
                    
    if(ereg("$val"$referer)) {
                        
    $send 1;
                        
    #print $referer . " in $val gefunden! <br>";
                        
    break;
                    }
                    else {
                        
    #print $referer . " in $val nicht gefunden! <br>";
                    
    }
                }
            }

            if(
    $send == 1) {
                
    $headers 'From:' $absender "\n";
                
    $headers.= 'Reply-To:' $absender "\n";
                
    $headers.= 'X-Mailer: PHP/' phpversion() . "\n";
                
    $headers.= 'X-Sender-IP: ' $remote_addr "\n";
                
    $headers.= "Content-type: text/html\n";

                
    mail($empfaenger,$betreff,$nachricht,$headers);
                
                return 
    $send;
            }
            else {
                
    $headers "From: DeinName <Deine@eMailAdresse.tld>\n";
                
    $headers.= "Reply-To: [email]Deine@eMailAdresse.tld[/email]\n";
                
    $headers.= 'X-Mailer: PHP/' phpversion() . "\n";
                
    $headers.= 'X-Sender-IP: ' $remote_addr "\n";
                
    $headers.= "Content-type: text/html\n";
            
                
    $nachricht.= "<br><br>Host: $referer<br>IP: $remote_addr<br><br>$absender";

                
    mail("Deine@eMailAdresse.tld","SERVER: Spamverdacht bei Mailversand",$nachricht,$headers);
                
                return 
    $send;
            }
        }
        else {
            return 
    $send;
        }

        
    #print "SEND: " . $send;
    }
    ?>
    » http://www.htaccess-generator.com

  • #2
    meine firewall löscht den referer für mich, aber ich verstehe nichts davon, denn ich bin ein ottonormalverbraucher und laufe gefahr, einen herz-kasper zu bekommen, wenn ich eine e-mail von dir mit "spamverdacht..." bekomme.

    mit anderen worten, [1] ist für die katz. [2] dagegen in ordnung.
    lies dir mal http://www.webwork-magazin.net/tricks/artikel/214 und http://www.google.de/search?hl=de&q=email+injection ff. durch.

    Kommentar


    • #3
      Ok, kann ich den Referer auch ändern - dem System einen anderen vorgaukeln - oder nur entfernen? Wie sieht es mit der IP Adresse aus? Die ist dann ja wahrscheinlich auch für nen Ar***, oder?

      Es ist mal wieder einfacher als ich gedacht habe. In der Tat reicht die Zeile:

      PHP-Code:
      if (strpos($from,'\n') || strpos($from,'\r') || strpos($from,'\''))
          die(
      "No spamming please"); 
      völlig aus, um dem Spam die Lizenz zu entziehen. Aber ist es denn nicht auch möglich die mail()-Funktion ohne Absender zu verwenden, also nur "To: email@adresse.tld" oder "Bcc: ..." anzugeben? Dann müßte man ja wieder zum Referer greifen - ohnehin wird eine seriöse Anfrage wohl kaum ohne Referer geschehen.

      Wenn die IP Adresse nicht auch noch manipuliert werden kann, dann ist mein Script wenigstens für die Übermittlung der IP Adresse interessant. Wenn jedoch die IP auch noch entfernt werden kann ist es wirklich sinnlos. Habe mein Script dementsprechend angepaßt und gekürzt.

      PHP-Code:
      <?php
      function mailsend($empfaenger,$betreff,$nachricht,$absender) {
          
      $referer $_SERVER['HTTP_REFERER'];
          
      $remote_addr $_SERVER['REMOTE_ADDR'];

          if(
      strpos($absender,'\n') || strpos($absender,'\r') || strpos($absender,'\'')) {
              
      $headers "From: DeinName <email@adresse.tld>\n";
              
      $headers.= "Reply-To: [email]email@adresse.tld[/email]\n";
              
      $headers.= 'X-Mailer: PHP/' phpversion() . "\n";
              
      $headers.= 'X-Sender-IP: ' $remote_addr "\n";
              
      $headers.= "Content-type: text/html\n";
              
              
      $nachricht.= "<br><br>Host: $referer<br>IP: $remote_addr<br><br>$absender";

              
      mail("email@adresse.tld","SERVER: Spamverdacht bei Mailversand",$nachricht,$headers);
                  
              return 
      0;        
          }
          else {
              
      $headers 'From:' $absender "\n";
              
      $headers.= 'Reply-To:' $absender "\n";
              
      $headers.= 'X-Mailer: PHP/' phpversion() . "\n";
              
      $headers.= 'X-Sender-IP: ' $remote_addr "\n";
              
      $headers.= "Content-type: text/html\n";

              
      mail($empfaenger,$betreff,$nachricht,$headers);
                  
              return 
      1;
          }
      }
      ?>
      » http://www.htaccess-generator.com

      Kommentar


      • #4
        kann ich den Referer auch ändern
        ja.
        Wie sieht es mit der IP Adresse aus? Die ist dann ja wahrscheinlich auch für nen Ar***, oder?
        die kann man zwar nicht "vorgaukeln", aber durch die tatsache, dass es proxies gibt, ist wohl auch dieses vorhaben nur bedingt sinnvoll.
        Aber ist es denn nicht auch möglich die mail()-Funktion ohne Absender zu verwenden, also nur "To: email@adresse.tld" oder "Bcc: ..." anzugeben?
        welche rolle spielt diese frage im kampf gegen spam?
        Dann müßte man ja wieder zum Referer greifen - ohnehin wird eine seriöse Anfrage wohl kaum ohne Referer geschehen.
        das ist ein absoluter trugschluss.

        was bringt denn jetzt dein
        X-Sender-IP
        im header?

        p.s. es heißt nicht
        PHP-Code:
        '\n' 
        sondern
        PHP-Code:
        "\n" 

        Kommentar


        • #5
          viel wichtiger ist aber, woher diese werte an die fkt übergeben werden.

          $empfaenger,$betreff,$nachricht,$absender
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            welche rolle spielt diese frage im kampf gegen spam?
            Hat sich erledigt. Ich habe im Mailheader ja bereits "From: " vor dem Absender stehen... hab ich verpeilt, sorry.

            @Abraxax: die werte werden nach dem absenden des Formular an die Funktion übergeben. Die Funktion ist mitlerweile überflüssig, da sich das Problem mit einer Zeile lösen läßt und ich ohnehin nicht wirklich nachprüfen kann, wer hinter den Spamnachrichten steckt.
            » http://www.htaccess-generator.com

            Kommentar


            • #7
              @Abraxax: die werte werden nach dem absenden des Formular an die Funktion übergeben
              und nach welchen kriterien werden die daten geprüft? werden sie überhaupt geprüft?
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar

              Lädt...
              X