Hallo Der Martin,
Hallo dedlfix,
an euch ein großes danke für die Informationen!
Wenn ich nicht mit den richtigen fachlichen Wörtern antworte bitte ich dieses zu entschuldigen. Ich bin noch im Lernprozess!
Von dedlfix: Er meinte nicht das Sehen des HTML-Quelltextes sondern eher die Manipulierbarkeit vor dem Absenden. Nimm als Beispiel ein Hidden-Feld. Das kann man im Normalfall nicht manipulieren, aber mit entsprechenden Browser-Addons kann man dessen Wert vor dem Absenden relativ bequem ändern ohne dass man sich den Quelltext lokal kopieren und dort Änderungen vornehmen muss.
Da es sich hier um ein Kontaktformular (Affenformular) handelt sind die vom User eingegebenen Daten ja nicht vorausschaubar. Demnach werden diese bevor sie in den Mailbody übertragen werden ja auch überprüft ob bestimmte Kriterien erfüllt werden bzw. böse eingaben gemacht wurden. Bei festen übertragenen Werten (Bsp. Hidden) sollte man auch Gegenprüfen ob die Werte wirklich vorhanden sind, sollte das nicht der fall sein heißt es für das Script abrechen.
Von dedlfix: Ein include hat mit GET- oder POST-Parametern nichts zu tun, wenn du nicht explizit diese Werte in den include-Aufruf bringst. Ein Prüfen auf GET/POST ist dahingehend nicht sinnvoll. include $_GET['seite']; // Das wäre eine höchst gefährliche Angelegenheit. include 'seite.php'; // Das hingegen ist harmlos.
Genau das wollte ich wissen! Danke!!!
Von dedlfix: Wenn man ein Formular mit Enter absendet wird vom IE der Submitbutton als nicht aktiviert betrachtet und damit auch nicht abgesendet. Der FF hingegen simuliert fälschlicherweise (gemäß meiner Interpretation des Standards) eine Submit-Betätigung. Andere Browser verhalten sich vielleicht wieder anders. Das Absenden eines Formulars würde ich nicht an einem Submitbutton kontrollieren. Solche würde ich nur dann auswerten, wenn eine explizite Aktion mit einem bestimmten Submitbutton ausgelöst werden soll.
Wenn ich im IE ein Formular mit Enter (Tastatur) bestätige wird das Formular ohne Probleme abgesendet. Beim FF, Netscape oder Opera ist das nur möglich wenn ich vorher in einem Einzeiligen Textfeld den Eingabecursor am blinken habe! Vielleicht verstehe ich hier etwas falsch, bitte nehme dazu kurz Stellung!
Die Aktion die durch das absenden ausgelöst werden soll ist natürlich als erstes die Prüfung der Benutzereingaben, erst wenn keine Fehlerausgabe mehr ausgegeben wird, werden die Benutzereingaben in den Mailbody übertragen und versendet.
Von dedlfix: Wenn jemand in der Lage war, dir Dateien zu löschen, hast du ein viel gravierenderes Problem. Der Angreifer ist dann vermutlich nicht auf das Vorhandensein einer Inklude-Datei angewiesen. Lass die Prüfung weg. Wenn du einen Abbruch bei nicht vorhandener Inklude-Datei haben möchtest, nimm require.
Da teilen sich die Meinungen, es könnte ja auch sein das man selbst vergessen hat die Datei Hochzuladen oder diese wurde nicht übertragen. Außerdem zeigt require eine schöne Warnung sowie einen Fatal Error mit Angabe der betroffenen Include Datei an. Mit dieser Meldung könnte der Interessent (kein Programmierer) der das Formular ausfüllt nichts mit anfangen. Bei file_exists und bei nicht Vorhandensein der Datei hätte man wenigsten die Möglichkeit dem User etwas mitzuteilen und abgebrochen wird das Script dann durch Exit.
Von dedlfix: Aha, und wer würde im Falle eines Falles informiert, dass er bis morgen am Webauftritt etwas auszubessern hat?
Von Der Martin: Und morgen klappt es dann besser? ;-)
:-) Das war nur ein Beispiel wie es aussehen könnte. Man kann ja dem User die Möglichkeit bieten auf einen Button zu drücken der dann eine Nachricht an mich weiterleitet das da etwas nicht stimmt! Automatisieren könnte man das bestimmt auch ohne dass der User irgendetwas drücken muss!
Von dedlfix: Dass weder diese noch die eins weiter oben verwendeten Anführungszeichen die richtigen für Stringwerte sind, weißt du?
Von Der Martin: Die Zierschnörkel anstatt der Anführungszeichen hat dedlfix ja schon kritisiert; mir sind sie auch schon in deinem ersten Posting aufgefallen.
Sorry, habe einen teil von dem script in Word und dann hier rein geworfen und da ist wohl was bei schief gelaufen: echo "So wäre es richtig!"; und das steht für eine vordefinierte Variable $hallo = 'Hallo, das ist ein Test!';
Von dedlfix: Wie gesagt, es steigert weder die Sicherheit noch verringert es sie. Du solltest dein Augenmerk viel mehr auf eine kontextgerechte Behandlung legen. Die Nichtbeachtung von kontextgerechter Behandlung ist eine der am häufigsten auftauchenden Sicherheitslücken.
Dann wäre hier das Zauberwort htmlspecialchars zuzüglich zur normalen Prüfung, hoffe dass ich es richtig verstanden habe!
Von Der Martin: nicht ganz; nach dem Blick in den Quelltext weiß man immer noch nicht, *welche* name-value-Paare tatsächlich gesendet werden (Stichwort: successful controls). Aber es gibt viele Möglichkeiten, die tatsächlich gesendeten und empfangenen Daten einzusehen. Die größte Keule wäre vermutlich Wireshark oder ein protokollierender Proxy, die einfachste Methode IMO die LiveHTTP-Extension für den Firefox.
Ich finde nur als Addon denn Live HTTP Headers unter FF und nehme an das Du das meinst. Gibt es den Möglichkeiten wie man es Unterbinden kann Sniffer Programme eine Einsicht in die Daten zu gewähren??? Oder anders, würde ein SSL die Sache Entschärfen???
Von Der Martin: Was veranlasst dich, den PHP-Block zu beenden und sofort wieder aufzumachen?
Das hätte ich noch geändert, ich bin halt noch am lernen und probieren und wollte einige Sachen erst einmal prüfen bevor das ganze Script eine Einheit bildet.
Ich bedanke mich bei euch das Ihr soviel Geduld und Zeit Opfert einem etwas beizubringen und verbleibe mit freundlichen Grüßen,
Berlinn