Frage zu PHP und SQL-Injection

Alice

Erfahrenes Mitglied
Hallo. :)

Ich habe gelesen das man alle Usereingaben usw. immer überprüfen muss um ein SQL-Injection zu vermeiden.

Wie sieht es denn mit PHP-Skripten aus, wo der User keine Eingaben machen kann?

Beispiel: (Alles selbst geschriebene PHP-Skripte)
Der User hat im User-Kontrollzentrum einen Link zum Löschen seines Avatars. Klickt er drauf, wird eine PHP-Datei ausgeführt der den Datenbankeintrag löscht und das Avatar vom Verzeichnis löscht. Anschließend wird der User wieder ins User-Kontrollzentrum weitergeleitet.

Wäre bei so einer Aktion ein SQL-Injection möglich? Der Löschlink ist einfach die URL zu dieser PHP-Datei. Also nichts mit POST oder GET.
 
Nimm's mir bitte nicht übel, aber aus deiner Wortmeldung entnehme ich, dass dir diese Aussage irgendwo (in einem Forum, und vermutlich auch in einem deiner bisherigen PHP-Themen) vor die Füße geknallt wurde, und du entweder keines der einschlägig bekannten Handbücher / Tutorials zur Hand hast, um darin den Sachverhalt nachzulesen, oder schlichtweg zu bequem und faul bist, dein mangelhaftes Sach-/Fachwissen zur Abwechslung auch mal eigenständig aufzubessern.

Du besitzt überhaupt kein Handbuch, um bei solchen Fragen darin nachzuschlagen?

Ist soweit nicht weiter tragisch, denn im Zeitalter des Internets stehen dir zu dieser Thematik genügend Publikationen in Form von Artikeln und Manuals im Netz zur Verfügung - und das gegenüber dem Fachbuch zum Nulltarif.

Die allseits bekannten Suchmaschinen sind dir auch bei der Recherche nach solchen Quellen behilflich.

  1. sql-injection beispiele
  2. sql-injection verhindern

In diesem Sinne, frohes Schaffen.
 
Na wie ich auf diese griesgrämigen Googlelinkverweiser stehe... wenn Du doch keine
Lust hast Dich mit dem Thema auseinanderzusetzen und wirklich konstruktiv etwas
zu dem ganzen beitragen möchtest, weil diese Frage vielleicht schon x mal gestellt
worden ist oder Du vielleicht einfach einen schlechten Tag hattest, dann lass die miese
Laune doch nicht hier im Forum aus. Antworte einfach nicht! Das ist auch für zukünftige
Leser die vielleicht ein ähnliches Problem haben allemal informativer als sich dann
wieder durch tausend Googlesuchergebnisse zu wühlen, in denen dieser Thread hier
dann irgendwann ja auch auftauchen wird, die dann wiederum auf weitere googlesuch-
ergebnisse verweisen und so weiter - das nervt!

Wir sind hier doch nicht im Heiseforum wo das gegenseitige anmaulen und defamieren
zum guten Ton zu gehören scheint!
 
Nimm's mir bitte nicht übel, aber aus deiner Wortmeldung entnehme ich, dass dir diese Aussage irgendwo (in einem Forum, und vermutlich auch in einem deiner bisherigen PHP-Themen) vor die Füße geknallt wurde, und du entweder keines der einschlägig bekannten Handbücher / Tutorials zur Hand hast, um darin den Sachverhalt nachzulesen, oder schlichtweg zu bequem und faul bist, dein mangelhaftes Sach-/Fachwissen zur Abwechslung auch mal eigenständig aufzubessern.

Du besitzt überhaupt kein Handbuch, um bei solchen Fragen darin nachzuschlagen?

Ist soweit nicht weiter tragisch, denn im Zeitalter des Internets stehen dir zu dieser Thematik genügend Publikationen in Form von Artikeln und Manuals im Netz zur Verfügung - und das gegenüber dem Fachbuch zum Nulltarif.

Die allseits bekannten Suchmaschinen sind dir auch bei der Recherche nach solchen Quellen behilflich.

  1. sql-injection beispiele
  2. sql-injection verhindern

In diesem Sinne, frohes Schaffen.

man moonlightdancer.................... solche experten wie dich braucht kein forum.

mehr geschrieben wie der te aber NULL inhalt******!!
 
Hallo. :)

Ich habe es so verstanden das wenn ein User keine Eingaben machen kann über ein Formular oder die URL es zu keinem SQL-Injection kommen kann.

Also wäre der Löschlink aus meinem Beispiel sicher?
 
Hallo,

in diesem speziellen Fall sollte eine SQL-Injection nicht möglich sein, wenn von außen keiner an Deinen Code (oder hier vielmehr an Deine SQL-Abfrage) rankommt.

greetz
cw
 
Hallo,

in diesem speziellen Fall sollte eine SQL-Injection nicht möglich sein, wenn von außen keiner an Deinen Code (oder hier vielmehr an Deine SQL-Abfrage) rankommt.

greetz
cw

In diesem Fall tatsächlich.

Wenn aber auch nur eine Variable (bsp. die ID über GET) an die Datenbank übergeben wird ist eine Injection möglich.

Hilfe dagegen ist einfach: Nur mysql_real_escape_string auf die Variablen anwenden.
 
Na wie ich auf diese griesgrämigen Googlelinkverweiser stehe...
Und ich mal auf diese großspurigen Rächer der Enterbten :p

man moonlightdancer.................... solche experten wie dich braucht kein forum.

mehr geschrieben wie der te aber NULL inhalt******!!
frau dfsfdfsdfsdfsd.................... jetzt hamse mir aber ordentlich "puff-puff, immer feste oben druff" eingeschänkt - Prost! :-)

Und ja geschmeidig die Contentance wahren, damit dir beim nächsten Tippseln nicht wieder die Buchstaben aus dem Suppentopf hüpfen, und NULL inhalt übrig bleibt :p

In diesem Sinne, frohes Löffeln!
 
PHP:
id = ereg_replace("[^0-9]", "", $_GET['id'])

so kann man doch auch eine get variable holen und so sollte doch nichts passieren?
 
Hallo Leon,

könnte man so machen, theoretisch.

Ein Test auf is_numeric() wäre aber nicht nur perfomanter, sondern würde von der Programm-Logik her geschmeidiger wirken. Denn wenn plötzlich ein Parameterwert an einer Stelle auftaucht, der alphanumerische Zeichen enthält, wo keine sein sollten, wird der sehr wahrscheinlich ohnehin Quark sein. Wieso also die auch noch herausfiltern, um z.B. aus einem Wert '12brumm12' 1212 zu erhalten? Ausserdem müsste man id dann auch noch daraufhin prüfen, ob es keine leere Zeichenkette ist. Die würde ansonsten bei einem Folgevergleich z.B. id < 12 true liefern.

Greetz
cw
 
Zurück