
Un potente compilatore/offuscatore di siti web per scopi di ottimizzazione o protezione della proprietà intellettuale.

WebSafeCompiler (WSC) è un'utility avanzata (compilatore di siti web) progettata per l'ottimizzazione, la minificazione e l'offuscamento (se necessario) di applicazioni web e siti web utilizzando Node.js. Migliora le tue risorse web riducendo le dimensioni dei file o fornendo una protezione duratura contro il reverse engineering, garantendo che il tuo codice sia pronto per il deployment e sicuro.
[!NOTE]
Adatto per siti *.github.io
Il compilatore è monolitico: tutta l'implementazione risiede in source/wsc.js. I test di regressione risiedono separatamente in tests/.
Per sfruttare appieno il potenziale di WebSafeCompiler, esegui il seguente comando nel tuo terminale:
node wsc.js <input_dir> <output_dir> [--map] [--smart] [--drm]
<input_dir>: Directory contenente i file sorgente da elaborare.<output_dir>: Directory in cui verranno restituiti i file ottimizzati e offuscati.-m, --map: Crea un sitemap.xml nella directory di output per un migliore SEO-s, --smart: Rileva automaticamente i file minificati e li salta. Questo include i file JS e CSS.-d, --drm: Abilita l'offuscamento del codice (protezione DRM) per proteggere il codice sorgente da analisi non autorizzate.
class, id e title. I nomi delle classi e gli attributi esistenti vengono mantenuti. Le dipendenze rilevate da selettori e ispezione DOM limitano il rumore con un avviso in console.-h, --help: Mostra il messaggio di aiuto con istruzioni dettagliate sull'utilizzo.-v, --version: Restituisce la versione corrente di WebSafeCompiler.node wsc.js "/path/to/source" "/path/to/output" --drm --smart
Questo comando elaborerà tutti i file all'interno della directory di origine specificata, li ottimizzerà e, se il flag di offuscamento è abilitato, proteggerà il codice da accessi non autorizzati o manomissioni. I file di output saranno pronti per la distribuzione nel tuo ambiente web.

WebSafeCompiler utilizza le seguenti librerie per lavorare con i codici JavaScript:
Per iniziare con WebSafeCompiler, dovrai avere Node.js installato sul tuo sistema. Segui questi passaggi per installare i pacchetti richiesti:
Installa Node.js: Scarica e installa Node.js dal sito ufficiale di Node.js. Segui le istruzioni di installazione per il tuo sistema operativo.
Clona il repository: Se non l'hai già fatto, clona il repository sulla tua macchina locale:
git clone <repository-url>
cd <repository-directory>/source
Installa le dipendenze: Naviga nella directory del progetto e installa i pacchetti npm necessari:
npm install
Fatto! Puoi usare WSC.
WSC minifica la spaziatura dei tag/attributi HTML e rimuove i commenti HTML ordinari, preservando al contempo i valori tra virgolette, gli spazi bianchi del testo, i corpi raw di script/style, i commenti condizionali e i marker dei framework. Il rilevamento dell'ispezione di sorgenti/commenti disabilita tali modifiche al markup con un avviso. JavaScript utilizza il name mangling locale e cinque passaggi di compressione, mantenendo i globali pubblici e i nomi delle funzioni. Il DRM mantiene il control-flow flattening, l'iniezione di dead-code e la copertura completa degli string-array con codifica base64. Il CSS viene analizzato e minificato; JS non supportato e CSS con avvisi del parser vengono mantenuti invariati con un avviso. Gli asset non UTF-8 vengono copiati senza conversione. Gli asset SRI locali vengono elaborati prima dell'HTML, poi i metadati SHA-256/384/512 vengono ricalcolati dai byte finali nei riferimenti a script, fogli di stile, preload e template. Vengono aggiornati anche gli hash corrispondenti degli script esterni nelle policy CSP accessibili. Gli asset condivisi vengono mantenuti invariati con un avviso DRM se una qualsiasi pagina che li referenzia ha una CSP non disponibile o non può essere riscritta in modo sicuro come UTF-8. I metadati SRI non validi rimangono bloccati; gli asset ospitati esternamente non vengono riscritti.
Il DRM aggiunge classi casuali agli attributi class esistenti e due attributi inerti casuali attorno a ciascun attributo reale dei tag HTML ordinari idonei. I nomi casuali vengono verificati rispetto al testo sorgente HTML, CSS e JS. I selettori di uguaglianza/sottostringa delle classi preservano i valori delle classi interessate; l'analisi AST limita l'ispezione di classi/attributi agli elementi identificati staticamente, agli alias immutabili e ai sottoalberi degli observer, utilizzando ciascuna pagina e le sue dipendenze JS/CSS locali. Gli elementi non correlati ricevono comunque rumore. I receiver sconosciuti, i selettori a runtime, il destructuring e gli observer non risolti utilizzano un fallback conservativo e stampano avvisi. I tag script/style/meta/noscript, gli elementi personalizzati e i nodi SVG/MathML esterni non ricevono attributi spazzatura. Queste protezioni coprono le dipendenze note; i selettori calcolati dinamicamente o la reflection non possono sempre essere dedotti staticamente.
In modalità DRM, WSC estrae automaticamente il JavaScript inline idoneo in file offuscati wsc-inline-*.js accanto a ciascun documento HTML quando si applica una configurazione CSP supportata: _headers nella root, vercel.json nella root (regole headers), o un meta tag CSP nell'HTML. Aggiunge 'self' a script-src-elem nella policy di output, preservando le altre autorizzazioni di origine, le regole script-src per i gestori di eventi e le direttive non correlate. Questo amplia intenzionalmente i permessi degli script ai file della stessa origine. Distribuisci il JavaScript emesso e la configurazione degli header insieme all'HTML. I nonce rimangono invariati; i file generati includono hash SRI. Sono supportate route letterali e wildcard *.
I tag script generati rimangono nelle loro posizioni originali. Gli script classici rimangono bloccanti per il parser; gli attributi inline async/defer ignorati vengono rimossi quando si aggiunge src. I moduli mantengono i loro attributi, e i file vengono emessi accanto al documento per preservare la risoluzione degli import relativi. Le import map, gli script data, gli stili e i gestori di eventi rimangono inline.