Seite 1 von 1
PHP eMailformular schützen
Verfasst: 28.09.2005, 17:36
von Wirths Media
Hallo,
wie kann ich mein eMail Formular noch von unerwünschten angriffen schützen bzw. ist es noch möglich den header zu ändern um Mail an andere zu senden?
Ich benutze die Funktion strip_tags um den PHP und HTML Code aus den Feldern zu entfernen.
Reicht das?
MfG
Daniel
PHP eMailformular schützen
Verfasst: 28.09.2005, 17:43
von Pseudo
Hi,
benutzt du auch MySQL um die Nachrichten zu speichern oder werden diese gleich verschickt ?
Wenn du MySQL nutzt, dann solltest du auch mysql_real_escape_string() benutzten damit du sql injections verhindert... Ansonsten kann man deine Datenbank löschen etc.
- IP-Sperre
- Visuelle Darstellung eine Codes, den man eingeben muss, um eine E-Mail zu verschicken!
Gruß,
Pseudo
Verfasst: 28.09.2005, 17:43
von Liesl_Weppen
hi,
ausser strip_tags nutze ich noch
htmlspecialchars();
wandelt Sonderzeichen in HTML-Codes um
und str_replace()
$feldname= str_replace("\n", "", $feldname);
immer gut ist es die register_globals in der php.ini auf
Off zu stellen
PHP eMailformular schützen
Verfasst: 28.09.2005, 17:46
von heddesheimer
strip_tags allein reicht nicht. Wenn man in das Feld für die Absender-Mail zum Beispiel mehrere Mail-Adressen eintragen kann, könnte ein Angreifer so etwas eingeben:
test@domain1.com\nbcc:
boeser-bube@domain2.com
Im schlimmsten Fall wird dein Programm dann die erste Adresse als Absender verarbeiten, aber die Mail auch als Blindkopie an den Spammer versenden. Der sieht dann, dass dein Skript angreifbar ist.
Also: In jedem Fall bei der Eingabe der E-Mail auf *eine* gültige Mail-Adresse prüfen, dann kann nichts passieren.
Gruß Marian
Verfasst: 28.09.2005, 17:47
von Pseudo
Liesl_Weppen hat geschrieben:
immer gut ist es die register_globals in der php.ini auf
Off zu stellen
Das ist nicht immer gut... Umsonst gibt es die Funktion in der php.ini nicht
PS: Regexp wäre ganz nett, damit du die E-Mail Adresse prüfen kannst... und verwende die Post Methode nicht Get
PHP eMailformular schützen
Verfasst: 28.09.2005, 17:51
von Wirths Media
Hallo,
danke für die schnellen antworten...
Nein eine MySQL Datenbank wird nicht verwendet...
Einen code zum eingeben wollte ich eigenlich nicht verwenden
und ja die e-Mail wird überprüft...
mit
Code: Alles auswählen
function check_email($email) {
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$", $email)) {
return false;
}
return $email;
}
wobei die Mail nur an mich versand wird.
PHP eMailformular schützen
Verfasst: 28.09.2005, 17:52
von Pseudo
Dann brauchst du dir da auch keine gedanken machen....
Ansonsten reicht eine IP-Sperre oder die visuelle Darstellung von einem Code den der Sender eingeben muss
PHP eMailformular schützen
Verfasst: 28.09.2005, 17:55
von Wirths Media
super danke...
hab nämlich in letzter Zeit so nen lästiges kerlchen auf meiner Seite der immer das Formular benutzt.
Er schreibt immer HTML Code in die Felder....
Am Anfang hatte ich noch kein strip_tags drinnen...
Na hoffentlich gibt er bald auf...
Verfasst: 28.09.2005, 20:27
von net(t)worker
Pseudo hat geschrieben:Liesl_Weppen hat geschrieben:
immer gut ist es die register_globals in der php.ini auf
Off zu stellen
Das ist nicht immer gut... Umsonst gibt es die Funktion in der php.ini nicht
PS: Regexp wäre ganz nett, damit du die E-Mail Adresse prüfen kannst... und verwende die Post Methode nicht Get
bei register_globals = on steht bei index.php?a=wert im script sofort "wert" in der variable $a zu verfügung... wenn eine verwendete Variable nicht sauber initialisiert wird, kann man einem script so problemlos eine variable unterschieben....
bei register_globals = off kann man nur über den entsprechende superglobals auf die übergebende Variable zugreifen, so ist das unterschieben einer Variable unmöglich...
also ist es immer gut, wenn man register_globals auf off stellt, vorrausgesetzt das script kommt damit klar...
ich nutze für Formulare grundsätzlich die pear Klasse
HTML_QuickForm
, so werden alle Eingaben validiert und sicher übergeben... da ist nix mehr mit manipulieren...
PHP eMailformular schützen
Verfasst: 28.09.2005, 22:30
von magadoo
Das "Kerlchen" war auf meinen Kontaktformularen in letzter Zeit auch einige Male utnerwegs. Keine Ahnung was das bringen soll, jedenfalls konnte ich bis jetzt keinen Schaden oder ähnliches feststellen. Wahrscheinlich ist es wirklich ein Test, ob das Formular angreifbar ist.
Re: PHP eMailformular schützen
Verfasst: 29.09.2005, 09:23
von Graccem
calusa-xx hat geschrieben:
und ja die e-Mail wird überprüft...
mit
Code: Alles auswählen
function check_email($email) {
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$", $email)) {
return false;
}
return $email;
}
Die Funktion arbeitet aber nicht korrekt. Eine Emailadresse, wo bei der TLD nur ein Buchstabe eingegeben wird, wird als gültig validiert. Das sollte sie aber nicht sein, da es AFAIK keine TLDs gibt, die nur einen Buchstaben haben. Auch wäre es nicht verkehrt, die maximale Buchstabenanzahl für die TLD festzulegen. Auch kann die TLD keinen Bindestrich haben und Zahlen sind mir auch nicht bekannt.
Genauso ist es sehr unpraktisch, dass du einmal einen Boolschen Wert und einmal einen String zurück gibst. Besser wäre es, wenn du in beiden Fällen den Boolschen Wert zurück gibst.
Das sind die SAchen, die mir jetzt spontan aufgefallen sind

PHP eMailformular schützen
Verfasst: 29.09.2005, 09:27
von Wirths Media
danke
werde es bei Zeiten noch mal überarbeiten...
Verfasst: 03.10.2005, 16:14
von Gwolf
ich nehme das:
Code: Alles auswählen
$email = array();
$mailhost = '';
$mxhosts = array();
$email = explode('@',$absender);
if (isset($email[1])) $mailhost = $email[1];
$mailhost = $mailhost.".";
if (getmxrr($mailhost, $mxhosts) == FALSE){echo $fehlermeldung;}
doppelte absender mit /nbcc gehen net, und wird geprüft ob host existiert
zusätzlich natürlich noch :
Code: Alles auswählen
$value = htmlspecialchars(stripslashes($value));
für die übergebenen werte aus dem formular
cu Gwolf