php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.05.2006, 18:13  
Neuer Benutzer
 
Registriert seit: 26.05.2004
Beiträge: 27
chrimp
chrimp eine Nachricht über ICQ schicken
Standard Sicherheit im Kontaktformular

Hallo

Evtl. gehört dies auch besser in Anfänger...
Ich habe hier ein Kontakformular, was jahrelange Dienste gut überstanden hatte
PHP-Code:
   1. <h1>Kontakt </h1>
   2. 

 </p>
   3. <?php
   4. 
# Adresse, an die die Formulardaten gesendet werden sollen:
   
5. if (isset($_POST["form_submitted"]))
   
6. {
   
7.   // übergebene Variablen ermitteln:
   
8.   $name $_POST['name'];
   
9.   $email $_POST['email'];
  
10.   $subject $_POST['subject'];
  
11.   $text $_POST['text'];
  
12.  
  13.   
// Überprüfungen der Daten:
  
14.   unset($errors);
  
15.   if ($email != "" and !preg_match("/^[^@]+@.+\.\D{2,5}$/"$email)) $errors[] = "Die Emailadresse scheint Fehler zu enthalten";
  
16.   if ($text == ""$errors[] = "Bitte geben Sie einen Text ein";
  
17.  
  18.   
if (empty($errors))
  
19.   {
  
20.     if ($name != ""$mail_name=$name; else $mail_name="Webformular Adresse nicht angegeben";
  
21.     if ($subject != ""$mail_subject $subject; else $mail_subject "Webformular: kein Betreff angegeben";
  
22.     if ($email != ""$mail_email $email; else $mail_email "nicht@angegeben.xyz";
  
23.     $ip $_SERVER["REMOTE_ADDR"];
  
24.     $text stripslashes($text);
  
25.     $header"From: ".$mail_name." <".$mail_email.">\n";
  
26.     $header .= "Reply-To: ".$mail_name." <".$mail_email.">\n";
  
27.     $header .= "X-Mailer: PHP/" phpversion(). "\n";
  
28.     $header .= "X-Sender-IP: $ip\n";
  
29.     $header .= "Content-Type: text/plain";
  
30.     if (@mail("info@josefgopp.de"$mail_subject"Diese Mail wurde über das Webformular auf [url]www.josefgopp.de[/url] verfasst:\n\n".$text$header)) { $sent true; }
  
31.     else { $errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen"; }
  
32.    
  33.     
// Kopie an Absender:
  
34.     if (isset($sent) && isset($email) && $email != "" && isset($_POST['copy']))
  
35.     {
  
36.       $header"From: [email]info@josefgopp.de[/email]\n";
  
37.       $header .= "X-Mailer: PHP/" phpversion(). "\n";
  
38.       $header .= "X-Sender-IP: $ip\n";
  
39.       $header .= "Content-Type: text/plain";
  
40.       @mail($email$mail_subject"Kopie der versendeten E-Mail auf www.josefgopp.de:\n\n".$text$header);
  
41.     }
  
42.   }
  
43. }
  
44.  
  45. 
if (empty($sent))
  
46. {
  
47.   if(isset($errors))
  
48.   {
  
49.     ?><p class="caution">Fehler:</p><ul><?php foreach($errors as $f) { ?>[*]<?php echo $f?><?php ?>[/list]<?php
  50.   
}
  
51.  
  52.   ?>
<form method="post" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>"><div>
  53.   

[b]Name:[/b]
<input class="fs" type="text" name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""?>" size="35" />
  54.     

  55.     [b]E-Mail:[/b]

  56.     <input class="fs" type="text" name="email" value="<?php if (isset($email)) echo htmlentities(stripslashes($email)); else echo ""?>" size="35" />
  57.     

  58.     [b]Betreff:[/b]
<input class="fs" type="text" name="subject" value="<?php if (isset($subject)) echo htmlentities(stripslashes($subject)); else echo ""?>" size="35" /></p>
  59.   [b]Nachricht:[/b]
<textarea class="fs" name="text" cols="55" rows="12"><?php if (isset($text)) echo htmlentities(stripslashes($text)); else echo ""?></textarea>

  60.   

<input type="submit" name="form_submitted" value="OK - Absenden" /> </p>
  61.   </div></form><?php
  62. 
}
  
63. else
  
64. {
  
65.   if (empty($email)) { ?>

[b]Danke![/b]
Nachricht erfolgreich versendet.
Allerdings haben Sie keine E-Mail-Adresse angegeben, damit ich mit Ihnen Kontakt aufnehmen kann.</p><?php }
  
66.   else { ?>

[b]Danke![/b]
Nachricht wurde erfolgreich versendet.</p><?php }
  
67. }
  
68.  
  69. ?>
Dann wurde das Script als Spamschleuder missbraucht, was an der Kopiefunktion lag.
Doch auch nachdem ich diese auskommentiert habe (Zeile 60), werden trotzdem Spammails über das Script verschickt.
Wo ist mein Denkfehler, bzw die Lücke?

Danke schonmal!
chrimp ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.05.2006, 19:24  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Den HTML Code auszukommentieren nützt garnichts. Du musst schon den PHP Code auskommentieren damit kein Spam versandt wird. derjenige der Spam senden hat ja eh eine auotmatische Funktion die nicht immer den HTML Code aufruft sondern einfach nur die PHP Datei und übergibt die Werte.
Flor1an ist offline  
Alt 28.05.2006, 22:24  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Die bindeste die POST-Variablen direkt in den header ein, die zudem auch noch unzureichen geprüft werden. Ein potentieller Spammer kann auf diese Weise fast den gesamten Header selbst bestimmen, die dann eben auch alternative Empfänger enthält.
Zur Validierung der Mail-Adresse solltest dir Das PEAR-Mail-Paket mal anschauen. Beim Namen am Besten alles ausser Buchstaben und Freizeichen verbieten, vielleicht noch Unterstrich und Punkt und solche Spielereien verbieten.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 29.05.2006, 14:48  
Neuer Benutzer
 
Registriert seit: 26.05.2004
Beiträge: 27
chrimp
chrimp eine Nachricht über ICQ schicken
Standard

Ok, erstmal danke für die Antworten.
Zitat:
Zitat von KingCrunch
Die bindeste die POST-Variablen direkt in den header ein...
Was genau meinst du damit?

D.h. dann auch, dass diese Version:
PHP-Code:
<h1>Kontakt </h1>


 </p>
<?php
# Adresse, an die die Formulardaten gesendet werden sollen:
if (isset($_POST["form_submitted"]))
 {
  
// übergebene Variablen ermitteln:
  
$name $_POST['name'];
  
$email $_POST['email'];
  
$subject $_POST['subject'];
  
$text $_POST['text'];

  
// Überprüfungen der Daten:
  
unset($errors);
  if (
$email != "" and !preg_match("/^[^@]+@.+\.\D{2,5}$/"$email)) $errors[] = "Die Emailadresse scheint Fehler zu enthalten";
  if (
$text == ""$errors[] = "Bitte geben Sie einen Text ein";

  if (empty(
$errors))
   {
    if (
$name != ""$mail_name=$name; else $mail_name="Webformular Adresse nicht angegeben";
    if (
$subject != ""$mail_subject $subject; else $mail_subject "Webformular: kein Betreff angegeben";
    if (
$email != ""$mail_email $email; else $mail_email "nicht@angegeben.xyz";
    
$ip $_SERVER["REMOTE_ADDR"];
    
$text stripslashes($text);
    
$header"From: ".$mail_name." <".$mail_email.">\n";
    
$header .= "Reply-To: ".$mail_name." <".$mail_email.">\n";
    
$header .= "X-Mailer: PHP/" phpversion(). "\n";
    
$header .= "X-Sender-IP: $ip\n";
    
$header .= "Content-Type: text/plain";
    if (@
mail("info@josefgopp.de"$mail_subject"Diese Mail wurde über das Webformular auf [url]www.josefgopp.de[/url] verfasst:\n\n".$text$header)) { $sent true; } 
    else { 
$errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen"; }
   }
 }

if (empty(
$sent))
 {
  if(isset(
$errors))
   {
    
?><p class="caution">Fehler:</p><ul><?php foreach($errors as $f) { ?>[*]<?php echo $f?><?php ?>[/list]<?php
   
}

  
?><form method="post" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>"><div>
  

[b]Name:[/b]
<input class="fs" type="text" name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""?>" size="35" />
    

    [b]E-Mail:[/b]

    <input class="fs" type="text" name="email" value="<?php if (isset($email)) echo htmlentities(stripslashes($email)); else echo ""?>" size="35" />
    

    [b]Betreff:[/b]
<input class="fs" type="text" name="subject" value="<?php if (isset($subject)) echo htmlentities(stripslashes($subject)); else echo ""?>" size="35" /></p>
  [b]Nachricht:[/b]
<textarea class="fs" name="text" cols="55" rows="12"><?php if (isset($text)) echo htmlentities(stripslashes($text)); else echo ""?></textarea>

  

<input type="submit" name="form_submitted" value="OK - Absenden" /></p>
  </div></form><?php
 
}
else
 {
  if (empty(
$email)) { ?>

[b]Danke![/b]
Nachricht erfolgreich versendet.
Allerdings haben Sie keine E-Mail-Adresse angegeben, damit ich mit Ihnen Kontakt aufnehmen kann.</p><?php }
  else { 
?>

[b]Danke![/b]
Nachricht wurde erfolgreich versendet.</p><?php }
 }

?>


?>
genau so anfällig ist?
damnit! Gleich mal pear anschauen....
chrimp ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
IE6 Kontaktformular, Probleme mit Variablen Meijestic PHP Tipps 2008 3 07.07.2008 19:29
Kontaktformular plus 3 Attachments funzt net catmoon PHP Tipps 2008 2 25.06.2008 10:15
[Erledigt] Kontaktformular - bitte helft mir celine70 PHP Tipps 2008 3 19.05.2008 11:28
Sicherheit in PHP robydog PHP Tipps 2008 52 10.05.2008 13:09
Erfahrung mit Sessions ( Sicherheit ) GELight PHP Tipps 2006 6 11.08.2006 17:55
Fehler in Kontaktformular chrimp PHP Tipps 2006 8 17.06.2006 13:04
Sicherheit... GELight PHP Tipps 2006 5 31.01.2006 15:58
Kontaktformular - Sieht klasse aus, aber verschickt nix! :-( PHP Tipps 2005-2 15 06.10.2005 19:24
Sehr simples Kontaktformular - Prinzip imported_Ben Beitragsarchiv 2 02.08.2005 22:41
Sicherheit.... renzo PHP Tipps 2005-2 1 27.06.2005 15:53
Kontaktformular mit bleibenden Einträgen! PHP Tipps 2005 2 16.05.2005 19:06
Sicherheit von Klartext-Passwörtern PHP Tipps 2005 14 30.03.2005 15:22
[Erledigt] kontaktformular mit bild PHP-Fortgeschrittene 1 16.02.2005 11:13
Problem mit Kontaktformular? PHP Tipps 2004-2 6 13.12.2004 18:48
Kontaktformular - Nachricht wurde verschickt PHP Tipps 2004 4 22.10.2004 09:18

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php x-mailer sicherheit, kontaktformular sicherheit, name=\form_submitted\, htmlentities sicherheit

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:07 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.