Webmail-Formulare und Abmahnungen
2006-03-14 15:35
Popcorn
Verdammte Axt. Das Problem mit Formularen im Netz, über die man Nachrichten versenden kann ist mir eigentlich wohl bekannt. Im Betreff wird etwa einfach ein "/n/nTo: noch.eine@email.de …" angesetzt und schon kann man anonymen Spam verteilen. Nun habe ich doch eine Abmahnung erhalten.
Beim nochmaligen betrachten des Skriptes habe ich mir dann auch gegen die Stirn geklatscht. Das @ habe ich brav gefiltert, nur nicht den hexadezimalen ASCII-Code dazu. [8] Tri hat mir eben noch mal aus seinem Perl-Buch einen schicken regulären Ausdruck rausgesucht, der alles umwandelt. Da hier ja einige Experten unterwegs sind, wäre ich sehr dankbar, wenn jemand einen Blick drauf werfen könnte, ob er noch etwas sieht.
Ich habe jetzt auf jeden Fall erst mal nach dem Motto mehr ist mehr ein paar Dinge geparst und geändert:
Beim nochmaligen betrachten des Skriptes habe ich mir dann auch gegen die Stirn geklatscht. Das @ habe ich brav gefiltert, nur nicht den hexadezimalen ASCII-Code dazu. [8] Tri hat mir eben noch mal aus seinem Perl-Buch einen schicken regulären Ausdruck rausgesucht, der alles umwandelt. Da hier ja einige Experten unterwegs sind, wäre ich sehr dankbar, wenn jemand einen Blick drauf werfen könnte, ob er noch etwas sieht.
Ich habe jetzt auf jeden Fall erst mal nach dem Motto mehr ist mehr ein paar Dinge geparst und geändert:
#!/usr/bin/perl
BEGIN {
$| = 1;
open (STDERR, ">&STDOUT");
print qq~Content-type: text/html\n\n~;
}
$mailprog = '/usr/sbin/sendmail';
$admin_email = "mail\@to-me.de";
use CGI;
use LWP::Simple;
$query = new CGI;
$email = $query->param('email');
$name = $query->param('name');
$betreff = $query->param('betreff');
$mailtext = $query->param('mailtext');
my $pass = "ok";
$message = "<table class='main'><tr><td>";
$betreff =~ s/\%(..)/pack("c",hex($1))/ge;
$mailtext =~ s/\%(..)/pack("c",hex($1))/ge;
$name =~ s/\%(..)/pack("c",hex($1))/ge;
$betreff =~ s/\:/\.\./g;
$mailtext =~ s/\:/\.\./g;
$name =~ s/\:/\.\./g;
$betreff =~ s/\\//g;
$name =~ s/\\/\//g;
$betreff =~ s/\@/\(at\)/g;
$mailtext =~ s/\@/\(at\)/g;
$name =~ s/\@/\(at\)/g;
if($email !~ /^[\w.+-]{1,64}\@[\w.-]{1,255}\.[a-z]{2,6}$/
|| length($betreff) > 80)
|| length($name) > 80)
|| length($email) > 80) {
$message.= '<span class='headline'>Fehler!</span><br /> Bla...';
} else {
$message .= '<span class='headline'>Nachricht gesendet!</span> bla...';
}
$message .= "</td></tr></table>";
if($pass eq "ok") { &mailadd; }
exit;
sub mailadd {
open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n";
print MAIL "From: $email\n";
print MAIL "To: $admin_email\n";
print MAIL "Subject: $betreff\n\n";
print MAIL "Text\n\n";
print MAIL "$mailtext";
print MAIL "\n\n";
print MAIL "-------------\n";
print MAIL "Versender gab den Namen - $name - an.";
print MAIL "\n\n";
close (MAIL);
open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n";
print MAIL "From: $admin_email\n";
print MAIL "To: $email\n";
print MAIL "Subject: Ihre Nachricht ist bei uns eingegangen\n\n";
print MAIL "Ihre Nachricht mit dem Betreff '$betreff' ist soeben bei uns eingegangen.";
print MAIL "\n\n";
print MAIL "Signatur\n";
print MAIL "Signatur";
print MAIL "\n\n";
close (MAIL);
}