PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Spam durch Mailversand über Formular (http://www.selfphp.de/forum/showthread.php?t=12045)

bweichel 31.12.2005 18:07:17

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: Deine@eMailAdresse.tld\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;
}
?>


meikel (†) 01.01.2006 07:09:04

AW: Spam durch Mailversand über Formular
 
Zitat:

Zitat von bweichel
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.

Im Betreff kann man das immer noch. Auch das Subject gehört zum Header.

Jürg 01.01.2006 14:47:36

AW: Spam durch Mailversand über Formular
 
Ich wurde mit dem selben Problem bei mehreren URLs konfrontiert.
Nun habe ich eine Lösung die auch time() verwendet.
Zumindest funktioniert das Ganze so gut, dass kein Spam mehr erfolgt.
Script

bweichel 04.01.2006 11:39:54

AW: Spam durch Mailversand über Formular
 
ja, also mein beispiel (herausfiltern der \n und \r) funktioniert nicht. es hat wieder jemand geschafft spam zu versenden. jetzt über den bcc. ich werde nun mal time() verwenden. die zahlen mit denen du time() multipliziert bzw. dividierst sind zufallszahlen, oder? damit keine hinter die kombinations des code`s kommt, oder habe ich da was falsch verstanden?

Jürg 04.01.2006 12:26:25

AW: Spam durch Mailversand über Formular
 
Das mit den Zufallszahlen ist so, aber Primzahlen, dann wird es etwas komplizierter.
Beachte aber auch, dass ich das '@' und Tags konsequent entferne.

meikel (†) 04.01.2006 23:25:31

AW: Spam durch Mailversand über Formular
 
Zitat:

Zitat von bweichel
ja, also mein beispiel (herausfiltern der \n und \r) funktioniert nicht. es hat wieder jemand geschafft spam zu versenden.

Warum liest Du nicht meinen Text?!

Neben der Zieladresse gehört auch der Betreff mit zum Header, verdammt noch mal!

Du sollst nicht "herausfiltern" sondern schlicht und einfach "erkennen" und den Versand abbrechen.

Wer es schafft, in Adresse u/o Subjekt einen Zeilenumbruch einzubauen (im Formular nicht möglich aber per Script keine Hürde), der will Dein Script für SPAM ausnutzen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:35:56 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.