Kai345: Ein sicherer Formmailer

Beitrag lesen

[latex]Mae  govannen![/latex]

<?php

// Erfassung der übermittelten Variablen in "Rohvatiablen"
$emailroh = $_GET['eMail'];
$nameroh =  $_GET['Name'];
$nachrichtroh = $_GET['Nachricht'];

Hier kopierst du die Werte aus $_GET in Variablen, um bestimmte Zeichen zu ersetzen ...

// Standard-Klauseln aus dem eMail-Template durch geprüfte Nachrichtenelemente ersetzten
$ende = str_replace("eMail", $_GET['eMail'], $nachricht);
$ende = str_replace("Name", $_GET['Name'], $ende);
$ende = str_replace("Name",nl2br( $_GET['Nachricht']), $ende);

benutzt aber hier die ursprünglichen unsicheren Werte aus $_GET. Die Variablen mit den ersetzten Werten hingegen werden nie wieder benutzt.

// "Verbotene" Zeichen werden manuell(!) ausgefiltert
$emailroh = str_replace("<", "&lt;", $emailroh);
$emailroh = str_replace("\n", "", $emailroh);
$emailroh = str_replace("\r", "", $emailroh);
$emailroh = str_replace(">", "&gt;", $emailroh);
$emailroh = str_replace(chr(34), "&quot;", $emailroh);
$emailroh = str_replace("or", "-oder-;", $emailroh);
$emailroh = str_replace(chr(39), "&quot;", $emailroh);
$nameroh = str_replace("<", "&lt;", $nameroh);
$nameroh = str_replace("\n", "", $nameroh);
$nameroh = str_replace("\r", "", $nameroh);
$nameroh = str_replace(">", "&gt;", $nameroh);
$nameroh = str_replace(chr(34), "&quot;", $nameroh);
$nameroh = str_replace("or", "-oder-;", $nameroh);
$nameroh = str_replace(chr(39), "&quot;", $nameroh);
$nachrichtroh = str_replace("<", "&lt;", $nachrichtroh);
$nachrichtroh = str_replace(">", "&gt;", $nachrichtroh);
$nachrichtroh = str_replace(chr(34), "&quot;", $nachrichtroh);
$nachrichtroh = str_replace("or", "-oder-;", $nachrichtroh);
$nachrichtroh = str_replace(chr(39), "&quot;", $nachrichtroh);
$nachrichtroh = str_replace("\n", "", $nachrichtroh);
$nachrichtroh = str_replace("\r", "", $nachrichtroh);

[code lang=php]str_replace()

  

> // Nachrichtentemplate definieren  
> $nachricht = '  
> <html>  
> <head>  
  
[...]  
  

> </html>  
> ';  
  
Heredoc macht die Sache übersichtlicher.  
  
  

> // E-Mail senden  
> mail($empfaenger, $betreff,$ende, $header);  
  
Keine Überprüfung, ob mail() erfolgreich war?  
  
  

> Meine Frage: Funktioniert das so und ist das Skript auch "hacksicher"?  
  
Nö, ist es nicht (siehe erster Teil).  
  
  
Cü,  
  
Kai

-- 
~~~ ken SENT ME ~~~  
Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken  
in Richtung "Mess up the Web".([suit](https://forum.selfhtml.org/?t=197497&m=1324775))  
[SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet)