2010-04-22 23 views
9

Ho un sito Web che utilizza i cookie di sessione per la sicurezza. funziona bene e tutto, ma qualsiasi richiesta di Ajax in questo momento non è sicura. esempio, diciamo che un utente è su una pagina. possono accedere a questa pagina solo se sono connessi con una sessione, per quanto sia così buono. ma ora la richiesta Ajax che chiedono èProtezione di una richiesta Ajax

ajaxpages/somepage.php?somevar=something&anothervar=something 

se qualsiasi altro utente decide di andare solo a quel link stessi (senza una sessione) che ancora ottenere lo stesso risultato ajax che era destinato a loggato persone.

quindi, ovviamente, ho intenzione di passare i dati di sessione attraverso quando invio una richiesta Ajax. qualcuno ha qualche consiglio per il modo migliore di farlo? Non l'ho mai fatto prima e preferisco usare metodi fidati piuttosto che inventare il mio.

risposta

5

Le richieste di ajax funzionano come qualsiasi altra richiesta al tuo sito web e devono restituire gli stessi cookie di sessione della richiesta non-ajax. Questo è indicato in this question. Se non si ottiene il cookie di sessione, forse qualcos'altro è sbagliato.

+0

ho bisogno di aiuto, evitare commenti duplicati, fare riferimento ai commenti di Rook XD grazie kibbee –

2

Utilizzare lo stesso controllo di sicurezza sulle pagine che gestiscono la richiesta Ajax.

2

Poiché si tratta di una pagina PHP, non vedo perché non è possibile eseguire l'autenticazione sul lato PHP. Se l'autenticazione ha esito positivo, rispedisci i dati. In caso contrario, inviare un messaggio di errore. AJAX non è diverso da qualsiasi altra richiesta.

4

Avere un output Ajax non è necessariamente una vulnerabilità. Dipende interamente da quali dati vengono trasmessi. Non sono sicuro di quale piattaforma si sta utilizzando, ma la maggior parte delle piattaforme di sviluppo di applicazioni Web ha una variabile di sessione in grado di mantenere lo stato tra le richieste.

Ciò che si deve essere impostato è il modo di contrassegnare l'utente come effettuato l'accesso dal lato server. Ho PHP questo sarebbe simile:

if(login($user,$password)){ 
    $_SESSION['logged_in']=true; 
} 

Quindi è possibile controllare in un file di intestazione, se essi sono autorizzati a accedere alla pagina:

if(!$_SESSION['logged_in']){ 
    header("location: http://127.0.0.1/"); 
    die(); 
} 

(Se una variabile non è impostata, è anche falso .)

Ci sono alcune cose che è necessario tenere a mente. Si tratta di una vulnerabilità:

if(!$_COOKIE['logged_in']){ 
    header("location: http://127.0.0.1/"); 
    die(); 
} 

L'utente può controllare $ _COOKIE, in modo che possano dire che sono connessi in

un'altra vulnerabilità:.

if(!$_COOKIE['logged_in']){ 
    header("location: http://127.0.0.1/"); 
} 

intestazione() non uccidi la sceneggiatura. Infatti, continua a funzionare, quindi verrà comunque prodotto ma non verrà visualizzato in un browser, è comunque possibile utilizzare netcat/telnet/wireshark per visualizzare i dati.

+0

ho una domanda qui, non credo sia necessario creare una nuova domanda SO. XD di solito uso exit ;. quindi in questo caso, usa morire meglio o esci meglio? qualche raccomandazione per me da leggere? sulla differenza tra morire e uscire. Grazie. e un altro, sono confuso, se solo l'utente che ha effettuato l'accesso è vulnerabile a xss? dal momento che chiunque può ingannare l'utente che ha effettuato l'accesso al sito xss per ottenere i dati. o sono totalmente in errore su xss.grazie ancora Rook XD –

+0

@Tian Loon non ho idea di cosa stai chiedendo. Perché dovrebbe esserci una differenza tra la morte e l'uscita? O tra eco e stampa? Sì, xss può essere usato per dirottare una sessione. Il mio post non ha nulla a che fare con xss. – rook

+0

oops. grazie, ho appena trovato http://stackoverflow.com/a/1795031/805373 spiegando morire e l'uscita è la stessa. prendilo. grazie ROok –

Problemi correlati