Sicherheitscheck für GET und Post-Variablen...

B

BartTheDevil89

Guest
Hallo,

ich bin derzeit dabei einige Projekte auf ihre Sicherheit zu verbessern. Dabei habe ich mir nun Gedanken gemacht. Denn die Schwachstelle schlecht hin ist sind ja GET und POST-Varibalen. Oder sollte man sich noch auf weitere Sachen konzentrieren?

Zu den GET und Post-Variblen: Dabei sind mir vier verschiedene Möglichkeiten in den Sinn gekommen:

1. Ziffern (Bsp 98349)
2. einzelnes Wort (Bsp: delete)
3. Texteingabe (Bsp Ich bin ein Text mitvielen Sachen..)
4. Dateiupload (Bsp Upload von Bilddateien)
Nun bin ich derzeit dabei mir zu überlegen, wie ich diese Dinge genau überprüfe, damit sie keine SQL-Injections, etc.drin hat. Aber leider fällt mir nichts genau ein. Wie würde ihr das am besten in jedem Fall machen? Ziel sollte es sein, dass alles böse rausgeworfen wird, damit ich dann vielleicht auch leere Ergebnisse am Ende herausbekomme aber eben sichere. Denn ich möchte dann für jeden Fall mir eine Funktion erstellen, durch die ich das get, bzw. post-Ergebnis durchlaufen lasse und dann eben den überprüften Wert herausbekomme oder eben ein leeres oder von bösen entferntes Ergebnis.
 
PHP als Sprache? Ich nehme einfach mal an...

1. is_numeric | is_int | (int)
2. is_string ? ich glaube hier meinst du wohl mysql_escape_string
3. Dasselbe wie No 2?
4. $_FILES ... was möchtest du genau überprüfen? Die erste Überprüfung auf Typ könntest du schonmal per Dateiendung machen. Sollte diese stimmen, kannst du noch per Headerdaten auslesen die eigentliche Dateierweiterung herausfinden
 
Hab jetzt mal jeweils Beispiele dazugetan...
 
jAuer, erbarmen Sie sich
wink.gif


Ziffern prüfe ich immer mit ctype_digit().

Falls ich einen von verschiedenen Strings erwarte, stopfe ich die zulässigen Werte ich ein Array und prüfe, ob der übergebene Wert darin vorkommt.

trim und mysql_escape_string benutze ich immer; zusätzlich kürze ich die Länge des Wertes auf zu erwartende Werte, damit mir niemand Goethes Faust übergibt.

Die o.g. Maßnahmen habe ich in entsprechende Funktionen aufgenommen, damit ich sie einfacher nutzen kann (checkNum() u.ä.)
 
QUOTE Denn die Schwachstelle schlecht hin ist sind ja GET und POST-Varibalen. Oder sollte man sich noch auf weitere Sachen konzentrieren?


Alles was vom Client kommt, ist nicht vertrauenswürdig - Dateiuploads hast du selbst schon genannt, aber auch Cookies sollten z.B. überprüft werden
 
QUOTE (BartTheDevil89 @ So 10.02.2008, 14:43)Denn die Schwachstelle schlecht hin ist sind ja GET und POST-Varibalen.

Das ist zunächst Unsinn.

Der Nutzer kann alles mögliche schicken, er kann ja auch O'Neill heißen oder nach entsprechenden Ausdrücken suchen: 'Gibt es in der Datenbank ein Feld mit dem Inhalt <script>?'

Entscheidend ist, daß lediglich aus Nutzername, Passwort und Session-ID sicherheitsrelevante Entscheidungen getroffen werden.

Und wenn man konsequent gespeicherte Prozeduren verwendet, dann hat man kein Problem mit Sql-Injektionen. Das wird erst dann zum Problem, wenn man Sql-Code dynamisch zusammenbaut - das mache ich nicht, also kenne ich mich damit auch nicht aus -
biggrin.gif
- und kann mich auf interessantere Arbeiten konzentrieren
tongue.gif



QUOTE HEADERs, Browser Identification etc


Warum soll mich das interessieren? Daß solche Dinge keinen BufferOverflow erzeugen, darum müssen sich die Entwickler der Softwarepakete (NET, PHP, Apache, IIS) kümmern, ich muß die Patches einspielen. Ansonsten gilt dasselbe wie oben - als Parameter gespeicherter Prozeduren kann ich jeden Ausdruck übergeben.

Schleifenkonstruktion: Alle übergebenen Werte im Seitencode in eine DataRow schaufeln, damit sind die Datentypen überprüft und können sofort zurückgewiesen werden. Dann in einer ausgelagerten DLL aus dieser DataRow eine Liste von Parametern bauen und diese dem Prozeduraufruf zuordnen.
 
Mod_Security für Apache fängt mit der richtigen Konfiguration sehr viele Angriffe per POST und GET ab.
 
Zurück
Oben