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

Sicherheit mit GET

sin777

Neues Mitglied
Hallo,

ich bin noch ganz neu im Bereich PHP und habe eine Frage zur Übertragung mittels GET. Wenn der Benutzer Daten eingeben kann sollte man diese ja immer kontrollieren und gefährliche Eingaben escapen. Bei mysql gibt es dafür ja bspw. mysqli_real_escape_string(). Aber bei GET besteht ja auch die Gefahr, dass der Benutzer bspw. ...&var=123&... eingibt. Wie gehe ich bei GET damit um? Gibt es hierfür auch eine Escape-Funktion oder wie macht man das generell bei GET?


Vielen Dank im Voraus :)
 
Wenn jemand einen Blödsinn in einen URL-Parameter schreibt, ist das nicht gefährlich. Gefährlich wirds' erst dann, wenn Du mit diesen URL-Parametern unkontrolliert arbeitest. Je nachdem, wo Du sie einsetzt, musst Du sie anders behandeln. Gibst Du sie in einem Template aus, dann sollten Sie in Entities umgewandelt werden, damit XSS nicht möglich ist - hier verwendest Du also z.B. htmlspecialchhars(). Verwendest Du sie dagegen um dynamisch Scripte (Seiten) einzubinden, dann sollten die URL-Parameter mittels preg_replace() zu einem korrekten Dateinamen umgeändert werden. Erwartest Du einen Integer in einem URL-Parameter, kannst Du bspw. die Funktion intval() auf den Parameter anwenden. Wenn Du einen ganz bestimmten String erwartest, erledigt ein einfaches if-Konstrukt auch seinen Zweck. Und bei allen anderen Strings einfach immer die nicht erlaubten Zeichen mittels preg_replace() rausfiltern.

Grüße
 
Ums mal in Menschlichen Worten zu fassen und mit Beispielen zu schmücken:

Sagen wir $_GET [ 'id' ] , also ?id=XXX , soll eine Zahl sein,.. dann wär es möglich trotzdem ein Wort einzufügen.. das sollte dann umgangen werden mit z.B.:

PHP:
$id = isset( $_GET[ 'id' ] ) ? intval( $_GET[ 'id' ] ) : 0; // 0 = Dummy ID or Banned ID or Exception ID

erwartet man Zeichen, so sollte man einerseits diese Escapen via:

PHP:
$word = isset( $_GET[ 'word' ] ) ? htmlentities( $_GET[ 'word' ] ) : ''; // bzw. htmlspecialchars();

andererseits solltest du aufpassen, dass du dem User nicht die Wahl gibst, eine andere Aktions als geplant zu wählen. Das geht am besten so:

PHP:
$action = isset( $_GET[ 'action' ] ) : htmlentites( $_GET[ 'action' ] ) : 'main';

switch( $action ){
   case 'main':
         //aktion
         break;
   case 'springausdemfenster':
        // jump();
        break;
   default: 
        break;
}

Gruß
 
Zurück
Oben