Hallo,
ich habe nach vielen Jahren wieder mit PHP angefangen und stehe nun vor einem Problem, welches mir früher nicht so bewusst war: das sichere Eintragen von Daten in die Datenbank.
Ich habe schon auf vielen Seiten einiges dazu gelesen und jetzt mehr offene Fragen als vorher.
Zum Schutz vor JavaScript-Code wie:
genügt es die HTML-Sonderzeichen mit htmlspecialchars umzuwandeln oder gleich mit strip_tags zu entfernen. Zum Schutz vor SQL-Injections müssen bestimmte Zeichen für die Verwendung in einer SQL-Anweisung im String mit mysqli_real_escape_String maskiert werden.
So weit ist das klar. Wenn ich jetzt den folgenden String
in die Datenbank speicher
steht in der DB McDonald's. Lass ich mir den Query vorher anzeigen, steht da McDonald\'s. Speichert er nicht den maskierten String oder läuft bei mir im weiteren Verlauf etwas falsch?
Sind diese Vorsichtsmaßnahmen auch nötig, wenn ich in der Tabelle ein Feld vom Typ int habe und mit
oder
sicherstelle, dass meine Variable vom Typ int ist?
Wie schaut es aus, wenn ein Feld vom Typ varchar ist und ich vorher mit
sicherstelle, dass in meiner Zeichenkette nur Unicode-Zeichen, Ziffern, Kommatas, Punkte, Plus- und Minuszeichen habe? Ist ein Escapen des Stringes in diesem Fall auch nötig? Ich stelle jaim vornherein sicher, dass keien"gefährlichen" Zeichen eingetragen werden können.
Viele Grüße
schiese
ich habe nach vielen Jahren wieder mit PHP angefangen und stehe nun vor einem Problem, welches mir früher nicht so bewusst war: das sichere Eintragen von Daten in die Datenbank.
Ich habe schon auf vielen Seiten einiges dazu gelesen und jetzt mehr offene Fragen als vorher.
Zum Schutz vor JavaScript-Code wie:
Code:
<script>alert('Text');</option>
So weit ist das klar. Wenn ich jetzt den folgenden String
PHP:
$text="McDonald's"
PHP:
"INSERT INTO tabelle (id, lokal) VALUES (NULL, mysqli_real_escape_string($db,$text))";
Sind diese Vorsichtsmaßnahmen auch nötig, wenn ich in der Tabelle ein Feld vom Typ int habe und mit
PHP:
(int)$eingabe
PHP:
intval($eingabe)
Wie schaut es aus, wenn ein Feld vom Typ varchar ist und ich vorher mit
PHP:
preg_match("/^[\p{L}0-9\-\+\,\. ]+$/u",$text)
Viele Grüße
schiese
Zuletzt bearbeitet: