PHP und E-mail und Sichern

Ich habe ein Prob bei E-mails senden, pls help…

also hier das Formular:

...
<div id="Mid"> <font size="3"><center><u>Schreiben Sie mir ihre Vorschläge/Bewertung.</u><br><br></center></font>
<br>
<font size="3">
<center>
<form action="http://www.supersites.bplaced.net/Braue/php/sendmail.php" method="post">
<input id="adress" Type="text" name="e_mail_absender" value="ihre-email@maildomain.xy" size="35">
<br>
<textarea id="adress" name="text" cols="50" rows="15">Gebe Sie hier ihren Vorschlag/Bewertung ein.</textarea>
<br>
<input type="reset" name="reset" value="Zur&uuml;cksetzen">
<input type="submit" name="Abschicken" value="Abschicken">
</form>
</center>
</font>
</div>
...

und hier das PHP script:

[code]<?php
$absender2=$_POST[“e_mail_absender”]; //ok
$betreff =“SV Berliner Brauereien-- HTML-Seite”; //ok
$empfaenger="maenner@abwesend.de";
$text=$_POST[“text”]; //nicht ok

if($text="")
{
echo (“Ihre eingaben waren nicht korrekt und die E-mail wurde nicht versandt.”);
echo ("
Versuchen Sie es nocheinmal.");
echo (““);
mail($empfaenger,$betreff,””.$text."",“From:<”.$absender2.">");
}
else
{
mail($empfaenger,$betreff,$text,“From:<”.$absender2.">");
echo (“Ihre eingaben waren korrekt und die E-mail wurde versandt.”);
echo (“

Wir danken für ihre Aufmerksamkeit und werden versuchen Ihre Wünsche sobald wie möglich umzusetzen.”);
echo ("");
}
?>[/code]

und hier das Problem:

Ich bekomme immer eine E-mail, die aber nur Betreff + Absender hat.
Ich bekomme keinen Text mitgeschickt…

Wo ist das Prob?


Ich laß hier etwas von SQL-Injektion und XSS Hackmöglichkeiten.
Könnte mir mal jemand ganz einfach erklären, wie ich meine Eingaben dagegen schützen kann.??

Link:
http://www.supersites.bplaced.net/Braue/php/trainer.php

Danke für eure Hilfe. :=)

MFG Sebastian

versuche zu verstehen was da passiert.

PHP führt das von innen nach außen aus:
[code]$text = ""[/code]
und die Rückgabe wird an IF übergeben:
[code]if("")[/code]
Das schlägt fehl und du landest im else-Teil, wobei vorher aber dein $text auf "" gesetzt wurde...

entweder du verwendest:
[code]if($text == "")[/code]
oder besser:
[code]if(empty($text) || strlen($text) < 20)[/code]
Damit wenigstens was sinnvolles in der Mail steht :wink:

versuche zu verstehen was da passiert.

PHP führt das von innen nach außen aus:

und die Rückgabe wird an IF übergeben:

Das schlägt fehl und du landest im else-Teil, wobei vorher aber dein $text auf “” gesetzt wurde…

entweder du verwendest:

oder besser:

Damit wenigstens was sinnvolles in der Mail steht :wink:

Ahhh

ich tests gleich.

DAnke.

Ok es funktioniert!!!

Kann jetzt noch jemand erklären, wie man sich vor den Angriffen schützt?

vilen Danke im Vorraus

In dem man sich erst mal informiert (Google), worauf sie basieren und wie sie funktionieren - und sich dann informiert/überlegt, was dagegen unternommen werden kann (/muss).

Naja,

man kann mit SQL-Injecton SQL befhlsschnittzel eingeben, die dann das gewünschte Ergebnis bringt.

Und Crosssitescripting (XSS) gibt man ebenfalls codeschnipsel (meist mit JS) ein und diese bringen dann auch ergebnisse, wie z.b cookies auslesen.

In dem man sich erst mal informiert (Google), worauf sie basieren und wie sie funktionieren - und sich dann informiert/überlegt, was dagegen unternommen werden kann (/muss).[/quote]
Hmm, wieder mal eine sehr konkrete Antwort! :astonished:

Also man könnte alle Eingaben ersteinmal filtern lassen.

z.B. mit dieser Funktion:

function str_clean($input) {
$input=strip_tags($input);
$input=htmlentities($input);
$input=stripslashes($input);
$input=trim($input);
return $input;
}

MfG, xcube

Was anderes ist leider wenig zweckdienlich.

Man muss verstanden haben, wo die Probleme liegen, um etwas gegen sie unternehmen zu können.

Klar kann ich jemandem, der nichts davon weiss, auch ein paar Funktionsnamen an den Kopf knallen und sagen, “die musst du dort und dann einsetzen”. Aber das bringt wenig - wer nicht verstanden hat, was wo und vor allem warum zu tun ist, der wird’s dann doch irgendwann an entscheidenden Stellen wieder vergessen.

[quote]Also man könnte alle Eingaben ersteinmal filtern lassen.

z.B. mit dieser Funktion:

function str_clean($input) { $input=strip_tags($input); $input=htmlentities($input); $input=stripslashes($input); $input=trim($input); return $input; } [/quote]
Ziemlich grosser Blödsinn, dieser Vorschlag.

Allein strip_tags wäre, wenn es bspw. um sowas wie ein Forum wie dieses hier geht, totaler Quark - man könnte nicht mal Code-Beispiele posten, weil die ja gleich gestrippt werden …
Und stripslashes wäre auch höchstens dann sinnvoll, wenn magic_quotes_gpc auf on steht.

Im allgemeinen sehe ich keinen grossen Sinn darin, etwas, das nach HTML aussieht, “herausfiltern” zu wollen. Wenn der Nutzer das posten möchte, dann soll er doch. Ich habe nur dafür zu sorgen, dass es keinen Schaden anrichtet. Und dazu taugt genau eine Funktion, htmlspecialchars.

Alles sinnlos, solange di mail mit content-type: text/plain gesendet wird (was hier ja der Fall ist) :wink:

XSS funktioniert, wenn es ein Hax0r schafft, mit JS auf deine Seite zuzugreifen (d.h. du einen iframe mit seiner Seite einbindest, oder umgekehrt). Dann kann er die Formulardaten jederzeit abrufen

Das sichern sollte eigentlich mein Gästebuch betreffen.

Ich lese und schreibe die Daten auf meine Datenbak, und deswegen wollte ich SQL-Injection verhindern.

Mfg Sebsatian.

Nö, eigentlich nicht.
Oder mach doch mal einen besseren Vorschlag, wenn du meinen blödsinnig findest.

[quote=“chrisb”]
Allein strip_tags wäre, wenn es bspw. um sowas wie ein Forum wie dieses hier geht, totaler Quark - man könnte nicht mal Code-Beispiele posten, weil die ja gleich gestrippt werden …
Und stripslashes wäre auch höchstens dann sinnvoll, wenn magic_quotes_gpc auf on steht.

Im allgemeinen sehe ich keinen grossen Sinn darin, etwas, das nach HTML aussieht, “herausfiltern” zu wollen. Wenn der Nutzer das posten möchte, dann soll er doch. Ich habe nur dafür zu sorgen, dass es keinen Schaden anrichtet. Und dazu taugt genau eine Funktion, htmlspecialchars.[/quote]
Ich kann mich nicht daran erinnern, dass je von einer Absicherung eines Forums gesprochen wurden…
Wieso sollte der Nutzen in einem Gästebuch PHP-Code posten können?

Und strip_tags filtert übrigens auch -Tags herraus. Die sind für JS-XSS ja nicht gerade unwichtig.

gut danke.

Nö, eigentlich nicht.
Oder mach doch mal einen besseren Vorschlag, wenn du meinen blödsinnig findest.[/quote]
Den hab ich bereits gemacht - verstehen, wo die Probleme entstehen können, und dann sinnvolle Gegenmaßnahmen ergreifen.

Das war ein Beispiel.

Aber wenn dir das Beispiel nicht zusagt, lassen wir den Nutzer meinetwegen den Text

eingeben.
Wende strip_tags drauf an, und erkenne dann bitte an, dass das ziemlich grosser Mist ist.

(Wenn dir das Beispiel auch immer noch nicht passt - gut, dagegen kann man dann nicht mehr viel argumentieren. Dann kann man nur festhalten, dass dir in deinem Gästebuch nur ganz bestimmte Inhalte passen, und es dir egal ist, wenn der Nutzer nicht das sagen kann, was er will. Dann brauchst du aber auch kein Gästebuch anbieten.)

Aber auch nicht notwendig.
Und htmlspecialchars entschärft auch das.

OK danke.

Also ist dieser Code nun gebrauchbar,um sich gegen das Hacken zu schützen.

Dann werde ich diesen übernhemen.

Vielen dank.

EDIT:

Wie nutze ich diese Function

function str_clean($input) { $input=strip_tags($input); $input=htmlentities($input); $input=stripslashes($input); $input=trim($input); return $input; }

htmlspecialchars ist dazu da, Werte für den Kontext HTML zu behandeln.

Zum vorbereiten von Werten vor dem Einsetzen in Datenbankqueries nicht.
Dafür ist mysql_real_escape_string zuständig.

[quote]Wie nutze ich diese Function

function str_clean($input) { $input=strip_tags($input); $input=htmlentities($input); $input=stripslashes($input); $input=trim($input); return $input; }[/quote]
Am Besten: Gar nicht.

Das sie ziemlicher Unfug ist, habe ich bereits erläutert.

und wie mache ich es nun?

könntest du mir einen CHECK-code geben opder nicht??

naja gegen SQL Injection nehm ich [code]mysql_real_escape_string()

[/code]

ich muss nur noch was zum XSS-block finden…

Wie oft denn noch … htmlspecialchars bei der Ausgabe der Daten im HTML-Kontext.

achso ok.

danke.

[quote=“chrisb”]Aber wenn dir das Beispiel nicht zusagt, lassen wir den Nutzer meinetwegen den Text

eingeben.[/quote]
Ja, ok strip_tags wäre in diesem Beispiel blöd, aber meistens ist es durchaus erfolgreich.

Ich hab jetzt auch keine Lust, mich um solche Pingelichkeiten zu streiten.

Schöne Pfingsten, xcube

Das muss eine eigenartige Definition von “erfolgreich” sein, wenn es dir egal ist, dass es Texte verstümmelt.