Offuscatore JavaScript

L’offuscamento aumenta il costo di lettura del tuo codice sorgente JavaScript, non in modo assoluto (nessun offuscamento front-end è a prova di proiettile) ma abbastanza da scoraggiare ispezioni casuali e rallentare lo scraping automatizzato. Questo strumento applica codifica di array di stringhe, offuscamento degli identificatori, appiattimento del flusso di controllo e iniezione di codice morto opzionale, con ogni opzione selezionabile a seconda di quanto aggressivo vuoi essere.

Come offuscare JavaScript

  1. 1

    Incolla il sorgente

    Qualsiasi JS valido. Se dipende da nomi di proprietà globali specifici di una pagina host, impostali come riservati.

  2. 2

    Scegli tecniche

    Codifica di stringhe (esadecimale / base64), offuscamento degli identificatori, appiattimento del flusso di controllo, iniezione di codice morto, wrapper auto-difensivo.

  3. 3

    Scegli il profilo di destinazione

    Browser (sicuro per ES5, senza API Node), Node.js (consente `require`, `Buffer`), o basso (principalmente minifica).

  4. 4

    Offusca

    Lo strumento restituisce il codice trasformato con una variazione di dimensione. Impostazioni aggressive possono rendere l'output 3-5 volte più grande del sorgente.

Tecniche e cosa ti costano

Tecnica Aumenta lo sforzo dell’attaccante Costo di esecuzione Costo di dimensione
Rinominazione di variabili Basso Trascurabile Più piccolo (effetto collaterale della minificazione)
Codifica di array di stringhe Medio Piccolo (una ricerca per stringa) +10-30%
Appiattimento del flusso di controllo Alto Misurabile (~2-5%) +50-150%
Iniezione di codice morto Basso (teatro della sicurezza) Piccolo +20-50%
Wrapper auto-difensivo Medio Controllo una tantum +5-10%
Protezione da debug Medio (rileva DevTools) Controllo una tantum +5%
VM / virtualizzazione (premium) Molto alto Grande (5-20x) +300-500%

Cosa non può proteggere l’offuscamento

  • Segreti. Qualsiasi costante nel tuo sorgente front-end è leggibile dato abbastanza tempo. Chiavi API, segreti di autenticazione, logica di prezzo, non fare mai affidamento sull’offuscamento per nascondere questi. Spostali lato server.
  • Algoritmi con un output osservabile. Se il browser può eseguirlo, un attaccante con un debugger può osservare ogni input e output. L’offuscamento rallenta questo; non lo ferma.
  • Scraping automatizzato su larga scala. L’anti-scraping dipende dalla rilevazione comportamentale (fingerprinting, limiti di frequenza, CAPTCHA), non dall’offuscamento del sorgente.

Quando l’offuscamento ne vale la pena

  • Anti-manomissione su SDK incorporati (licenze, SDK pubblicitari, client di giochi).
  • Aumentare il costo per il copia-incolla a basso sforzo di un’implementazione concorrente.
  • Rendere più difficile la classificazione automatizzata degli script per scraper a spettro ampio.

Quando è controproducente

  • Hai già un bundler. Webpack + Terser in modalità produzione già minifica e offusca i locali. Aggiungere un secondo passaggio di offuscamento ti dà poco e gonfia la dimensione del bundle.
  • Stai ottimizzando per il primo dipinto / Core Web Vitals. L’offuscamento aggressivo triplica il bundle; questo danneggia FCP e LCP.
  • Devi fare debug in produzione. L’offuscamento pesante rende le tracce dello stack di Sentry quasi inutilizzabili senza una mappa sorgente corrispondente, e spedire la mappa sorgente sconfigge l’offuscamento.

Errori comuni

  • Trattare l’offuscamento come equivalente alla crittografia. Non lo è, è un ostacolo.
  • Spedire la mappa sorgente insieme al bundle offuscato in produzione. Questo neutralizza completamente l’offuscamento.
  • Offuscare librerie di terze parti che hai già caricato da un CDN. Ottieni la penalità di dimensione senza alcun guadagno.

Domande frequenti

No. L’offuscamento è un ostacolo, non una serratura. Un analista determinato con un debugger recupererà la logica. Aumenta il costo abbastanza da scoraggiare ispezioni casuali e la maggior parte degli scraper automatizzati, ma non è sicurezza.

Se accedi a proprietà dinamicamente (obj["field_name"], Object.keys(obj)), o fai affidamento su nomi di funzioni / classi specifiche per la pagina host, aggiungili all’elenco riservato. Senza questo, la rinominazione delle proprietà può rompere integrazioni esterne.

Tieni il sorgente originale. L’offuscatore è una trasformazione unidirezionale; non puoi recuperare esattamente l’originale dall’output offuscato, solo un’approssimazione leggibile.

Un leggero offuscamento aggiunge ~10-30%. L’appiattimento del flusso di controllo più gli array di stringhe aggiunge 50-150%. Le impostazioni più pesanti possono triplicare la dimensione. Controlla il contatore della dimensione dell’output prima di spedire.

Strumenti correlati

Strumento disponibile in altre lingue