Skip to content

Instantly share code, notes, and snippets.

@vimishor
Created March 15, 2013 12:15
Show Gist options
  • Save vimishor/5169482 to your computer and use it in GitHub Desktop.
Save vimishor/5169482 to your computer and use it in GitHub Desktop.
Răspunsul la problema de Luni - 11.Mar.2013
Răspunsul la problema de Luni - 11.Mar.2013

Deși variabila name primită de la utilizator prin $_GET sau $_POST este filtrată, lipsa ghilimelelor de la atributul href fac acest cod vulnerabil la un atac XSS.

Standardele susțin și obligă folosirea ghilimelelor la valoarea oricărui atribut HTML. Versiunea simplă a motivului este că ghilimelele au ca scop delimitarea valorilor și atunci când ele nu există, browser-ul nu știe unde începe și unde se termină valoarea aferentă unui anume atribut, iar drept urmare lucruri urâte se pot întâmpla.

Să luăm drept exemplu codul postat de mine anterior. Putem specifica un nume folosind $_GET sau $_POST ; de dragul ușurinței, hai să folosim $_GET:

// Accesăm: 

http://domeniu.tld/test.php?name=alex

// link-ul generat o să arate așa:
<a href=test.php?name=alex>login</a>

Pare OK, nu ? Problema apare când începem să modificăm valoarea variabilei name:

// Accesăm:

http://domeniu.tld/test.php?name=alex+onmouseover=alert(/bummer/)


// link-ul generat o să arate așa:
<a href=test.php?name=alex+onmouseover=alert(/bummer/)>login</a>

La prima vedere pare să funcționeze. Text-ul login apare corect în pagină, acesta este un link, ceea ce și intenționam, dar dacă trecem cursorul peste link avem o surpriză.

Pentru a elimina problema XSS-ului nu este de ajuns să filtrăm orice date primim din surse nesigure ( _$_GET, $_POST, $COOKIE, etc ), ci să respectăm și sintaxa corectă. Dacă consideri că adăugarea unor ghilimele îți ocupă prea mult timp, folosește un editor sau IDE care poate să facă asta pt. tine în mod automat.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment