Ich habe eine Spalte in einer MySQL-Tabelle, die entweder 0 oder 1 sein kann. Wenn der Benutzer keine 0 oder 1 eingibt, dann setze ich den Wert auf 0. Ich habe mich gefragt, ob dieser PHP-Code vor SQL-Injection "sicher" wäre:
$flag = $_GET["f"];
if ($flag != 1) $flag = 0;
$sql = "SELECT * from table WHERE column=$flag";
$db->query($sql);
Normalerweise verwende ich vorbereitete Anweisungen, aber ich habe mich gefragt, ob dieser Code vollständig sicher ist. Wenn das kaputt gehen kann, möchte ich ein Beispiel sehen.
Antworten:
3 für die Antwort № 1Nein, das ist nicht sicher. Beispiel SQL-Injection: 1 OR 1 = 1
Dies ist gleich 1, weil (int)"1string" === 1
.
Ich würde explizit darüber nachdenken (int)
Besetzung vor der Übergabe an die Abfrage:
$sql = "SELECT * from table WHERE column=".(int)$flag;