Josef Reichardt: Formmailer komplett? Zugrifsrechte mit browser setzen...

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

  1. 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

  2. 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);

    --
    $a=n(1001010);print chr($a+=$_)for(0,43,-2,1,-84,65,13,1,5,
    -12,-3,13,-82,48,21,13,-6,-76,72,-7,2,8,-6,13,-104);sub n{
    $b=0;$_=0;for($c=length$_[0];$c;--$c){$_+=_($b)if substr$_
    [0],$c-1,1;$b++;}$_}sub _{($d)=@_;for($e=1;$d--;$e*=2){}$e}
    1. 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

      1. 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;

        hier solltest du bei einem lokalen Mailserver auch

        localhost eintragen können

        $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);

        --
        $a=n(1001010);print chr($a+=$_)for(0,43,-2,1,-84,65,13,1,5,
        -12,-3,13,-82,48,21,13,-6,-76,72,-7,2,8,-6,13,-104);sub n{
        $b=0;$_=0;for($c=length$_[0];$c;--$c){$_+=_($b)if substr$_
        [0],$c-1,1;$b++;}$_}sub _{($d)=@_;for($e=1;$d--;$e*=2){}$e}