Sicurezza di Javascript nei browser mobili

7

JavaScript su un browser mobile è più sicuro di Javascript su altri tipi di sistemi? Ad esempio, se ho un sito che include un codice di crittografia sul lato client (Javascript), con l'intenzione che venga eseguito solo all'interno di un browser Safari su iPhone (autonomo o incorporato in un'app) o Chrome su un dispositivo Android, quali sono alcune possibili vulnerabilità? La crittografia Javascript lato client è un'idea terribile nello spazio mobile come lo spazio desktop?

Avvertenze:

  • Realizzare un'app non è un'opzione. Questa domanda riguarda specificamente la sicurezza dell'ambiente del browser mobile. Mi rendo conto che le API integrate sarebbero un'idea molto migliore.
  • Supponiamo che il server che ospita il codice rimanga sicuro o che la persona stia eseguendo il codice localmente / offline.

Ecco cosa ho pensato finora:

  • Dirottamento della trasmissione effettiva (risolvibile tramite HTTPS, eccetto il MITM)
  • Stessa origine (risolvibile tramite hosting su un sottodominio dedicato)

Tutti gli altri attacchi (ad esempio sfruttando un difetto nel browser dell'iPhone) sembrerebbero coinvolgere uno di questi due. Considerato il generale atteggiamento negativo verso la crittografia basata su Javascript, mi mancherà qualcosa. Cosa mi manca?

    
posta Devin R 30.04.2013 - 15:16
fonte

1 risposta

7

Un iPhone jailbroken o un dispositivo Android "rootato" non è qualitativamente distinguibile da un sistema desktop. Dal lato server, non puoi sapere se il dispositivo è rootato o meno; o anche se è davvero il dispositivo che credi che sia. Qualunque problema possa avere la crittografia basata su Javascript nei sistemi "desktop" si applica anche alle piattaforme mobili. Ovviamente, ogni singolo browser (non una piattaforma) può avere caratteristiche più o meno fastidiose a tale riguardo, ma i browser sono in realtà abbastanza uniformi tra le piattaforme (Safari su iOS condivide molto codice con Safari su MacOS X o Windows, per esempio).

Questo non significa che la crittografia Javascript sia intrinsecamente destinata; solo che devi lavorare all'interno dei limiti di quel linguaggio e del suo ambiente (il browser), che sono in qualche modo avversi ai compiti per i quali la crittografia è ritenuta necessaria. In particolare:

  • Il codice Javascript viene eseguito sul client e non può essere protetto dagli occhi indiscreti dell'utente, se è intenzionato a eseguirne il reverse engineering ( offuscamento del codice ti può portare solo lontano, cioè non molto lontano). Se incorpori i segreti nel codice Javascript, la tua unica vera protezione è la preghiera.

  • Javascript ha pochissimo accesso alle funzionalità della piattaforma, in particolare lo spazio di archiviazione.

  • Poiché il codice Javascript non è memorizzato localmente (può essere memorizzato nella cache ma la durata della cache non può essere applicata in modo affidabile dal server), deve essere ridistribuito nuovamente dal server. Dato che i dati non protetti inviati su Internet possono essere alterati, questa distribuzione deve passare attraverso alcuni HTTPS e si fida intrinsecamente del server per non aver giocato a giochi volgari. La presenza di HTTPS e la fiducia nel server rimuovono la maggior parte dei motivi per cui la crittografia deve essere eseguita sul lato client.

    (Se non ti fidi del server, non puoi usare logicamente il codice Javascript inviato da quel server. Il problema di fidarsi del server è reale, ma Javascript non è la soluzione per questo.

  • Per le attività di computazione di massa (ad es. cryptographie), le prestazioni di Javascript fanno schifo.

Nei dispositivi mobili non c'è nulla che possa modificare in modo significativo questi vincoli, rispetto alla situazione sui sistemi desktop.

    
risposta data 30.04.2013 - 20:23
fonte

Leggi altre domande sui tag