Webscript gegen "Hacker" absichern

06/05/2008 - 11:40 von Arne Becker | Report spam
Hallo,

eines meiner Webscripte aus unserem Intranet sollen jetzt auch über
das Internet zugreifbar sein. Dazu wollte ich das Ding ein wenig
"sicherer" machen. Gibts irgendwo Turorials wie ich sowas anstelle?
Was muss ich denn da alles beachten? Folgendes hab ich mir bis jetzt
gedacht:

- Übergabe Parameter auf richtigen Typ überprüfen und evlt. auf
gültigen Wertebereich?
- Im Script besser auf falsche Typen eingehen und Abfangroutinen
programmieren.
- Ich hab mal etwas über SQL-Injuktion (oder so àhnlich) gelesen? Wie
verhindere ich sowas?
- Was muss ich noch alles besorgen?
- Kann man ein Script mit zuvielen Parametern überfluten? Wenn ich
z.b. megabyte-weise Daten übergebe? Oder hat die CGI-Schnittstelle da
irgendwo eine beschrànkung?

Bis jetzt habe ich null auf Sicherheit geachtet, weils bei uns im
Intranet ja eh keine "feindlichen Angreifer" gibt.

Gruß Arne
 

Lesen sie die antworten

#1 Diez B. Roggisch
06/05/2008 - 12:11 | Warnen spam
Arne Becker wrote:

Hallo,

eines meiner Webscripte aus unserem Intranet sollen jetzt auch über
das Internet zugreifbar sein. Dazu wollte ich das Ding ein wenig
"sicherer" machen. Gibts irgendwo Turorials wie ich sowas anstelle?
Was muss ich denn da alles beachten? Folgendes hab ich mir bis jetzt
gedacht:

- Übergabe Parameter auf richtigen Typ überprüfen und evlt. auf
gültigen Wertebereich?
- Im Script besser auf falsche Typen eingehen und Abfangroutinen
programmieren.
- Ich hab mal etwas über SQL-Injuktion (oder so àhnlich) gelesen? Wie
verhindere ich sowas?



Das heisst SQL-Injektion und damit ist gemeint das ein Angreifer SQL-code in
Eingabefelder schreibt, der dann vom SQL-server ausgefuehrt wird, wenn man
zb sowas macht:

sql = "select * from users where email='" + email + "'"

Wenn nun email aus dem web kommt und so aussieht

email = "'; update user set privileges='admin'"

dann wuerde der SQL-server gleich zwei statements ausfuehren - und dem user
admin-privilegien einrauemen.

Um sich dagegen zu schuetzen verwendet man bei SQL *grundsaetzlich* die
parametrisierte variante, die dafuer sorgt das sowas nicht vorkommen kann:

cursore.execute("select * from useres where email = ?", email)

Dabei ist der paramstyle abhaengig vom DB-Adapter. MySQLdb nimmt AFAIK %s
statt ?. Die Details kannst du aber im DB-API 2.0 nachlesen.

Diez

Ähnliche fragen