Quando compilate e distribuite un client, vi state automaticamente proteggendo da qualcuno che vede e modifica il vostro codice. Questo può essere ottenuto su un client Javascript?
Nessun offuscatore JS vale i soldi e il sudore per usarli.
JavaScript può sempre essere invertito e non importa quale sia il metodo dell'offfuscator, sarai in grado di scorrere il codice offuscato e studiarlo in qualsiasi browser moderno. Tranne se l'obfuscator comprendesse anche un codice per rendere la vita più difficile da impedire l'uso di strumenti di debug, ma alla fine sarebbe solo aggirato e reso inutilizzabile.
Se hai davvero bisogno di segretezza per il tuo codice, non utilizzare JavaScript e affidarti ad altre tecnologie. Se ti avvicini al problema in un altro modo e hai già creato la nuova e più bella web-app basata su JS e vuoi che sia nascosta: lascia perdere.
Quindi, direi di no, non puoi davvero proteggerlo, e non preoccuparti di spendere soldi per gli offuscatori a pagamento (se vuoi perdere tempo, sentiti libero di usare quelli liberi là fuori, anche se loro " vale a malapena anche il tuo tempo). Basta usare un buon minificatore / compressore / compilatore per ridurre il carico utile. Renderà già più difficile la lettura, ma non più a lungo, così come molti altri offuscatori. Ed è ancora meno leggibile per rendere leggermente più fastidioso leggere e scoraggiare alcuni.
Per buoni minifiers / compressori / compilatori, leggi la mia risposta (e il resto del thread) a: Cosa usi per comprimere le librerie JavaScript?
Inoltre, quando distribuisci un client, non ti stai proteggendo molto. I disassemblatori esistono e gli ingegneri informatici esperti che sanno come usarli sono legioni. Non fare affidamento su obfuscation / oscurità per sicurezza e non considerare un cliente un segreto commerciale.
Se intendevi davvero codificare il codice JavaScript, ciò implicherebbe che qualcosa debba decrittografarlo prima di eseguire il codice, il che significa che devi avere un plugin per il browser installato su tutti i client o per avere la tua pagina conteneva un decryptor basato su JS, essenzialmente dando lo strumento a chiunque desideri decodificare il codice. Inoltre, il browser vedrebbe comunque la versione decodificata in fase di runtime.
Riguardo al codice javascript lato client , che è quello che di solito vediamo sul web, è inutilizzabile quando viene inserito uno schema di crittografia, poiché il browser deve leggere il codice in modo che possa essere interpretato dal browser. Il codice javascript utilizzabile è sempre banale da visualizzare e ottenere una copia di.
Potresti offuscare il codice, rendendolo più difficile da capire, con un minificatore come yui -compressor . Sebbene il suo scopo sia quello di comprimere il codice in modo che il costo della larghezza di banda possa essere ridotto o se sei preoccupato di caricarlo abbastanza velocemente per i tuoi utenti.
Significa che è facile "copiare"? Dipende da cosa fa il tuo codice javascript. La maggior parte del codice javascript che è difficile da riprodurre è legato a qualcosa che si aspetta da un server Web come i dati JSON / XML / HTML. Le applicazioni Web sono difficili da copiare perché dipendono da code-behind da diverse origini dati.
Aneddoticamente lavoravo in un negozio di e-commerce che ha un'applicazione web di designer molto elegante. I clienti possono progettare il prodotto nel modo desiderato e i controlli sul sito Web dipendono in gran parte da javascript. Un sacco di persone hanno provato a copiare il sito e apparentemente fallito per il quale potremmo solo deridere segretamente (e sentirci un po 'orgogliosi di noi stessi):
Abbiamo rilevato tramite Google Alert che un sito cinese oscuro ha completamente strappato il sito per conto proprio (non sostituendo nemmeno il logo). Apparentemente hanno provato a creare il loro negozio. Il problema era che non avevano le risorse grafiche fornite dal nostro back-end. Quindi chiaramente non hanno avuto altro scopo se non quello di sfoggiare "hey, guarda cosa possiamo fare".
Per anni abbiamo visto diversi annunci di freelance.com a cui ci siamo riferiti e che non sembravano andare a buon fine, probabilmente a causa dei budget ridicolmente proposti, di tempi brevi e di una cattiva descrizione di ciò che vogliono fare con esso. Per qualche motivo, le persone che hanno pubblicato questi annunci non hanno idea di quanto sia incredibilmente complessa l'attività dietro il sito web.
A volte le persone sono veramente pigre: una volta abbiamo ricevuto una chiamata da una società che voleva sapere chi ha progettato il nostro sito web. Apparentemente qualche agenzia di design ci stava usando come riferimento e il problema è che abbiamo fatto tutto in casa.
Questo dimostra che anche se hai un'applicazione web javascript, è ancora difficile copiarlo e fare affari fuori di esso perché devi preoccuparti di tutto il resto. Nel nostro caso abbiamo avuto la maggior parte della struttura del prodotto e delle risorse grafiche fatte nel back-end, per non parlare della pipeline di produzione per produrre i prodotti reali che devono essere installati. Quindi non è tutto solo lo sviluppo web.
"protetti"? No. "Scomodo"? Sì. (Proprio come con il binario.)
Ad un certo livello, nessun sistema operativo popolare (ancora) può impedire ad un attore sufficientemente motivato di recuperare la rappresentazione in memoria del tuo programma e di decodificarlo. Quindi la "protezione" è solo relativa al valore del tuo codice a un altro.
Se accetti che sia questione di gradi, allora la domanda diventa "È possibile rendere il JavaScript abbastanza scomodo da capire?"
È:
Puoi, ma sarebbe inutile. Il browser deve finalmente vedere javascript non criptato altrimenti non può eseguirlo. Sarebbe quindi banale trovare il browser attualmente in esecuzione.
Se hai bisogno di molta sicurezza sul tuo codice client, allora stai facendo qualcosa di sbagliato . Dovresti eseguire la logica complessa e convalidare gli input sul lato server.
Da una nota a margine, vale la pena menzionare che è anche banale nella maggior parte delle lingue per passare dal codice compilato a un codice leggibile dall'uomo. Ci sono tecniche per renderlo più difficile ma nessuno di loro è perfetto.
.. perché possono implementare la tua app sul proprio server e utilizzare le risorse back-end per alimentare il loro sito. Molte app sul lato client memorizzano un'appKey che consente loro l'accesso al back-end. Ecco come il server sa che si tratta di un client autorizzato.
Peggio ancora, non voglio che siano in grado di modificare la mia app client, in modo che possano clonare il mio sito e ingannare gli utenti per accedere al mio sito, inviando anche la password dell'utente al proprio database come meccanismo di raccolta.
Inoltre, immagino di offrire un'app / servizio web gratuito .. un altro sito scarica l'app client e la modifica in modo tale da addebitare l'accesso, gestire la fatturazione / raccolta di pagamenti sul proprio server, ma altrimenti fare affidamento sull'API servizi sul mio server per fornire il back-end alla loro offerta webApp (che ho creato).
Almeno con il codice minisito, è improbabile che possano facilmente modificare l'app client per addebitare denaro alle persone, clonare il mio sito e raccogliere password, ecc.
Leggi altre domande sui tag javascript