![]() |
Re: [PHP] Email senden
So gerade wurde von einem netten Forumsteilnehmer mein Script geknackt mit diser HTML Datei:
Code:
Die Mail ging sowohl an mich, als auch an den anderen Forumsteilnehmer, was ja eigentlich nicht sein sollte.
<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> 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. :-? |
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. |
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. |
Re: [PHP] Email senden
Zitat:
|
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? |
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. |
Re: [PHP] Email senden
![]() |
Re: [PHP] Email senden
OK, jetzt sieht das alles so aus:
Code:
Ist es jetzt etwas sicherer?
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>'; } ?> |
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... |
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. |
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