it-swarm-eu.dev

Offuscare il codice JavaScript

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

Rubare il codice sorgente JS è semplice, si dovrebbe semplicemente "visualizzare il codice sorgente" e copiarlo. Sì, puoi decompilare il bytecode di Flash, tuttavia richiede più tempo e conoscenza. Di conseguenza, JavaScript non è adatto allo sviluppo di software commerciale, poiché i concorrenti ruberanno il codice e metteranno fuori gioco lo sviluppatore originale.

Offuscare il codice JavaScript ha senso quando si sviluppano applicazioni Web commerciali?

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

17
hidarikani

Penso che la parola operativa nella domanda qui sia "impaurita". L'avversione si basa sulla paura, non sui fatti. La realtà è che il modello di minaccia non è particolarmente realistico. Al giorno d'oggi le società di sviluppo di software Web commerciale usano quasi universalmente JavaScript, offuscato o meno, e ti sfido a trovarmi anche un solo esempio di uno che è stato rubato da un concorrente e poi messo fuori mercato a causa di ciò. Sono abbastanza fiducioso che non sia successo e che non sia probabile.

Anche per la tua seconda domanda, aziende come Google offuscano il loro JavaScript? Sì, ma non per sicurezza! Offuscano per ridurre al minimo le dimensioni del codice, al fine di ridurre le dimensioni del download e minimizzare i tempi di caricamento della pagina. (Vedi Google Closure Compiler .) Questo non è necessariamente il modo in cui dovresti offuscare per 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 con JavaScript, non preoccuparti se qualcuno sarà in grado di leggerlo o meno.

24
Xander

No. L'offuscamento di Javascript di solito non ha alcun senso. Supponi sempre che qualsiasi logica che metti sul lato client possa essere facilmente ottenuta con un attacco abbastanza determinato, indipendentemente da come la offuschi.

La tua logica "importante" dovrebbe essere memorizzata sul lato server.

9
user10211

Sembra che tu sappia già che l'offuscamento non è una vera protezione, quindi non ti parlerò di sicurezza per oscurità .

Ciò che ha senso è questo: metti il ​​tuo codice competitivo sul server per proteggerlo, allora offusca il codice lato client quanto vuoi. Certo, non ti darà molta sicurezza ma sicuramente scoraggerà i bambini a curiosare 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 verrà deo-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 raggiungere questo obiettivo: Free Javascript Obfuscator e JScrambler (commerciale) sono due strumenti che ho usato prima.

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

7
Adi

Naturalmente questa è una paura senza fondamento.

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

Sì, minimizzazione javascript, l'ottimizzazione è buona da fare, ma non per questi scopi.

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

E questo argomento può essere fatto anche per HTML e immagini, ovviamente è necessario eliminare l'intero sito Web perché le persone possono rubarlo.

Personalmente mi offendo solo di nascondere il mio codice xxxxpy;) ed estrarre i commenti lol.

4
Andrew Russell

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 quel casino, ma se vogliono rubarlo, non ne hanno bisogno.

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

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

Come ultima risorsa si analizzerebbe semplicemente il RegEx, nel mio esempio la maggior parte dell '"offuscamento" sono solo le conversioni RegEx dei nomi delle funzioni a quelle reali in fase di esecuzione. Notato 'whatever|function|alert|say'?

1
DividedByZero