nehmen wir an, ich hab ne URL: lol.php?id=5
und im query ... Where id=$_GET['id']...
jetzt schreibt jemand:
lol.php?id=5 OR 1=1
jetzt filtre ich das OR 1=1 weg, weil ich weiß, dass ne zahl als ID kommen muss:
if(is_numeric......
soweit, so gut.
Erwarte ich jetzt aber aus nem Formular (inputfeld) einen satz als Text für ne suche und jemand gibt einfach noch schädlichen code mit an, wie krieg ich den dann raus?
Erwarte ich jetzt aber aus nem Formular (inputfeld) einen satz als Text für ne suche und jemand gibt einfach noch schädlichen code mit an, wie krieg ich den dann raus?
was ist der "schädliche code"? du erwartest doch text - warum ist es auf ein mal code?
Original geschrieben von penizillin jetzt komm doch auf den punkt: was ist der "schädliche code"? du erwartest doch text - warum ist es auf ein mal code?
wenn es als post gesendet wird und mein feld "suche" heisst, dann ist es im skript nachher $_POST["suche"].
jetzt lautet die abfrage SELECT xyz FROM abc WHERE wort=$_POST['suche']
wenn jetzt im suchfeld z.B. ein union-befehl steht, kann man meine DB "missbrauchen"
Wenn Strings (z.b. solche Suchstrings) immer escaped und als Strings behandelt werden, dann kann nicht viel passieren - dann durchsuchst du eben deine Daten nach 'bla OR 1=1'. Ansonsten ist Whitelist-Überprüfung angesagt (und am einfachsten). Also, dass du z.b. übergebene Werte in einem Switch verarbeitest, der nichts macht, wenn es keine der erwarteten Möglichkeiten ist, oder die erlaubten Werte in einem Array hast und vor der Verarbeitung abfragst, ob der Wert im Array enthalten ist, oder ähnlich. Zauberei ist nicht dahinter.
in meiner ersten antwort hatte ich dich darauf hingewiesen, dass zahlen auch als solche verwendet werden sollt. Geschätzte 10 Antworten später kommst du mit sowas an:
lol.php?id=5 OR 1=1
Ist das merkbefreit, oder bist du nur vergesslich. Dan hoffe ich, dass du heute nicht schon wieder auf Seite 7 des Buches anfangen muss.
Tut mir leid, aber lern erst mal gewisse grundlagen, damit du überhaupt nachvollziehen kannst, welche Tipps du von uns bekommen hast.
Und nein, ein Forum ist nicht dazu da, jedem User alles von vorne zu erklären. (und sei er noch so vergesslich. )
IDs in deiner Datenbank hast. Darum hast du auchmal den Tipp erhalten einen Type Cast auf Integer zu machen. Dann hast du garantiert nur Integers. Dann prüfst du ob diese Integer im gültigen Bereich liegen und erst dann baust du diese Var in eine MySql Query ein.
[color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color] Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Kommentar