zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Sicherheit von eigenem PHP Kontaktformular

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 15.09.2006, 22:09
Benutzerbild von Lloyd Larkin
Don Quijote
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 19.11.2005
Ort: Wien
Beiträge: 733
Lloyd Larkin befindet sich auf einem aufstrebenden Ast
Standard Sicherheit von eigenem PHP Kontaktformular

Hallo zusammen

Ich habe vor einer Weile ein eigenes Kontaktformular erstellt, in dem ich mir andere "sichere" Kontaktformulare angesehen habe und diese Techniken zum Teil übernommen habe.

Dennoch ist es mir nicht ganz klar wie spamsicher unten stehendes Kontaktformular nun wirklich ist. Es ist mir klar ohne Captcha nichts völlig spamsicheres erreichen zu können, aber ich möchte mich wenigstens nicht täglich durch 100 Spammails wühlen müssen.

Hier das Formular:
PHP-Code:
 /****** BITTE ANPASSEN *******/
 
$admin_mail "mymail@domain.com";
 
/*****************************/
 
 
if(@($_POST['sent']) AND isset($_POST['sent'])) {
  
  
$name $_POST['name'];
  
$mail $_POST['mail'];
  
$text $_POST['text'];
  
  
$name stripslashes ($name); // Entfernt Slashes
  
$name trim ($name); // Entfernt Leerraum am Anfang und am Ende einer Zeichenkette
  
$name strip_tags ($name); // Entfernt html und php Tags
  
$mail stripslashes ($mail); // Entfernt Slashes
  
$mail trim ($mail); // Entfernt Leerraum am Anfang und am Ende einer Zeichenkette
  
$mail strip_tags ($mail); // Entfernt html und php Tags
  
$text stripslashes ($text); // Entfernt Slashes
  
$text trim ($text); // Entfernt Leerraum am Anfang und am Ende einer Zeichenkette
  
$text strip_tags ($text); // Entfernt html und php Tags
  
  /*$name = htmlentities($name, ENT_QUOTED);
  $mail = htmlentities($mail, ENT_QUOTED);
  $text = htmlentities($text, ENT_QUOTED);*/
  
  
  
$mail preg_replace"/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im"""$mail );
  
$mail preg_replace"/(content-type:|bcc:|cc:|to:|from:)/im"""$mail );
  
$text preg_replace"/(content-type:|bcc:|cc:|to:|from:)/im"""$text );
  
$name preg_replace"/(content-type:|bcc:|cc:|to:|from:)/im"""$name );
  
  
$header "From: $mail"\r\n" .
      
"Reply-To: $mail"\r\n" .
      
'X-Mailer: PHP/' phpversion() .
   
'Date: ' date('r') . 
   
'Message-Id: <' date('YmdHis') . '.' substr($temp_ary[0],2) . '@domain.com>';
  
  if(empty(
$name) OR empty($mail) OR empty($text)) {
   echo 
"<p><strong>Fehler</strong>: Bitte füllen Sie alle Felder aus. <a href=\"#\" onclick=\"history.back()\">Zurück zum Formular</a></p>"
  } else {
   if(
mail($admin_mail$name$text$header)) {
    echo 
"<p class=\"thankyou\">E-Mail wurde gesendet, vielen Dank.</p>";
   } else {
    echo 
"<p><strong>Fehler</strong>: Formular konnte nicht gesendet werden. <a href=\"#\" onclick=\"history.back()\">Zurück zum Formular</a></p>";
   }
  } 
Vielleicht könnt ihr mir den ein- oder anderen Tipp zur Verbesserung geben.

Freundliche Grüsse
lloyd
__________________
The only thing to do with good advice is pass it on. It is never any use to oneself. - Oscar Wilde -
#me { position: absolute; }
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 16.09.2006, 00:59
Glühend, brennend Rot
XHTMLforum-Mitglied
 
Registriert seit: 12.08.2006
Ort: Riehen
Beiträge: 152
Wasili befindet sich auf einem aufstrebenden Ast
Standard

Mh... Ich würde dir Vorschlagen, in Formular zum Abschicken noch Idiotenfragen einzubauen, die Zufällig aus der Datenbank ausgelesen werden und ein zufälliger name-Feld haben, dass du in der session speicherst.
Zum Beispiel fragen wie "3 vermindert um 2", "Welche Farbe hat die Sonne", "Ist Wasser grün?"... Sowas halt. Menschen haben damit nicht viel Mühe (Tolerant vielleicht bei der Kontrolle sein... *g*), Spambots dafür um so mehr.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 16.09.2006, 02:06
Benutzerbild von Lloyd Larkin
Don Quijote
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 19.11.2005
Ort: Wien
Beiträge: 733
Lloyd Larkin befindet sich auf einem aufstrebenden Ast
Standard

Naja, ist vielleicht nicht ganz so formell wie Captcha, aber geht dennoch in die gleiche Richtung die ich wenn möglich vermeiden möchte... wenns geht.
__________________
The only thing to do with good advice is pass it on. It is never any use to oneself. - Oscar Wilde -
#me { position: absolute; }
Mit Zitat antworten
  #4 (permalink)  
Alt 16.09.2006, 13:23
Benutzerbild von Boris
Tanzender Webentwickler
XHTMLforum-Kenner
 
Registriert seit: 29.07.2004
Ort: Kornwestheim / Stuttgart
Beiträge: 4.925
Boris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer Mensch
Standard

Du kannst das "säubern" aller Daten wesentlich verkürzen:

foreach($_POST as $key=>$value) $_POST[$key]=trim(strip_tags($value)); // Leerzeichen und HTML löschen

Die Slashes solltest du nur entfernen (stripslashes), wenn Serverseitig the magic_quotes bei PHP eingeschaltet sind (mit get_magic_quotes_gpc() einfach checken).
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris Bojic
Mit Zitat antworten
  #5 (permalink)  
Alt 16.09.2006, 19:25
Glühend, brennend Rot
XHTMLforum-Mitglied
 
Registriert seit: 12.08.2006
Ort: Riehen
Beiträge: 152
Wasili befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
array_map('strip_tags'$_POST);
array_map('trim'$_POST); 
Geht auch über Array-Funktionen... Selbe Wirkung
Mit Zitat antworten
  #6 (permalink)  
Alt 16.09.2006, 23:02
Benutzerbild von Lloyd Larkin
Don Quijote
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 19.11.2005
Ort: Wien
Beiträge: 733
Lloyd Larkin befindet sich auf einem aufstrebenden Ast
Standard

Danke euch beiden für den Hinweis, habe ich übernommen.
Aber wie schaut es mit der Sicherheit aus, würdet ihr es so in eure Webseite integrieren?
__________________
The only thing to do with good advice is pass it on. It is never any use to oneself. - Oscar Wilde -
#me { position: absolute; }
Mit Zitat antworten
  #7 (permalink)  
Alt 16.09.2006, 23:37
Benutzerbild von Boris
Tanzender Webentwickler
XHTMLforum-Kenner
 
Registriert seit: 29.07.2004
Ort: Kornwestheim / Stuttgart
Beiträge: 4.925
Boris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer Mensch
Standard

Mit einem Captcha noch ...
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris Bojic
Mit Zitat antworten
  #8 (permalink)  
Alt 17.09.2006, 00:58
Benutzerbild von Lloyd Larkin
Don Quijote
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 19.11.2005
Ort: Wien
Beiträge: 733
Lloyd Larkin befindet sich auf einem aufstrebenden Ast
Standard

Dann eben mit Captcha
Das PHP Captcha Security Image Script scheint mir passend. Liecht einzubinden und grafisch nicht ganz so schrecklich stören auf der Webseite wie viele andere. Welchen Favorit habt ihr?

Grüsse
lloyd
__________________
The only thing to do with good advice is pass it on. It is never any use to oneself. - Oscar Wilde -
#me { position: absolute; }
Mit Zitat antworten
  #9 (permalink)  
Alt 29.09.2006, 22:58
{ display: random;}
XHTMLforum-Kenner
 
Registriert seit: 08.09.2004
Ort: Stuttgart
Beiträge: 5.034
andir ist ein wunderbarer Anblickandir ist ein wunderbarer Anblickandir ist ein wunderbarer Anblickandir ist ein wunderbarer Anblickandir ist ein wunderbarer Anblickandir ist ein wunderbarer Anblick
Standard

So da bin ich auch mal wieder beim Thema "Sicheres Kontaktformular"

Ich bekomme den code von Lloyd nicht zum Laufen.

Hier der php Code des Auswerteformulars:

PHP-Code:
<html><head><title>Kontaktergebnis</title></head><body>
<?php

 
/****** BITTE ANPASSEN *******/
 
$admin_mail "me@home.de";
 
/*****************************/
  
 
if(@($_POST['sent']) AND isset($_POST['sent'])) {

  
$name stripslashes ($name); 
  
$name trim ($name); 
  
$name strip_tags ($name); 
  
$mail stripslashes ($mail); 
  
$mail trim ($mail); 
  
$mail strip_tags ($mail); 
  
$text stripslashes ($text); 
  
$text trim ($text); 
  
$text strip_tags ($text); 
..
$mail preg_replace("/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im"""$mail ); 
..
$mail preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im"""$mail ); 
..
$text preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im"""$text ); 
..
$name preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im"""$name ); 
..
$tele preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im"""$tele ); 

..
$header "From: $mail"\r\n" .
..
"Reply-To: $mail"\r\n" .
..
'X-Mailer: PHP/' phpversion() .
..
'Date: ' date('r') . 
..
'Message-Id: <' date('YmdHis') . '.' substr($temp_ary[0],2) . 'you@domain.com>';

..if(empty(
$name) OR empty($mail) OR empty($text)) {
..echo 
"<p><strong>Fehler</strong>: Sie haben nicht alle Pflichtfelder, <i>Name, E-Mail-Adresse, Nachricht</i> ausgef&uuml;llt. Bitte füllen Sie diese Felder aus. <a href=\"#\" onclick=\"history.back()\">Zur&uuml;ck zum Formular</a></p>"

..else {
..if(
mail($admin_mail$name$text$header)) {
..echo 
"<p>Ihre Nachricht wurde gesendet, vielen Dank</p>";

..else {
..echo 
"<p><strong>Fehler</strong>:Ihre Nachricht konnte nicht gesendet werden. Bitte versuchen Sie es noch einmal. <a href=\"#\" onclick=\"history.back()\">Zurück zum Formular</a></p>";
..}
..}
?>
</body></html>
Hier bekomme ich einen Parse-Fehler in der letzten Zeile angezeigt

Ich mach jetzt schon Stunden damit rum, komme aber nicht weiter.
Weiß jemand von Euch was dazu? Braucht ihr das HTML dazu?
__________________
Grüsse Andreas- auch mal wieder da...

Design isn't about the tools, it's about creating the best experience for the user. A design should be based on usability, accesibility, aesthetics, but never on floats, lists or background images. ( by Cameron Adams)
Wiedergelesen: > hier und hier

[Foren-Links] Dein Post? Klar, DAS vorher gelesen? Hilft. ## User-Landkarte
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 29.09.2006, 23:09
Benutzerbild von Boris
Tanzender Webentwickler
XHTMLforum-Kenner
 
Registriert seit: 29.07.2004
Ort: Kornwestheim / Stuttgart
Beiträge: 4.925
Boris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer MenschBoris ist ein sehr geschätzer Mensch
Standard

Was sollen die ganzen .. Punkte da drin?

Außerdem ist das hier sehr umständlich:
Code:
$name = stripslashes ($name); 
  $name = trim ($name); 
  $name = strip_tags ($name); 
  $mail = stripslashes ($mail); 
  $mail = trim ($mail); 
  $mail = strip_tags ($mail); 
  $text = stripslashes ($text); 
  $text = trim ($text); 
  $text = strip_tags ($text);
Das geht auch so (steht auch oben):

Code:
foreach($_POST as $key=>$value) $_POST[$key]=trim(strip_tags($value)); // Leerzeichen und HTML löschen
Das Formular wird aber so oder so nicht funktionieren, wenn die register_globals AUS sind (was immer häufiger der Fall ist). Die Variablen sollten mit $_POST['text'] und so weiter angesprochen werden.
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris Bojic
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kontaktformular nur per PHP? suppenelse Serveradministration und serverseitige Scripte 6 12.03.2010 19:42
PHP Kontaktformular und verschiedene Browser HTMLLernender (X)HTML 1 22.01.2010 12:08
PHP Kontaktformular mit Sonderzeichen minimalwerk Serveradministration und serverseitige Scripte 4 11.07.2009 22:04
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:57 Uhr.