Domanda:
Come fare Ajax in modo sicuro?
Kim Stacks
2011-02-11 01:06:34 UTC
view on stackexchange narkive permalink

Questa domanda è ispirata da questa domanda di sicurezza https://security.stackexchange.com/questions/1707

  1. Quali sono le minacce nell'utilizzo di Ajax? (Nota che sto parlando di minacce alla sicurezza, non di svantaggi delle funzionalità)
  2. Come posso utilizzare Ajax in modo sicuro? (Fornisci esempi, preferibilmente esempi in PHP dato che sto utilizzando il framework CakePHP.)
Due risposte:
symcbean
2011-02-11 19:39:51 UTC
view on stackexchange narkive permalink

Ajax sta semplicemente trasferendo dati su HTTP - non è magico - quindi li proteggi esattamente nello stesso modo in cui fai con le tue normali pagine web -

  • controlla l'autenticazione e l'autorizzazione
  • Crittografa o aggiungi controlli hash saltati ai dati esportati nel browser per l'invio di nuovo
  • considera i dati ricevuti nella richiesta come potenzialmente pericolosi
  • utilizza HTTPS dove appropriato
  • trasforma i dati in uscita dal tuo PHP utilizzando il metodo giusto per la loro destinazione (htmlentities, mysql_real_escape_string
  • trasforma i dati che entrano nel tuo script usando il metodo giusto in base alla sua origine (es. json_decode)
se come utente loggato alcune azioni vengono eseguite tramite ajax, come controlliamo l'autorizzazione? che dire della protezione CSRF?
Suggerisco di chiarire che il punto è che non puoi fidarti di nulla che proviene dal browser, anche se hai progettato il tuo Ajax per eseguire la convalida del modulo o altro. L'utente può manipolare il javascript alla fine o un MITM potrebbe aver sostituito completamente gli script. Quindi esegui la stessa autenticazione lato server e controlli dei dati che faresti normalmente.
Che ne dici di un esempio di codice specifico in qualsiasi lingua? per controllare l'autenticazione? penso che ne trarrò sicuramente beneficio.
Ci sono nuovi problemi specifici nel modo in cui viene eseguito / utilizzato AJAX? Come si fa a garantire la sicurezza su un protocollo senza stato?
Aspetti positivi in ​​generale, ma [`mysql_real_escape_string` non è certamente il metodo giusto per proteggersi dagli attacchi di iniezione di MySQL in PHP] (http://stackoverflow.com/q/5741187/372643).
@Bruno: True mysql_real_escape_string () non ti proteggerà da una programmazione molto sciatta, ma se la dimostrazione a cui fai riferimento è un esempio della qualità del codice sul sito, allora avranno molti altri problemi di sicurezza di cui preoccuparsi.
Andreas Arnold
2011-02-18 16:44:08 UTC
view on stackexchange narkive permalink

Le minacce con AJAX sono le stesse che devono affrontare una normale richiesta web: XSS, SQL Injection, ecc. Una cosa da notare è che con AJAX, se carichi dati da una fonte non attendibile (ad esempio un servizio web), dovrebbe anche convalidare quei dati sul client, non solo sul server, altrimenti qualcuno può potenzialmente iniettare javascript e altre cose brutte.

Usa gli stessi metodi per proteggere la richiesta come faresti normalmente, poiché AJAX è solo una richiesta HTTP. Ma tieni presente che oltre a controllare le cose "normali" (controllare i privilegi degli utenti, disinfettare i dati, ecc.), Controllare anche se ha realmente fatto la richiesta o se è stato ingannato (ad esempio un collegamento su un'altra pagina). Per farlo, includi un token CSRF in ogni richiesta AJAX e convalidalo sul lato server (vedi Qual è il modo corretto per implementare i token del modulo anti-CSRF?). Anche se si consiglia di utilizzare un token CSRF anche nelle normali richieste.

Un'altra cosa è che, a seconda di cosa si fa sul lato client, si disinfettano anche i dati presenti. Altrimenti un utente malintenzionato potrebbe iniettare codice dannoso nella pagina. Ciò è particolarmente importante se ottieni dati da una terza parte, ma è meglio farlo per tutti gli input.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 2.0 con cui è distribuito.
Loading...