Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Email senden (https://www.delphipraxis.net/56516-%5Bphp%5D-email-senden.html)

Luckie 7. Nov 2005 23:04

Re: [PHP] Email senden
 
So gerade wurde von einem netten Forumsteilnehmer mein Script geknackt mit diser HTML Datei:
Code:
<html>
  <form ACTION="http://www.luckie-online.de/php/mail.php" METHOD=POST>
    Ihre E-Mail Adresse:
 
    <textarea NAME="from" COLS=60 ROWS=15>test@tester.de>
To: Tester <xyzabc@foob.ar>
Date: Sat, 22 Oct 2005 16:50:53 +0200 


.
</textarea>

 
    Ihr Name:
 
    <input NAME="yourname" size=35>

 
    Betreff:
 
    <input NAME="subject" size=35>

 
    Ihr Text:
 

    <textarea NAME="text" COLS=60 ROWS=15>
diese mail solltest du gar nicht bekommen, sorry, falls es viele versuchen und du zu gespamt

wirst..., bei mir bleibt es bei diesem einen test! 
versprochen...

Gruß Peter
</textarea>

 
    <input TYPE="submit" VALUE="Senden">
  </form>
</html>
Die Mail ging sowohl an mich, als auch an den anderen Forumsteilnehmer, was ja eigentlich nicht sein sollte.
Den Tipp von Pr0gs habe ich noch nicht eingebaut, hätte der das verhindert? Alös erstes werde ich die Variable $to zu einer Konstanten machen, damit man diese schon mal nicht überschreiben kann.

Puh, jetzt sieht man mal, wie schwer es ist solche Sachen wasserdicht zu bekommen, dabei ist das ja noch recht einfach und übersichtlich. :-?

ripper8472 7. Nov 2005 23:07

Re: [PHP] Email senden
 
es nuetzt nichts, die konstant zu machen.

du musst alle eingaben parsen, also die eingegebenen emailadressen des users zerlegen und auf richtigkeit pruefen. wie du siehst, hat er da weitere header eingeschmuggelt.

edit: aeh unfug. $from musst du im code festlegen. sonst kann ja wie gesehen jeder irgendwas reingeben.

Pr0g 7. Nov 2005 23:10

Re: [PHP] Email senden
 
Mein Vorschläge hätte das Umgehen auch nur verhindert, wenn die register_globals Einstellung auf dem Sever auf "off" gestanden hätte (was sie ja nicht ist, sonst könnte dein Script in jetziger Form nicht funktionieren), da dann kein Zugriff mehr von außen auf die Variablen möglich ist.

Auch unterscheidest du momentan ja nicht zwischen GET und POST Daten, daher hätte man sich das Formular auch fast sparen können und eine Mail nur per Aufruf des Links mit passenden Parametern abschicktn können.

Luckie 7. Nov 2005 23:10

Re: [PHP] Email senden
 
Zitat:

Zitat von ripper8472
du musst alle eingaben parsen, also die eingegebenen emailadressen des users zerlegen und auf richtigkeit pruefen. wie du siehst, hat er da weitere header eingeschmuggelt.

Uff, das übersteigt etwas mein können. Was muss ich da wie parsen und überprüfen?

x000x 7. Nov 2005 23:15

Re: [PHP] Email senden
 
ich würde $from gar nicht für den header verwenden, sondern einen vordefinierten absender benutzen...
@luckie: kannst du die gmx adresse bitte aus dem beitrag entfernen?

ripper8472 7. Nov 2005 23:17

Re: [PHP] Email senden
 
erstmal sorry, dass ich da oben so vorschnell "sicher." gesagt hab. hab deinen code nicht gruendlich genug gelesen.

also. alle daten, die von aussen kommen, sind der potenzielle tod fuer dein script. $from wolltest du dem script per aufruf fuettern, das hat dieser jemand von vor ein paar posts aufgedeckt und einen weg gezeigt, es auszunutzen. das kannst du erstmal fixen, indem du $post im script zuweist.

eingaben von aussen zu pruefen ist schon schwierig. da geht man am besten nicht mit "einschraenken" vor, sondern mit "erlauben". beispiel username in einem forum:
wuerde ich namen verbieten, die die sonderzeichen "!@#$%^&*()" enthalten, dann macht sich einer die muehe, andere sonderzeichen zu finden.
erlaube ich stattdessen nur a-z, A-Z, 0-9 und leerzeichen und verlange mindestens 3-zeichen-lange nicks, dann ist das sicher.

Pr0g 7. Nov 2005 23:22

Re: [PHP] Email senden
 
Hier hast du nen Artikel zum Thema "Emailadressen validieren". Zumindest den ersten Teil mit der Validierung per RegEx kannst du in dein Script packen um dann zu prüfen, ob der User nur eine Email, oder mehr angegeben hat.

Luckie 7. Nov 2005 23:32

Re: [PHP] Email senden
 
OK, jetzt sieht das alles so aus:
Code:
  define("TO", "mpuff@luckie-online.de");
 
  function validate_email($email)
  {
 
     // Create the syntactical validation regular expression
     $regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";
 
     // Presume that the email is invalid
     $valid = 0;
 
     // Validate the syntax
     if (eregi($regexp, $email))
     {
        list($username,$domaintld) = split("@",$email);
        // Validate the domain
        if (getmxrr($domaintld,$mxrecords))
           $valid = 1;
     } else {
        $valid = 0;
     }
     return $valid;
  }

  $headers = "MIME-Version: 1.0\r\n".
   "Content-Type: text/plain; charset=iso-8859-1\r\n".
   "From: \"Kontakt luckie-online.de\" <webmaster@luckie-online.de>\r\n".
   "To: ".TO." <".TO.">\r\n".
   "Date: ".date("r")."\r\n";

  $msg = 'Name: '.$_POST['yourname']."\n".
    'E-Mail: '.$_POST['from']."\n\n".
    'Text:'."\n".$text;
  $msg = stripslashes($msg);
?>

// ...

<?php
  if ((empty($from) || empty($text)) || (!validate_email($_POST['from'])))
  {
     echo "

Bitte füllen Sie mindestens die Felder 'E-Mail Adresse' und 'Text' aus und überprüfen Sie ihre E-Mail Adresse
     auf Gültigkeit.</p>";
  }
  else if (!mail($to, $subject, $msg, $headers))
  {
    echo '

Es ist ein Fehler beim Senden der E-Mail aufgetreten.</p>';
  }
  else
  {
    echo '

Die E-Mail wurde erfolgreich gesendet.</p>';
  }
?>
Ist es jetzt etwas sicherer?

x000x 7. Nov 2005 23:40

Re: [PHP] Email senden
 
also ich sehe im moment nichts mehr. bis auf $subject, aber in wie weit, bzw. ob überhaupt man das missbrauchen kann,
dazu fehlen mir die php kenntnisse...

ripper8472 7. Nov 2005 23:44

Re: [PHP] Email senden
 
$subject wuerd ich auch im code festlegen.
von irgendwas ausgehen ist der erste schritt...
moeglicherweise kann man so weitere header einbauen, wie das mit $from schon gemacht wurde...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 Uhr.
Seite 3 von 5     123 45      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz