Sub: PHP / MySQL Sicherheit

Beitrag lesen

Hallo Bademeister,

Sag doch mal selber: wenn ich in ein Formular einen Text schreiben soll, der dann in einer Datenbank gespeichert wird - sagen wir eine Nachricht an Dich - *was* genau willst Du da bei dem eingegebenen Text jetzt prüfen?

Ich habe mich vielleicht nicht klar genug ausgedrückt, eigentlich wollte ich von euch wissen wie man Injections in der Eingabe verhindern kann. Daher bin ich davon ausgegangen das die mysql_real_escape_string Funktion nur einen kleinen teil dazu beiträgt aber nicht ausreichend ist und nur deswegen habe ich mich festgebissen an das Wörtchen Prüfung! Damit meinte ich ob es evtl. weitere Techniken gibt um SQL Injection zu verhindern.

Sollte die Auswahl nicht im Array enthalten sein dann Abbruch, richtig?

Skript abbrechen? Klingt nicht gut. Vielleicht eher einen Hinweis ausgeben und dem User das Formular nochmals anbieten?

»»

Ehrlich gesagt sehe ich hier keinen Sinn das Formular nochmals anzubieten.
Wenn das Vergleichsarray den Übermittelten Wert nicht enthält kann das entweder bedeuten dass ich unaufmerksam war und vergessen habe den Wert im Array einzutragen oder, der Wert existiert in der Auswahl überhaupt nicht und soll mir untergeschoben werden. Ich würde eher das Script mit einem Hinweis beenden und zzgl. eine Nachricht mit Beschreibung an mein E-Mail Postfach senden warum das Script beendet wurde.

Stell Dir mal vor ein User tippt anstatt Bistro's Bistros\’s ein, hier würde die mysql_real_escape_string Funktion den String ein zweites Mal maskieren!

Wenn einer in des Feld "Bistro's" eintippt, dann würde ich zunächst mal davon ausgehen, dass der String, den er eintippen wollte, eben "Bistro's" ist. Sonst hätt ers ja nicht eingetippt. Und dann speicher ich den String auch ab. Wenn Du einen guten Grund hast, dem User zu verbieten, die Zeichenfolge "'" in seinem String zu haben, dann sag mal, was Du eigentlich vorhast.

Versteh ich das jetzt richtig, eine zweite Maskierung wäre also nicht gravierend bezüglich der Sicherheit?

Das ist doch *total* egal, auf welche Weise der Client den Request produziert hat. Es ist nur interessant, *welche* Werte er übergibt. Was Du für Werte erwartest, hat einzig und allein mit dem Zweck und der Logik Deines Skriptes zu tun. Diese ganzen HTMl- und SQL-Aspekte spielen dabei überhaupt keine Rolle.

Wenn ich einen Wert ohne Zeilenumbruch erwarte dann ist das meinem Erachten nach nicht total egal ob darin nachher doch ein Wert mit Umbruch gesendet wurde!

Nein, sind wir bisher nicht. Ich meinte nicht, das Du alle erlaubten Strings aufschreiben sollst, sondern, dass Du exakt formulieren sollst, was die Kriterien für die Gültigkeit der Strings ist. Was hast Du denn vor?

Was ich vorhabe wurde schon erläutert, ich möchte SQL Injections weitestgehend verhindern.

Viele Grüße,

Sub