Una console JavaScript del browser può essere un problema?

4

Sono sicuro che molti di voi hanno familiarità con il gioco basato su JavaScript Candy Box .

Come probabilmente saprai, si può imbrogliare il sistema di caramelle di questo gioco inviando comandi alla console.

Ad esempio, se fai clic sul link, vedrai che il numero delle caramelle aumenta lentamente. Qualcuno che usa Google Chrome (mi riferisco a Chrome in particolare perché conosco le scorciatoie da tastiera, forse questo può essere fatto in Firefox o IE) chi vuole imbrogliare può premere Ctrl + Shift + I , navigare a Console e inviare candies.setNbrOwned(2147483647) alla console per uno zucchero veloce e facile.

Questo può rappresentare un problema in altri contesti? Ad esempio, diciamo che ho un sito web che vende widget. L'equilibrio di qualcuno (o anche il prezzo dei miei widget) può essere modificato inviando qualcosa come userBalance = 2147483647 o widget.setPrice(0.01) usando JavaScript (forse anche senza usare la console JavaScript del browser)?

Se non è possibile, perché è così? La mia prima ipotesi sul perché potrebbe non essere possibile è perché le variabili modificate sarebbero memorizzate come variabili locali e non influenzerebbero nulla di importante - un po 'come modificare gli elementi attraverso le funzionalità di' Inspect Element '.

Se è effettivamente possibile, attraverso quali mezzi può essere fatto, e come prevenirlo?

    
posta Tiwa Aina 21.05.2015 - 06:55
fonte

3 risposte

4

Esistono due tipi principali di problemi che possono verificarsi con l'esecuzione lato client:

  1. Un client dannoso può modificare lo stato del proprio client e tentare di fare in modo che il server accetti lo stato modificato come valido
  2. Un utente ignaro può essere indotto a eseguire codice nella propria console da una terza parte malintenzionata, causando un problema di auto XSS

Client dannosi che eseguono JavaScript

Quando un cliente non privilegiato e non fidato interagisce con un server, il server deve, quando possibile, convalidare tutti l'input ricevuto dal client e la legalità delle azioni del client. In caso contrario, il server si apre per una vasta gamma di attacchi noti come 'Interazione insicura tra i componenti' . Come tutti gli input dei tuoi moduli Web devono essere convalidati, devi convalidare qualsiasi dato che ricevi dal lato client tramite query AJAX o altri meccanismi.

Dopo aver convalidato tutti i dati, ci sono ancora un numero di casi in cui gli utenti possono abusare degli script sul lato client, come i giochi online. Le difese che puoi impostare contro giocatori che si danno più risorse di quelle consentite, facendo più mosse di quelle consentite, spostando se stessi più lontano di quanto consentito in una partita multiplayer, ecc, sono relativamente limitate. Alcune strategie di difesa potrebbero includere:

  • analizzando i filmati in-game catturati da un'app anti-cheat privilegiata per verificare se le librerie di rendering sono state modificate o gli script sono stati iniettati - difesa classica per giochi desktop competitivi ma di solito non hai questa capacità per un client Web
  • con l'hashing delle funzioni in esecuzione e l'invio degli hash ai server per il confronto - questo non farebbe altro che ostacolare i cheat di base che dimenticano di modificare anche il codice di hashing
  • calcolo dei limiti dei vantaggi di limitazione della velocità che un utente può ottenere realisticamente entro un periodo di tempo (ad esempio non più di X al minuto) - questa è probabilmente la difesa più efficiente dal momento che è indipendente dalla piattaforma client

Self cross-site scripting

I social network online come Facebook sono particolarmente diffidenti nei confronti delle persone che scaricano "hack" che pretendono di dare agli utenti più Mi Piace o accesso ai profili dei loro amici. È possibile trovare molti script dannosi che, se copiati in un browser, consentono a una terza parte di prendere il controllo della sessione dell'utente. Questo è uno scenario da sogno in quanto gli aggressori possono eseguire codice arbitrario nella sessione utente valida! Facebook ora inietta un messaggio di avviso nelle console di sviluppo dei browser per aiutare a combattere questo fenomeno:

    
risposta data 21.05.2015 - 21:23
fonte
4

Sì, può essere un problema, ma ci sono modi in cui le applicazioni possono proteggerlo.

Due lati di ogni applicazione Internet.

Per comprendere la sicurezza delle applicazioni Internet è necessario comprendere la differenza tra client e server. I dati generati dal client (il browser) devono essere disinfettati e convalidati prima di essere eseguiti dal server.

Se disponi di un sito Web che vende widget, non memorizzerai mai un saldo dell'account utente sul loro computer, nel browser. Sarebbe come una banca di mattoni e malta che ti chiede di portare a casa il bilancio e riportarlo indietro quando sei pronto per effettuare un prelievo. Pertanto, il lato server dell'applicazione deve tenere traccia del saldo e consente solo all'applicazione client di richiedere azioni da intraprendere per loro conto.

Come potrei impedire alle persone di barare nel mio gioco

Se il gioco è implementato dal lato client, non è possibile. Qualsiasi logica che viene eseguita sul lato client può essere modificata. Ci sono alcuni modi per renderlo più difficile però. Ridurre al minimo e offuscare la javascript aumenterà il tempo necessario per comprendere il codice, ma in realtà non proteggerà nulla.

Idealmente la logica lato client rappresenterebbe solo la vista e quindi invierebbe richieste di azione al server. La vista client potrebbe sempre essere modificata, ma poiché tutta la vera logica ha luogo sul server, l'integrità del gioco rimane intatta.

    
risposta data 21.05.2015 - 07:16
fonte
0

Javascript e tutte le altre tecnologie lato client, sono intrinsecamente insicuri. Non puoi impedire alle persone di imbrogliare, rendi solo più difficile.

    
risposta data 21.05.2015 - 08:43
fonte

Leggi altre domande sui tag