sanificando i Mi piace / i non validi nell'applicazione?

2

Ho una funzione nella mia app in cui gli utenti possono cliccare su un'immagine "thumbs up" e un like è registrato nel database; tutto ciò che viene registrato è l'ID dell'utente e l'ID del post che l'utente ha gradito.

So che l'input dell'utente non può essere considerato affidabile: sto disinfettando gli input dell'utente, convalidando gli input dell'utente (lato server), gli output di escape e le query db di escape.

In questo caso, l'utente fa clic sull'immagine, ma non c'è forma. Tuttavia, i dati vengono passati al database, utilizzando JS. Nota, non vi è alcun input da parte dell'utente tra i tag di uno script (lo script simile si trova in una pagina non servita).

Il mio piano è quello di convalidare (lato server) che solo i numeri vengono inviati al database, ma come faccio a disinfettare questo input "mi piace" / pollice in alto per proteggere contro XSS ?

Nota: attualmente sto leggendo l'XSS Prevention Cheat Sheet di OWASP e le Linee guida per la codifica sicura di Mozilla, che è il modo in cui ho iniziato a chiedermi questo.

    
posta chowwy 18.05.2012 - 02:21
fonte

2 risposte

5

La sanificazione è banale, poiché questa variabile può essere solo due valori. Potresti renderlo un intiger e avere un valore di 1 per un up-vote e un valore di -1 per un down, nessun altro valore è valido. Ovviamente tutte le convalide basate sulla sicurezza devono sempre essere eseguite lato server.

Ma questo è l'ultimo dei tuoi problemi di sicurezza . La vera preoccupazione è costringere gli altri a votare per conto di un aggressore. Questo può accadere in diversi modi. Un utente malintenzionato potrebbe creare un gioco clickjacking in cui ogni volta che l'utente fa clic su un razzo per lanciare un qualche tipo di invasore di spazio è necessario infatti cliccando su un iframe invisibile che sta sparando un nuovo voto sul tuo sistema.

Un attacco ancora più virulento potrebbe essere l'utilizzo di Falsificazione richiesta tra siti (CSRF) per disattivare queste richieste in massa quando uno dei tuoi utenti visita un sito Web di aggressori. Il CSRF Prevention Cheat Sheet è una buona risorsa.

Quasi tutte le misure Anti-CSRF sono sconfitte da XSS , quindi assicurati che l'intero sito Web sia immune a questo attacco. Il Sammy Worm ha utilizzato XSS per sconfiggere il token Anti-CSRF di MySpace.

Inoltre, non dimenticare la creazione automatica dell'account, assicurati che gli utenti debbano risolvere un captcha strong come Recaptcha prima di poter creare un account. La verifica dell'email è banale da automatizzare e non credo sia una misura di sicurezza reale. Se hanno troppi accessi non riusciti dovrebbero anche essere richiesti con un Capthca.

    
risposta data 18.05.2012 - 03:21
fonte
0

Forse sto fraintendendo il tuo scenario, ma il modo in cui immagino che l'igienizzazione dovrebbe essere abbastanza facile.

Quando un utente fa un thumbs up / thumbs down di un post, in realtà ci dovrebbero essere solo 2 valori ammessi come input: il valore up o il valore down. Per motivi di semplicità, vorrei usare 1 come Su e 0 come Giù. Quindi per i servizi igienico-sanitari devi solo controllare che il valore sia 1 o 0 (o, se sei più rilassato, che sia numerico).

In JS, fai semplicemente qualcosa del tipo:

if(value !== 1 && value !== 0) {
    return false;
}

Tuttavia, l'utilizzo di JS come unica linea di difesa contro XSS è una pessima idea. Se qualcuno volesse inviarti dati errati, potrebbe semplicemente utilizzare cURL per inviare dati ignorando la convalida di javascript. Suggerisco caldamente di eseguire la convalida sul lato server e utilizzare la convalida JS come metodo per ridurre il numero di chiamate AJAX inutili.

    
risposta data 18.05.2012 - 02:31
fonte

Leggi altre domande sui tag