FormMailer auf der Homepage

Ja ich auch. maceis hat *freundlichst* auf die Risiken hingewiesen und dir eine seiner Meinung nach sinnvolle Lösung präsentiert. Dann hast du ihn angepflaumt weil *du* damit nicht zurechtkommst. Kann man das riechen, wenn du das nicht sagst?

ich bin sehr gut mit der kritik zurechtgekommen , war ja nicht gegen mich :(

Hier wird gerne geholfen. Es wird aber auch ein bisschen Mitarbeit/guter Wille erwartet. Mit der Einstellung „verstehe ich nicht, will ich auch nicht, mach mir das gefälligst“ bist du hier jedenfalls an der falschen Stelle.
und hierbei kann ich dir nicht folgen :confused: ich hab doch lediglich gesagt das die hilfe , von dilirius cortez für mich um einiges hilfreicher war als die der anderen , wobei nicht gesagt ist das ich deshalb die hilfe falsch , bzw. schlecht finde ! leider kann ich einfach mit dieser art von hilfe , nicht viel anfangen . habe ich damit sagen wollen und nicht , bitte mach mir das doch bitte !

nur leider verläuft sich das ganze thema gerade in ein anderes...... :eek::mad:
 
@Darii
ich kann Dir voll und ganz zustimmen.

...
du könntest ja genau so gut , die dateien von dilirius nehmen und sie sicherer machen , da hättest du jetzt ihm und mir geholfen!
...
Wie soll das geh'n :confused:?
Weder Du noch er hat bisher auch nur eine einzige Zeile Code gepostet.
Abgesehen davon weigert DC sich ja "fremden Mist" in seiner Seite zu verwenden.

ich bin sehr gut mit der kritik zurechtgekommen , war ja nicht gegen mich :(
...
Die Kritik war gegen niemanden.
Nur Ihr beide habt plötzlich begonnen, persönlich und nicht fachlich zu argumentieren.
Viel Spass noch beim Coden.
 
Zuletzt bearbeitet:
Warum macht ihr da eigentlich so ein Brimborium drum? Wie wäre es mit der einfachen Variante:

Der TE will den Benutzern die Möglichkeit geben, ihm eine Nachricht zu schicken. Einfach die Empfängeradresse fest im PHP-Skript verdrahten und gut is. Dann ist er der einzige, der ggf. Spam bekommt.

Sicherheit ist eine Sache, aber man kann sich auch ein bisschen ins Hemd machen und Kümmelkörner spalten. :cool:
 
Einfach die Empfängeradresse fest im PHP-Skript verdrahten und gut is. Dann ist er der einzige, der ggf. Spam bekommt.

Ist er eben nicht. Lies mal den Wikipedia Artikel zu dem ich weiter oben den Link gepostet habe.

Im Zuge der Lösung des Problems: Postet hier den Code vom Formmailer und ich bau das Teil auf PHPMailer um, dürfte sich in wenigen Minuten machen lassen. Es ist zwar nicht der Sinn des Forums, dasd die eigentliche Arbeit dann von jemand anders gemacht wird, aber hier sollte es tatsächlich mal helfen.

Von mir aus auch gern per PN.
 
Ist er eben nicht. Lies mal den Wikipedia Artikel zu dem ich weiter oben den Link gepostet habe.
Den hab ich gelesen. Dabei muss die Empfängeradresse aber übertragen werden. Ich sprach davon, die fest zu verdrahten und eben nicht per POST zu übermitteln. Wie soll also die Header Injection auf Daten zugreifen können, die nur Serverseitig vorliegen und nicht per POST übermittelt werden?

- Benutzer sendet Formular
- Server extrahiert die Daten aus dem Formular und baut daraus die eMail zusammen (hierbei wird keine Empfängeradresse übermittelt)
- Server ergänzt die Empfängeradresse aus einer Variablen im Skript.
- Server sendet die Mail (bei uns über CDO Message aus ASP)

Die Empfängeradresse ist ausschließlich auf dem Server vorhanden, wird nicht über ein Formular übertragen und ist auch nirgendwo sichtbar.

Wie soll da also jemand etwas manipulieren? :kopfkratz:
 
<<<<<<<<<<<<<<<<< Contact_me.php >>>>>>>>>>>>>>>>

<html>
<head>
<title>Ich bin ein kleiner Formmailer mit Dankeseite :)</title>
<script>
<!--
function absenden() {
document.contact_me.submit();
}

function zuruecksetzen() {
document.contact_me.reset();
}
//-->
</script>
</head>

<body onLoad="tan()">

<div class="seite">

<form action="contact_me_danke.php" method="post" name="contact_me">

<input type="text" name="Name" value="Name"><br>
<input type="text" name="Vorname" value="Vorname"><br>
<input type="text" name="E-Mail" value="E-Mail"><br>
<input type="text" name="Betreff" value="Betreff"><br>
<textarea name="Text">Text</textarea><br>
<div class="contact_me">
<a href="javascript:absenden()">Absenden</a><br>
<a href="javascript:zuruecksetzen();">Zur&uuml;cksetzen</a>
</form>

</body>
</html>

<<<<<<<<<<<<<<<<< contact_me_danke.php >>>>>>>>>>

<html>
<head>
<title>Danke dir</title>
</head>

<body>


<?php
$empfaenger = "maxmustermann@musterdomain.de";
$name = $_POST["Name"];
$vorname = $_POST["Vorname"];
$email = $_POST["E-Mail"];
$betreff = $_POST["Betreff"];
$text = $_POST["Text"];
mail($empfaenger, $betreff, $text, "From: $vorname $name <$email>");
?>

<table border="0" cellpadding="0" cellspacing="0" width="800">
<tr>
<td width="100" valign="top">Absender</td>
<td width="700"><?php echo $name; ?>, <?php echo $vorname; ?> &lt;<i><a href="mailto:<?php echo $email; ?>"><?php echo $email; ?></a></i>&gt;</td>
</tr>

<tr>
<td width="100" valign="top">Betreff</td>
<td width="700"><?php echo $betreff; ?></td>
</tr>

<tr>
<td width="100" valign="top">Text</td>
<td width="700"><?php echo $text; ?></td>
</tr>
</table>


</body>
</html>
--------------------------------------------------------


hier die 2 files die ich von dilirius bekommen habe !

DANKE!
 
wie gesagt ich bin kein profi ich bin ein nackter anfänger und wollte doch nur einen formmailer ;)
 
Den hab ich gelesen. Dabei muss die Empfängeradresse aber übertragen werden. Ich sprach davon, die fest zu verdrahten und eben nicht per POST zu übermitteln. Wie soll also die Header Injection auf Daten zugreifen können, die nur Serverseitig vorliegen und nicht per POST übermittelt werden?

- Benutzer sendet Formular
- Server extrahiert die Daten aus dem Formular und baut daraus die eMail zusammen (hierbei wird keine Empfängeradresse übermittelt)
- Server ergänzt die Empfängeradresse aus einer Variablen im Skript.
- Server sendet die Mail (bei uns über CDO Message aus ASP)

Die Empfängeradresse ist ausschließlich auf dem Server vorhanden, wird nicht über ein Formular übertragen und ist auch nirgendwo sichtbar.

Wie soll da also jemand etwas manipulieren? :kopfkratz:


irgendjemand@irgendwo.xyz\nCc: spamopfer@sonstwo.xyz, nocheinopfer@anderswo.xzy

Hallo, das ist der Text der email...


Und schon geht die email an 3 weitere Empfänger. Genau so funktioniert Header injection, da ist es völlig egal ob die Mail Adresse fest verdrahtet ist oder nicht.

Den geposteten Code ändern werde ich später, hab jetzt gerade keine Zeit.
 

irgendjemand@irgendwo.xyz\nCc: spamopfer@sonstwo.xyz, nocheinopfer@anderswo.xzy

Hallo, das ist der Text der email...


Und schon geht die email an 3 weitere Empfänger. Genau so funktioniert Header injection, da ist es völlig egal ob die Mail Adresse fest verdrahtet ist oder nicht.
Das ist ja in dem Artikel schon erklärt. Ich versteh zwar immer noch nicht, warum PHP nicht in der Lage ist, sich daran zu halten was man programmiert und stattdessen die Mail wild in der Gegend rumschickt, aber gut.. Wenn du das so sagst..

Bei ASP passiert es mit dem CDO Message Objekt jedenfalls nicht. Wenn im Skript steht
Code:
oEmail.To = heinz@ketchup.com
dann nimmt er heinz@ketchup.com. Und nicht irgendwelche Angaben aus Betreff oder Body.
 
Weil PHP die komplette email als einen String UNGEPRÜFT an den MTA weitergibt. Was der dann damit macht ist eben nicht sicher. Manche prüfen und senden die email nur an den korrekten Empfänger, andere sind bei der Auswertung etwas toleranter und schicken die Mail dann eben an alle genannten Empfänger, auch die durch Header Injection eingefügten.

Mit ASP kann man sich nunmal nicht so einfach selbst in den Fuß schießen wie mit PHP. Programmieren und sauber und sicher programmieren sind eben zwei unterschiedliche Dinge.

Beim Lernen einer Programmiersprache macht nunmal jeder solche Fehler, deshalb haben wir ja hier darauf hingewiesen.
 
Wir reden hier aber noch von einer kleinen Webseite mit ein paar Besuchern
Bei meinem allerersten Versuch vor ein paar Jahren, So einen selbst gebauten Formmailer ins Netz zu stellen, auf einem Seite, wo es noch nichts groß weiter gab, hat mir gleich ein Spambot alles versalzen, seitdem habe ich sowas nicht mehr gebaut! :D
Einfach die Empfängeradresse fest im PHP-Skript verdrahten und gut is. Dann ist er der einzige, der ggf. Spam bekommt.
Mein Postfach war jedenfalls randvoll und ich habe einen erbosten Anruf vom Provider bekommen, der ein Kumpel eines Freundes war. Ob da noch an andere Adressen Spam rausgegangen ist, weiß ich nicht mehr.

Nach dem, was ich hier so gelesen habe, gibt es also Mittel und Wege, Spam zu verbreiten, an die ich gar nicht gedacht hatte. Würde es nicht aber vollkommen reichen, im Betreff kein @ zuzulassen? Andererseits wäre das ja auch nicht gerade elegant, denn vielleicht möchte ja mal ein netter seriöser legaler User ein @ im Betreff benutzen, das soll deer dann ja auch können. Oder man läßt den String Cc: nicht zu...
Ach, ich lese jetzt erstmal den Wikipedia-Artikel! ;)
 
...
Würde es nicht aber vollkommen reichen, im Betreff kein @ zuzulassen? ...
Nein, denn in der Absender Adresse muss
man ein @ zulassen, aber eben genau ein und nicht beliebig viele.

Im Grunde läuft es darauf hinaus, dass man davon ausgeht, dass alle Benutzereingaben potentiell böse sind und man keine (ich wiederhole: keine!) Benutzereingaben ungeprüft verarbeitet. Ist übrigens ein sehr gutes Übungsfeld für reguläre Ausdrücke :D.

Das hier sind Fehler, die am Anfang sicher von vielen gemacht werden.
Allein deswegen habe ich mir erlaubt (leider sehr zum Unmut von DC und amokdesign) in Beitrag #7 höflichst auf die Risiken hinzuweisen und einen möglichen Lösungsansatz zu nennen..

QBFinest wird sich ja jetzt freundlicherweise des Problems annehmen. Danke dafür.

@Saugkraft
PHP hält sich genauestens an das was programmiert wurde.
Der Fehler liegt hier beim Programmierer und nicht an der Sprache.
 
ich hätte da nur noch eine frage ,da ich es bis jetzt leider nicht nachvollziehen bzw. verstehen konnte !

wie und was soll ich jetzt an meinem code / formmailer ändern damit alle zufrieden sind und ich keine risiken eingehe ?

kann mir bitte jemand weiterhelfen ?
DANKE

@amokdesign

Benutzt du PHP4 oder PHP5?

kann ich nicht genau sagen da ich kein infoblatt meines providers habe, da es ein lokaler anbieter ist !
das einzige was ich habe ist das -> http://www.tauschek.at/tauschek/dateien/tarifblatt.pdf

leider wenig info ich weiss, aber günstig und schnell !
 
Nein, denn in der Absender Adresse muss
man ein @ zulassen, aber eben genau ein und nicht beliebig viele.
Das ist ja klar... es ging ja auch oben um das Betreff-Feld, in das ein \n und BCC: eingefügt wird, gefolgt Spamadressaten. Würde das Skript nun sicher werden, wenn ich alle \n aus dem Betreff und Absender entferne oder nur den Teil nehme, der vor dem ersten \n steht?
Eine Absender-Adresse kann man ja sogar darauf prüfen, ob sie wirklich existiert, jedenfalls hatte ich mal ein Skript, das den Email-Server fragt, ob ein MX-Eintrag existiert. Bin aber nicht mehr sicher, ob das damals ausnahmslos zuverlässig gearbeitet hat. Weißt Du darüber etwas?
Im Grunde läuft es darauf hinaus, dass man davon ausgeht, dass alle Benutzereingaben potentiell böse sind und man keine (ich wiederhole: keine!) Benutzereingaben ungeprüft verarbeitet. Ist übrigens ein sehr gutes Übungsfeld für reguläre Ausdrücke :D.
Dass alle Eingaben prüfungswürdig sind, ist ganz klar... damals war ich eben noch so naiv zu denken, wenn mein Testformular nirgends verlinkt ist, würde es auch nicht gefunden! :eek:
 
@amokdesign
Wenn Du eine Reiner-Text-Datei mit folgendem Code:
PHP:
<?php

phpinfo();

?>
unter einTest.php (nur die Endung ist wichtig) auf Deinem Server ablegst und dann im Browser aufrufst, erfährst Du alles über Deine PHP-Installation.
 
Zurück
Oben Unten