Domanda

So che è impossibile il codice nascondere fonte, ma, per esempio, se devo collegare un file JavaScript dal mio CDN a una pagina web e non voglio che la gente sappia la posizione e / o il contenuto di questo script , è possibile questo?

Ad esempio, per collegare uno script da un sito web, usiamo:

<script type="text/javascript" src="http://somedomain.com/scriptxyz.js">
</script>

Ora, è possibile nascondere da parte dell'utente in cui lo script viene, o nascondere il contenuto sceneggiatura e ancora usarlo su una pagina web?

Per esempio, salvandola nella mia CDN privata che ha bisogno di una password per accedere ai file, vorrei che il lavoro? Se no, che avrebbe funzionato per ottenere ciò che voglio?

È stato utile?

Soluzione

Buona domanda con una risposta semplice: non è possibile

JavaScript è un linguaggio di programmazione lato client, quindi funziona sulla macchina del cliente, in modo da poter in realtà non nascondere nulla dal client.
Offuscando il codice è una buona soluzione, ma non è sufficiente, perché, anche se è difficile, qualcuno potrebbe decifrare il codice e "rubare" lo script.
Ci sono alcuni modi di fare il vostro codice difficile da essere rubato, ma come ho detto nulla è a prova di proiettile.

Al largo della parte superiore della mia testa, una sola idea è quella di limitare l'accesso ai file js esterni al di fuori della pagina si incorpora il codice in. In tal caso, se avete

<script type="text/javascript" src="myJs.js"></script>

e cerca qualcuno di accedere al myJs.js file browser, non dovrebbe essere concesso alcun accesso alla sorgente di script.
Ad esempio, se la pagina è scritta in PHP, è possibile includere lo script tramite la funzione include e lasciare che lo script decidere se è sicura " per restituirlo di sorgente.
In questo esempio, è necessario il file "js" esterni (scritto in PHP) myJs.php :

<?php
    $URL = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    if ($URL != "my-domain.com/my-page.php")
    die("/\*sry, no acces rights\*/");
?>
// your obfuscated script goes here

che dovrebbe essere incluso nella tua pagina principale my-page.php :

<script type="text/javascript">
    <?php include "myJs.php"; ?>;
</script> 

In questo modo, solo il browser potevano vedere il contenuto del file js.

Un'altra idea interessante è che, alla fine dello script, si elimina il contenuto del vostro elemento scritto dom, in modo che dopo il browser analizza il codice, il codice scompare:

<script id="erasable" type="text/javascript">
    //your code goes here
    document.getElementById('erasable').innerHTML = "";
</script>

Questi sono tutti hack solo semplici che non può, e non lo ripeterò mai abbastanza: non può proteggere completamente il codice js, ma possono certo incazzare qualcuno che sta cercando di "rubare" il codice.

Aggiornamento:

Recentemente ho imbattuto un articolo molto interessante scritto da Patrick Weid su come nascondere il codice js, e lui rivela un approccio diverso : è possibile codificare il codice sorgente in un'immagine! Certo, questo non è a prova di proiettile sia, ma è un altro recinzione che si potrebbe costruire intorno al vostro codice.
L'idea alla base di questo approccio è che la maggior parte dei browser possono utilizzare l'elemento di tela per fare la manipolazione dei pixel sulle immagini. E poiché il pixel tela è rappresentato da 4 valori (RGBA), ogni pixel può avere un valore nell'intervallo 0-255. Ciò significa che è possibile memorizzare un personaggio (vero e proprio è del codice ASCII) in ogni pixel. Il resto della codifica / decodifica è banale.
Grazie, Patrick!

Altri suggerimenti

L'unica cosa che puoi fare è Oscurazione il codice per rendere più difficile leggere. Non importa quello che fai, se si desidera che il javascript da eseguire nel loro browser Dovranno avere il codice.

Leggi questo . Ha un modo molto piacevole di nascondere il codice in entrambe visualizza sorgente e strumento di debug come Firebug.

Dalla mia conoscenza, questo non è possibile.

Il tuo browser deve avere accesso ai file JS per essere in grado di eseguirli. Se il browser ha accesso, allora l'utente del browser ha anche accesso.

Se di proteggere con password i file JS, quindi il browser non sarà in grado di accedervi, sconfiggendo lo scopo di avere JS in primo luogo.

Appena fuori dalla parte superiore della mia testa, si potrebbe fare qualcosa di simile (se è possibile creare script lato server, che suona come si può):

Invece di caricare lo script, come normale, inviare una richiesta di AJAX per una pagina PHP (potrebbe essere qualsiasi cosa, io appena lo uso io). Hanno il PHP individuare il file (forse su una parte non pubblica del server), aprirlo con file_get_contents, e ritorno (leggi: echo). Il contenuto come stringa

Quando questa stringa ritorna al JavaScript, lo hanno creare un nuovo tag script, popolare il suo innerHTML con il codice appena ricevuto, e allegare il tag alla pagina. (È potrebbe di problemi con questo,. innerHTML non può essere quello che ti serve, ma è possibile sperimentare)

Se si esegue questa operazione molto, si potrebbe anche voler impostare una pagina PHP che accetta una variabile GET con il nome dello script, in modo che si può afferrare dinamicamente diversi script utilizzando lo stesso PHP. (Forse si potrebbe usare POST, invece, per fare solo un po 'più difficile per le altre persone a vedere quello che stai facendo. Non lo so.)

Modifica Ho pensato che fosse solo cercando di nascondere il posizione dello script. Questo, ovviamente, non aiuterebbe molto se si sta cercando di nascondere lo script stesso.

Lascia perdere, questo non è fattibile.

Non importa che cosa si prova non funzionerà. Tutto quello che un utente deve fare per scoprire il codice e la sua posizione è quello di guardare nella scheda netto nel Firebug o l'uso violinista per vedere ciò che le richieste vengono effettuate.

Google Closure Compiler , YUI compressore , Minimizza , / Packer / ... ecc, sono opzioni per la compressione / offuscando i codici di JS. Ma nessuno di loro può aiutare da nascondere il codice da parte degli utenti.

Chiunque sia a conoscenza decente può facilmente decodificare / de-offuscare il codice utilizzando strumenti come JS Beautifier . È il nome.

Quindi la risposta è, si può sempre rendere il codice più difficile da leggere / decodificare, ma di sicuro non c'è modo di nascondere.

Credo che l'unico modo è quello di mettere i dati richiesti sul server e consentono loggato unico utente per accedere ai dati come richiesto (si può anche fare un po 'di calcoli lato server). Questa abitudine proteggere il codice javascript, ma rendono unoperatable senza il codice lato server

Come ho detto nel commento che ho lasciato alla risposta gion_13 prima (si prega di leggere), davvero non si può. Non con javascript.

Se non si desidera che il codice sia disponibile sul lato client (= stealable senza grandi sforzi), il mio suggerimento sarebbe quello di fare uso di PHP (ASP, Python, Perl, Ruby, JSP + Java-servlet) che viene elaborato sul lato server e solo i risultati dell'esecuzione di computazione / code sono serviti per l'utente. O, se si preferisce, anche Flash o Java-Applet che lascia sul lato client calcolo / esecuzione di codice ma sono compilati e quindi più difficile da invertire-motore (non impossibile, quindi).

Solo i miei 2 centesimi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top