mailsend.pl --> Fehler beim ausführen.

Bash, Shell, PHP, Python, Perl, CGI
andre丨
Posts: 125
Joined: 2003-09-28 13:34

mailsend.pl --> Fehler beim ausführen.

Post by andre丨 »

Hallo,
ich möchte ein Formular über ein Script auslesen lassen, welches mir dann den Inhalt per E-Mail schickt. Ich habe ein Scipt "mailsend.pl" welches folgender maßen ausschaut:

Code: Select all

#!/usr/bin/perl
#
# mailsend.pl
# version 961110
# copyright 1996 by bo larsson
# all rights reserved
#
# bugs or feedback to bliss@seagull.net
# for information on how to use, visit http://www.seagull.net/bliss/

$mailer = "/usr/sbin/sendmail -t";
$valist = "";

# Get the input and strip off all unwanted characters
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
$temp = $buffer;
$temp =~ s/+/ /g;
$temp =~ s/%([0-9|A-F]{2})/pack(C,hex($1))/eg;

# Store the matching name and value pairs
foreach (split(/&/,$temp))
{
	($NAM, $VAL) = split(/=/, $_);
	$DATA{$NAM} = $VAL;
	$valist .= "$NAM:$VALn";
}

# Grab necessary variables
$sendto = $DATA{'sendto'};
$subject = $DATA{'subject'};
$response = $DATA{'response'};
$user_email = $DATA{'user_email'};
$user_name = $DATA{'user_name'};

# Send mail to $recipient
open (MAIL, "|$mailer") || die "Can't open $mailprog!n";
print MAIL "Subject: $subjectn";
print MAIL "From: $user_email ($user_name)n";
print MAIL "To: $sendton";
print MAIL "n";
print MAIL "$valist";
print MAIL "n";
print MAIL "Remote IP address: $ENV{'REMOTE_ADDR'}n";
close (MAIL);

# Print the response
print "Content-type:text/htmlnn";
print "<HTML><BODY><TITLE>Thank you</TITLE>";
print "<FONT SIZE=+2>$response</FONT>";
print "</BODY></HTML>";
Beim ausführen über den Browser, bekomme ich keine Fehlermeldung, jedoch erhalte ich auch keine E-Mail.
Wenn ich dann das Script aber über die Shell ausführe erhalte ich folgende Fehlermeldung:

Code: Select all

107:~# /var/www/virtual/web-xxl.net/htdocs/cgi-bin/mailsend.pl
sendmail: warning: valid_hostname: numeric hostname: 107
sendmail: warning: valid_hostname: numeric hostname: 107
postdrop: warning: valid_hostname: numeric hostname: 107
postdrop: warning: valid_hostname: numeric hostname: 107
Content-type:text/html

<HTML><BODY><TITLE>Thank you</TITLE><FONT SIZE=+2></FONT></BODY></HTML>107:~#
Ich nutze als Mailserver Postfix.

Vielen Dank für eure Hilfe
mfg
Andre
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: mailsend.pl --> Fehler beim ausführen.

Post by wgot »

Hallo,

für den Browseraufruf: zeig mal das zugehörige HTML-Dokument mit dem Du das Script aufgerufen hast.

Für den Shellaufruf: wie hast Du die Parameter übergeben?

Ansonsten: das Script ist eine Spamschleuder, die Suchprogramme der Spammer freuen sich schon drauf, es in Deinem cgi-bin zu finden. :oops:

Gruß, Wolfgang
andre丨
Posts: 125
Joined: 2003-09-28 13:34

Re: mailsend.pl --> Fehler beim ausführen.

Post by andre丨 »

html Script:

Code: Select all

<form method=POST action="../cgi-bin/mailsend.pl">
          <tr bgcolor="#999999"> 
            <td colspan="2" border="1"> <div align="center"><font face="Verdana" style="font-size: 8pt" color="#FFFFFF"><strong>Personaldaten</strong></font></div></td>
          </tr>
          <tr> 
            <td width="50%"><font face="Verdana" style="font-size: 8pt" color="#FFFFFF">Anrede:</font></td>
            <td width="50%"><select name="Anrede">
                <option value="Herr" selected>Herr</option>
                <option value="Frau">Frau</option>
              </select></td>
          </tr>
          <tr> 
            <td height="24"><font face="Verdana" style="font-size: 8pt" color="#FFFFFF">Vor- 
              und Nachname:</font></td>
            <td><input name="Vor- und Nachname" type="text" value="" size="50"></td>
          </tr>
          <tr> 
            <td height="27"><font face="Verdana" style="font-size: 8pt" color="#FFFFFF">Telefonnummer:</font></td>
            <td><input type="text" name="Telefonnummer"></td>
          </tr>
          <tr> 
            <td><font face="Verdana" style="font-size: 8pt" color="#FFFFFF">eMail-Adresse:</font></td>
            <td><input type="text" name="user_email" size="50"></td>
          </tr>
          <tr> 
            <td colspan="2">&</td>
          </tr>
          <tr bgcolor="#999999"> 
            <td colspan="2"> <div align="center"><font face="Verdana" style="font-size: 8pt" color="#FFFFFF"><strong>Stellen 
                Sie Ihre Frage hier!</strong></font></div></td>
          </tr>
          <tr> 
            <td height="208"><font face="Verdana" style="font-size: 8pt" color="#FFFFFF">Frage 
              an WEB-XXL:</font></td>
            <td><textarea cols="50" rows="10" name:"Frage an Web-XXL"></textarea></td>
          </tr>
          <input type=HIDDEN name="sendto" value="support@web-xxl.net">
          <input type=HIDDEN name="response" value="Vielen Dank! Wir bearbeiten Ihre Anfrage!">
          <input type=HIDDEN name="subject" value="Supportanfrage!" >
          <tr> 
            <td>&</td>
            <td><input name="reset" type="reset" value="Zurücksetzen"> <input name="submit" type="submit" value="Abschicken"></td>
          </tr>
        </form>

Das Script ist nur ne übergangslösung, suche mir dann noch ein ordentliches. Kennst du ein gutes ?

mfg
Andre
wgot
Posts: 1675
Joined: 2003-07-06 02:03

Re: mailsend.pl --> Fehler beim ausführen.

Post by wgot »

Hallo,

ich hab das Script und das HTML bei mir hochgeladen, hat sofort funktioniert. Laufen bei Dir andere Perl-Scripts?

Von der Konsole geht es nicht, weil dann die Parameter nicht übergeben werden.

Zur Sicherheit:

Formmailer sind alle kritisch, die sind halt nunmal dazu da, daß Mails damit versandt werden. Und verbreitete kostenlose Formmailer sind besonders kritisch, weil die viel verwendet werden und es sich für die Spammer damit rentiert, danach zu suchen.

Du willst den Formmailer aber offensichtlich nur dafür einsetzen, daß man damit Mails ausschließlich an Dich senden kann. Dann ist er leicht abzusichern:

Benenne die mailsend.pl um nach z.B. mail8439.pl. Nimm aber nicht 8439, sondern vier selbst ausgedachte Ziffern.

In der HTML-Datei:

<form method=POST action="../cgi-bin/mailsend.pl">
ändern nach:
<form method=POST action="../cgi-bin/mail8439.pl">

und

<input type=HIDDEN name="sendto" value="support@web-xxl.net">
ändern nach:
<input type=HIDDEN name="sendto" value="SpamProtected">
(Du kannst auch irgendeinen anderen Spruch reinschreiben)

In der mailsend.pl, die jetzt mail8439.pl heißt:

$sendto = $DATA{'sendto'};
ändern nach:
$sendto = 'support@web-xxl.net';

Das war's schon.

Die Spammer suchen mit ihren Utilities gezielt nach Scripts mit bestimmten Namen, z.B. mailsend.pl, sendmail.pl, formmail.pl. Durch das Umbenennen auf einen schwer zu erratenden Namen (deshalb die vier Ziffern) wird das Script von primitiven Utilities nicht mehr gefunden. Und wenn es gefunden wird, geht der Spam ausschließlich an Dich, weil Deine Emailadresse nach der Ã?nderung fest im Script drinsteht. Da kommt natürlich nicht viel, das macht dem Spammer keinen Spaß. :lol:

In der Originalversion muß der Spammer nur ein HTML-Dokument erstellen, kann mit dem HTML Dein Script auf Deinem Server aufrufen, und Müll an jede beliebige Emailadresse versenden.

Gruß, Wolfgang