Robert Bienert: SQL-Injections

Beitrag lesen

Moin!

  1. Was steckt hinter dem Fehler 503 beim Eingeben des Prozentzeichens, den ich nur dann kriege, nicht jedoch, wenn ich die richtigen Daten (Name und Passwort) eingebe?

<http://de.selfhtml.org/servercgi/server/httpstatuscodes.htm@title=HTTP 503> heißt, dass der Server momentan überlastet ist und deshalb nichts verarbeiten kann.

Dürfen Übergabeparameter einfach kein "%" enthalten?

Hast du das Prozentzeichen an die URL gehangen (GET) oder per POST übermittelt? Im ersten Fall ist das Prozent nämlich eine Art Escape-Sequenz.

  1. Gibt es evtl. Standard-Kniffe (Funktions-Sammlung), die jegliche Einschleußattacken in jeglichen SQL-Dialekten außer Gefecht setzt?

Jede SQL-API (MySQL, PostgreSQL, …) bietet dir eine Funktion, die häufig auf escape_string endet. Damit werden alle sensiblen Zeichen unschädlich gemacht. Ob auch % darunter fällt, weiß ich nicht, aber kommt das nicht eh nur bei LIKE zum Tragen?

(Hab mir z.B. mal Artikel wie diesen durchgelesen: http://de.wikipedia.org/wiki/SQL_Injection)

Das ist doch ein guter Anfang.

Abdgedeckt sein sollten eben "%"-Eingaben, wenns nicht eh der Server schon blockiert, Hochkommata-Erweiterungen, falls solche per stripslashes() vom Code aus erlaubt werden, weitere angehängte SQL-Befehle nach einem Strichpunkt, besonders gefährlich scheinbar innerhalb von Integer-Abfragen, usw.

Wieso unterscheidest du denn überhaupt zwischen „Integer-Abfragen“ und „String-Abfragen“? Zumindest in MySQL, vielleicht sogar laut SQL-Standard, ist auch das quoten einer Zahl erlaubt:

SELECT * FROM meiner_tabelle WHERE id='25'

Damit kannst sicherstellen, dass kein eingeschleuster SQL-Code ausgeführt wird.

Viele Grüße,
Robert