Tach!
LIMIT ".$start_nr.",".addslashes($arr_in['posi'])."
addslashes() hat an der Stelle keinen Sinn. Dort wird eine Zahl verlangt. Eine Zwangsvertypisierung mit intval() hilft an der Stelle. Da kann dann zwar immer noch 0 für ungültige Werte rauskommen, aber das richtet keinen Schaden an.
Sehe ich anders.
Du hast dann augenscheinlich das Prinzip nicht verstanden.
Wie ich hier gelernt habe, gibt es böse Mädchen, die ganz seltsame Werte schicken. Wenn also $_POST['posi'] einen unerwarteten Wert hat, sollten Angriffe mit addslashes abgewehrt werden. Warscheinlich wird dann ein SQL-Fehler gemeldet.
Nein. addslashes() und die datenbankspezifische Funktion mysqli_real_escape_string() entfernen nicht mit Magie alles Böse aus den Eingaben. Sie sorgen (vorwiegend) dafür, dass Anführungszeichen mit einem \ davor ergänzt werden, damit sie in einem Stringliteral als literales Anführungszeichen gelesen werden.
Wenn du nicht in einem String bist, wie das bei LIMIT der Fall ist, hilft ein maskiertes Anführungszeichen nicht weiter. Der Angreifer braucht kein Anführungszeichen, um den String vorzeitig zu beenden, weil er ja nicht in einem solchen gefangen ist. Wenn er Syntaxbestandteile in seiner Eingabe hat, gelangen die direkt ins Statement.
Das Ziel ist, ein syntaktisch korrektes Statement zu erzeugen, bei dem Werte Werte bleiben und nicht zum einem anderen Statementbestandteil mutieren. mysqli_real_escape_string() maskiert, wie der Name es schon sagt, Strings. Für Zahlenwerte gibt es keine Möglichkeit, Zeichen zu maskieren. Eine Zahl muss nach den Syntaxregeln für Zahlen geschrieben werden. Es gibt auch keine Funktion, die beliebige Werte in eine korrektes Zahlenliteral pressen kann. Aber intval() oder ein Typecast zu int sorgen zumindest dafür, dass nicht als Zahl interpretierbare Zeichenfolgen zu 0 konvertiert werden.
Du bist nicht in einem String, aus dem man mit Anführungszeichen ausbrechen könnte, was man mit den Slashes verhindern könnte. Stattdessen bist du im Befehlsmodus und kannst Syntaxbestandteile direkt angeben und ausführen lassen.
Ich gehe auf Nummer sicher, anstatt mich auf meine unzulänglichen Kenntnisse über Betrugsversuche zu verlassen.
Ja, aber damit gehst du nicht sicher, sondern hast aufgrund deiner unzulänglichen Kenntnisse eine Sicherheitslücke drin, weil deine Gegenmaßnahme unwirksam ist.
dedlfix.