Formmailer komplett? Zugrifsrechte mit browser setzen...
Josef Reichardt
- cgi
Hallo!
Ich habe jetz mit hilfe dieser seite einen formmailer "gebastelt", ist dieser komplett?
#!/usr/bin/perl
$Sendmail_Prog = "/usr/lib/sendmail";
use CGI;
$query = new CGI;
@names = $query->param;
$delimiter = $query->param('delimiter');
$mailto = $query->param('mailto');
$returnhtml = $query->param('return');
$subject = $query->param('subject');
$mailtext = "";
foreach(@names) {
$name = $_;
@values = "";
@values = $query->param($name);
if($name ne "mailto" && $name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$mailtext\n";
close(MAIL);
print "Location: $returnhtml\n\n";
Dann habe ich noch eine Frage, fur diese Datei(sendmail.pl) muss ich doch die recht chmod 0755 setzen, wie mache ich das mit dem ie? da habe ich zum ankreuzen volgendes
-----------------------------------------------------
Eigentümer [Lesen] [Schreiben] [Ausführen]
Gruppe [Lesen] [Schreiben] [Ausführen]
Alle Benutzer [Lesen] [Schreiben] [Ausführen]
-----------------------------------------------------
Ich habe jetzt alle für den eigentümer, und jeweils lesen und ausführen für gruppe und alle benutzer, ist das richtig?
THX
Josef Reichardt
Hallo Josef,
Wenn Du das Skript testest und es funktioniert, wird es komplett sein.
Wie Du aber aus dem ie heraus unter Unix Dateirechte umstellen möchtest, ist mir nicht klar. Der Wert 755 bedeutet jedenfalls
Eigentümer Lesen, Schreiben, Ausführen
Gruppe Lesen, Ausführen
Alle Benutzer Lesen, Ausführen
Gruß
Eidgenosse
use Mosche;
Ich habe jetz mit hilfe dieser seite einen formmailer "gebastelt", ist dieser komplett?
$mailto = $query->param('mailto');
Nein! Prüfe, ob die entsprechende Ziel-Adresse eine von dir _explizit_ erlaubte Adresse ist, sonst öffnest du SPAM-Versendern Tür und Tor.
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
Prüfe, ob du nicht Net::SMTP verwenden willst.
use Tschoe qw(Matti);
Hallo!
Das hört sich zuwar super an, aber ehrlich gesagt hab ich keine ahnung was du meinst, entweder steh ch total auf dem schlauch, oder mir ist das ganze zu hoch...
kannst du mir mal schreiben wie du es am besten machen würdest?
Wäre Super!
MfG
Josef
use Mosche;
Das hört sich zuwar super an, aber ehrlich gesagt hab ich keine ahnung was du meinst, entweder steh ch total auf dem schlauch, oder mir ist das ganze zu hoch...
kannst du mir mal schreiben wie du es am besten machen würdest?
Bitte zitiere das nächste Mal die Stellen, die du nicht verstanden hast, dann ist es einfacher, dir zu antworten.
$mailto = $query->param('mailto');
Nein! Prüfe, ob die entsprechende Ziel-Adresse eine von dir _explizit_ erlaubte Adresse ist, sonst öffnest du SPAM-Versendern Tür und Tor.
Wenn du im Script ungeprüft einen Parameter übernimmst, und den an Sendmail übergibst, kann jeder Spam-Versender dein Script benutzen, um seine Spam-Mails überall hin zu schicken. Das ist schlecht, denn das ist ungern gesehen und macht dich zwar nicht unbedingt strafbar, auf jeden Fall aber erstmal verdächtig (weil die Spam-Emails von deinem Server kommen).
Mach einen Array und trage dort die erlaubten E-mail Adressen ein:
my @all_mails = ('my_mail@blah.de', 'my_mail2@blub.de');
Dann überprüfst du nur noch, ob die per Parameter angegebene E-mail Adresse als Ziel-Adresse erlaubt ist:
if (grep { $mailto eq $_ } @all_mailq) {
# erlaubte E-mail Adresse, jetzt Mail versenden
# open sendmail ...
} else {
# Ziel nicht erlaubt, potentieller Spam-Versender
print "<h1>Spam ist aber nicht nett!</h1>";
}
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
Prüfe, ob du nicht Net::SMTP verwenden willst.
Wenn du ein installiertes Sendmail voraussetzt, bindest du dich an gewisse Server. Besser ist es, direkt mit Net::SMTP deine E-mails zu versenden, dann benötigst du kein Sendmail. Siehe dazu die Doku von Net::SMTP:
perldoc Net::SMTP
use Net::SMTP;
$smtp = Net::SMTP->new('mailhost');
$smtp->mail($ENV{USER});
$smtp->to('postmaster');
$smtp->data();
$smtp->datasend("To: postmaster\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();
$smtp->quit;
use Tschoe qw(Matti);