Codice JavaScript offuscante

17

Alcuni sviluppatori di Flash hanno paura di JavaScript. Il loro punto di vista:

Il furto del codice sorgente JS è semplice, si dovrebbe semplicemente "visualizzare l'origine" e copiarlo. Sì, puoi decompilare il bytecode di Flash, tuttavia richiede più tempo e più conoscenza. Di conseguenza, JavaScript non è adatto allo sviluppo di software commerciale, perché i concorrenti rubano il codice e mettono fuori gioco lo sviluppatore originale.

L'offuscamento del codice JavaScript ha senso quando si sviluppano applicazioni web commerciali?

Esistono tecniche di offuscamento che funzionano davvero? Le grandi aziende come Google stanno offuscando il loro codice di applicazione web. Ad esempio Gmail o Google Drive sono protetti in qualche modo?

    
posta hidarikani 13.05.2013 - 14:28
fonte

5 risposte

23

Penso che la parola chiave nella domanda qui sia "paura". L'avversione è basata sulla paura, non sul fatto. La realtà è che il modello di minaccia non è particolarmente realistico. In questi giorni, le società di sviluppo di software per il web commerciale usano quasi JavaScript in qualsiasi momento, confuse o in altro modo, e ti sfido a trovarmi anche un solo esempio di un JS rubato da un concorrente e poi messo fuori mercato a causa di esso. Sono abbastanza fiducioso che non è successo, e probabilmente non lo è.

Anche la tua seconda domanda, aziende come Google offuscano il loro JavaScript? Sì, ma non per sicurezza! Offuscano per ridurre al minimo la dimensione del codice, al fine di ridurre le dimensioni del download e ridurre al minimo i tempi di caricamento della pagina. (Vedi il compilatore di chiusura di Google .) Questo non è necessariamente il modo in cui offuscherai la sicurezza perché l'unico obiettivo è ridurre al minimo il numero di byte che devono essere consegnati al client. Questo è ciò su cui dovresti concentrarti JavaScript, non preoccuparti se qualcuno sarà in grado di leggerlo o meno.

    
risposta data 13.05.2013 - 15:20
fonte
9

No. L'offuscamento dell'uso di Javascript di solito non ha assolutamente senso. Assumi sempre che qualsiasi logica che metti sul lato del client può essere facilmente ottenuta con un attacco sufficientemente determinato, indipendentemente da come lo offuschi.

La logica "importante" deve essere memorizzata sul lato server.

    
risposta data 13.05.2013 - 14:32
fonte
7

Sembri già sapere che l'offuscamento non è una vera protezione, quindi non ti darò lezioni su sicurezza per oscurità .

Ciò che ha senso è questo: Metti il tuo codice competitivo sul server per proteggerlo, quindi offusca il codice lato client quanto vuoi. Certo, non ti darà molta sicurezza ma sicuramente scoraggerà i bambini curiosando in giro, e creerà un'impressione di maggiore sicurezza come parte di security theater . Google lo sta facendo con GMail, Facebook lo sta facendo.

Tenendo presente che il tuo codice sarà non offuscato, puoi comunque offuscarlo come parte del processo di creazione per rendere più felici i tuoi clienti e utenti.

Ci sono molti strumenti che puoi usare per ottenere questo: Obfuscator Javascript gratuito e JScrambler (commerciale) sono due strumenti che ho usato prima.

Aggiornamento: Dopo una discussione su DMZ , abbiamo ha concluso che sì, Google e Facebook lo stanno facendo, ma probabilmente solo per le dimensioni e le prestazioni dei file e non sembra esserci nulla che suggerisca che faccia parte del teatro di sicurezza.

    
risposta data 13.05.2013 - 15:07
fonte
4

Ovviamente questa è una paura infondata.

Javascript è solo una parte di un ecosistema più grande, molto più importante è la brand, l'usabilità del sito, l'integrità del sito, la reattività e gli effetti di rete.

Sì, la minimizzazione di JavaScript, l'ottimizzazione è buona cosa da fare, ma non a causa di questi scopi.

Se un concorrente ti ruba il codice, puoi diventare legale sulla loro coda e uccidere la loro reputazione, ma saranno così stupidi (è chiaro anche sul loro sito)?

E questo argomento può essere fatto anche per html e immagini, ovviamente è necessario rimuovere tutto il sito Web perché le persone possono rubarlo.

Personalmente ho solo offuscato per nascondere il mio codice xxxxpy;) e ho eliminato i commenti lol.

    
risposta data 14.05.2013 - 00:55
fonte
1

Funziona il codice, l'offuscamento è inutile. Prendi questo esempio:
Prima dell'offuscamento:

function say(whatever){
alert(whatever);
}

dopo:

eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]
||c}k=[function(e){return d[e]}];e=function(){return'\w+'};c=1};while(c--){if(k[c]){p=p.replace(ne
w RegExp('\b'+e(c)+'\b','g'),k[c])}}return p}('1 3(0){2(0)}',4,4,'whatever|function|alert|say'.sp
lit('|'),0,{}))

Ora, non molte persone cercheranno davvero di capire tutto questo casino, ma se vogliono rubarlo, non ne hanno bisogno.

La versione offuscata può essere chiamata esattamente come nella versione originale: say("hi") .

Se non sai come viene chiamata la versione originale, individua la funzione / evento in cui ricevi un avviso e controlla se utilizza una funzione personalizzata anziché alert , quindi usa CTRL + F per trovare questa funzione.

Come ultima risorsa si dovrebbe semplicemente analizzare la RegEx, nel mio esempio la maggior parte delle "obfuscation" sono solo conversioni RegEx di nomi di funzioni a quelle reali in fase di runtime. Notato 'whatever|function|alert|say' ?

    
risposta data 01.11.2014 - 20:48
fonte

Leggi altre domande sui tag