È possibile per gli utenti inserire caratteri vietati in siti con htmlentities o sqlescapestring?

4

Quindi, nella mia breve ricerca sulla sicurezza di PHP, sono stato guidato verso due importanti funzioni per rimuovere i caratteri proibiti dalle forme. Uno è "htmlentities" e l'altro è "mysql_escape_string" - quello che mi chiedo è se esiste un modo comune per gli hacker di inserire caratteri proibiti dannosi nelle forme nonostante le funzioni. Sono sospettoso che ciò sia possibile, poiché si tratta di una tecnica di sicurezza comunemente utilizzata. È necessario un ulteriore livello di sicurezza?

NB: Capisco che mysql_escape_string potrebbe diventare presto deprecato.

    
posta baordog 31.05.2013 - 23:36
fonte

1 risposta

3

Sebbene mysql_escape_string() sia un buon metodo per prevenire l'iniezione SQL, le query parametrizzate sono un approccio molto migliore. mysql_escape_string() non è ancora perfetto; ad esempio il seguente è vulnerabile all'iniezione SQL:

$q="select * from user where uid=".mysql_real_escape_string($_GET[uid]);

Il PoC è semplice:

http://localhost/vuln.php?uid=sleep(30)

Utilizza query con parametri!

htmlentities() o htmlspecialchars() impedirà alcuni tipi di XSS. Non impediranno XSS negli eventi DOM . Questo metodo non impedirà ad esempio di iniettare eventi: value='junk' onclick=alert(/xss/) . htmlspecialchars($var,ENT_QUOTES) è un po 'meglio, perché impedisce l'iniezione di eventi DOM, ma puoi comunque dirottare un evento (vedi il post del blog "è un evento DOM").

Quindi queste due funzioni attenueranno parzialmente due vulnerabilità di un paio di migliaia . Per chiamare alcuni dei principali criminali che non saranno mitigati da mysql_real_escape_string() o htmlentites() abbiamo: Directory traversal (e LFI / RFI per PHP), LDAP injection, XPATH injection, HTTP Response Splitting, Log file injection .. . e l'elenco continua.

L'input di escape non ha nulla a che fare con la rimozione di "caratteri vietati". Riguarda la conversione di caratteri di escape (o sequenze di caratteri) nel loro " carattere letterale " in modo tale che i dati controllati dagli aggressori siano ancora interpretati come dati e non come codice eseguibile.

    
risposta data 01.06.2013 - 00:05
fonte

Leggi altre domande sui tag