• User

    Siccome non ho ancora ricevuto nessuna risposta al mio quesito, provo a modificare la mia richiesta.
    Come spiegato in precedenza, in una cartella del mio computer ho creato una pagina html che richiama un file javascript, un css e vari files audio.
    Questa pagina web genera una specie di calcolatrice parlante che gira OFFLINE (non ha bisogno quindi di una connessione ad internet) e di conseguenza non mi serve pubblicare i files su un server, ne tantomeno creare files in .php.
    Il mio obiettivo è quello di installarlo su altri PC, evitando che un utente esperto possa modificare il programma.
    In primo luogo avevo pensato ad un convertitore di applicazioni, ma come ho scritto in precedenza funziona solo in parte. Pertanto ho pensato di CRIPTARE il codice javascript. Cosi facendo almeno il file .js è difficile da modificare (almeno questo primo obiettivo in parte lo ho raggiunto), ma se l'utente copia l'intera cartella su un altro computer funzionerebbe ugualmente.
    Stavo pensando quindi di creare un sistema di controllo per verificare se l'utente è abilitato ad utilizzarlo, ma purtroppo questo NON DEVE ESSERE FATTO tramite una connessione ad internet (prevedo che l'utente in questione non possa avere la connessione disponibile sempre).
    Mi è venuto in mente quindi di creare ad esempio una password (generata dal programma) che viene salvata sul computer dell'utente, ma a quanto pare javascript non è in grado di creare e salvare un file sul computer LOCALE (client).
    Stavo pensando di creare un cookies, ma a me serve che la password sia PERMANENTE, mentre i cookies scadono nel tempo.
    Vi viene in mente qualche idea a riguardo?
    Grazie.


  • User Attivo

    "Criptare" JavaScript non ha senso. Finche' il JavaScript viene eseguito dal browser (o cio' che comunque interpreta il JavaScript) c'e' sempre modo di risalire al sorgente. Ci sono persino dei tool online che promettono di "criptare" JavaScript ma non ci vuole molto ripeto per risalire al sorgente.
    Finche' si tratta di semplice HTML+CSS+JavaScript e non puoi usare una connessione Internet, la vedo dura...


  • User

    @SkyLinx said:

    "Criptare" JavaScript non ha senso. Finche' il JavaScript viene eseguito dal browser (o cio' che comunque interpreta il JavaScript) c'e' sempre modo di risalire al sorgente. Ci sono persino dei tool online che promettono di "criptare" JavaScript ma non ci vuole molto ripeto per risalire al sorgente.
    Finche' si tratta di semplice HTML+CSS+JavaScript e non puoi usare una connessione Internet, la vedo dura...

    Intanto grazie per la risposta. Come ho scritto precedentemente IN PARTE avrei risolto, nel senso che un utente poco esperto farebbe un pò di fatica a capire ciò che è scritto nel file .js una volta criptato. Certo che se poi ci mette le mani un utente più esperto allora è un'altra cosa.

    Ma appunto per questi ed altri motivi, come posso risolvere il problema? Devo cambiare linguaggio di programmazione, ad esempio visual basic o altro????


  • User Attivo

    Stavo pensando che forse potresti risolvere il problema con Cordova/Phonegap. Cioe' creare una mobile app usando il codice che gia' hai e limitare appunto l'uso di questa app a mobile devices. In questo modo e' molto improbabile che uno riesca ad arrivare al codice sorgente attraverso il mobile. Se non ho capito male ti andrebbe bene una soluzione per Android soltanto, giusto?


  • User

    Avrei la necessità di utilizzarla su entrambi i sistemi: PC e ANDROID.
    Nel frattempo sto provando una cosa su PC e con l'occasione provo a guardare Cordova/Phonegap.
    Grazie intanto per la risposta SkyLinx. Alla prossima.


  • User

    Il quesito che sto tentando di risolvere in questo momento è quello di poter convalidare oppure no l'utilizzo da parte dell'utente.
    Per fare questo, nella versione PC (ma non è detto che possa funzionare anche con Android) ho pensato di fare la seguente operazione:
    Sul computer locale compilo un form (nome, cognome, password etc) che invia i dati ad un file php che sta sul mio server (nella fase di registrazione posso utilizzare internet), che verifica se l'utente è registrato (sarebbe bello se si potesse interrogare il database remoto tramite il file javascript locale, ma a quanto pare questo non è possibile).
    A questo punto, se l'utente è abilitato viene generata dal server una chiave di sicurezza (tramite una variabile, un file di testo, un cookie o un file .xml o .json), dopodichè bisognerebbe rendere PERMANENTE sul computer locale questo dato, affinchè ogni volta che si lancia l'applicazione, il file javascript verifica l'esistenza oppure no di questa chiave (di conseguenza da questo momento in poi non occorre essere collegati ad internet).
    Quale è la procedura migliore per prelevare questa chiave dal mio server e farla riconoscere a javascript sul computer locale?
    Io nel frattempo provo a trovare la soluzione, ma se vi viene qualcosa in mente...... fatemi sapere. CIAOOO


  • User Attivo

    Se procedi con qualcosa basato su JavaScript allora potresti dare una occhiata a JWT (JSON Web Tokens) per l'authentication.


  • User

    Come al solito ti ringrazio per la risposta SkyLinx. Ho appena dato un occhiata a JWT ma per adesso mi sembra fantascienza (almeno per me). Sicuramente approfondirò anche questo argomento prossimamente.
    Nel frattempo ti dico dove sono arrivato con i miei ragionamenti semplici. Volevo far generare al server un file (in questo caso .json) nella sua cartella (nomesito/nomecartella/prova.json).
    In un secondo passaggio, tramite il javascritp locale, andare a leggere questo file, prelevare i dati e da qui generare un cookie sul pc locale.

    Questo è un esempio di file agenda.json:

    [ 
      { "Nome" : "Mario", "Cognome" : "Rossi", "ID" : "A15B32" },
    ]
    

    Per leggere questo file in locale ho usato questo codice:

    $.ajax({ 
        type: 'POST', 
        url: 'agenda.json', 
        data: { get_param: 'value' }, 
        dataType: 'json',
        success: function (data) { 
            $( "#send" ).remove();
            $.each(data, function(index, element) {
                $('body').append($('<div>', {
                    text: element.Nome + " " + element.Cognome
                }));
            });
        }
    });
    

    Il problema è che con questo codice posso leggere il file solo IN LOCALE. Avevo pensato di cambiare la riga URL: con "nomesito/nomecartella/agenda.json", ma niente da fare.
    Se risolvo su come leggere il file remoto, sarei già a buon punto. Si può adattare questo codice oppure è una opzione impensabile?

    Anche se potrebbe sembrare tutto più contorto, è la soluzione che attualmente ho trovato per me più comprensibile.


  • User Attivo

    Se fai una POST request ad una pagina esterna (dominio/protocollo/porta etc differente) non puoi poi leggerne il response con JavaScript per motivi di sicurezza. Una tecnica che potresti usare e' JSONP ("JSON with padding").

    Come funziona: in pratica la pagina richiedente i dati (pagina A) aggiunge dinamicamente uno SCRIPT tag avente come URL lo URL della pagina B che genera i dati (nel tuo esempio "agenda.json") e questo URL include un parametro di solito chiamato "callback" che ha come valore il nome di una funzione in pagina A. Quando questo script viene richiesto, pagina B genera un response del tipo:

    
    nomeFunzioneCallback([   { "Nome" : "Mario", "Cognome" : "Rossi", "ID" : "A15B32" },
    ]);
    
    

    Poiche' questo response viene caricato da uno SCRIPT tag, esso viene interpretato come JavaScript e la funzione "nomeFunzioneCallback" viene dunque eseguita nel contesto di pagina A e fa con i dati passati cio' che vuole.

    Il processo e' semplificato se usi jQuery. Esempio:

    1. Pagina chiamante (A) esegue:
    
    var miaFunzione = function(json) {
      // fai quello che vuoi col JSON
    };
    
    $.ajax({ 
        url: 'hxxp//altrodominio/agenda.json', 
        dataType: 'jsonp',
        jsonpCallback: "miaFunzione"
    });
    
    

    Da notare il "jsonp" invece che "json".; la AJAX request puo' anche essere fatta cosi', senza una funzione separata:

    
    $.getJSON("hxxp://altrodominio/agenda.json?callback=?",function(json){
      // fai quello che vuoi col JSON
    });
    
    

    jQuery, notando che il dominio e' diverso, aggiunge automaticamente lo SCRIPT tag alla pagina A di cui parlavo.

    1. Pagina che genera i dati (B), come dicevo genera un response del tipo:
    
    nomeFunzioneCallback([   { "Nome" : "Mario", "Cognome" : "Rossi", "ID" : "A15B32" },
    ]);
    
    

    Dove invece di "nomeFunzioneCallback" mette il nome passato dinamicamente da jQuery col parametro "callback".

    1. la funzione specificata in $.ajax oppure la funzione anonima passata a $.getJSON fa coi dati quello che vuole.

    Tra i vari limiti di questa tecnica c'e' che funziona con GET requests soltanto, e va usata soltanto quando si ha controllo su pagina/dominio B, perche' si esegue JavaScript proveniente da un altro sito e dunque sarebbe un potenziale problema di sicurezza se altrimenti (nel senso che ti dovresti fidare del JavaScript nel response).

    Purtroppo non mi vengono in mente altre soluzioni se l'applicazione su PC o mobile deve essere basata su JavaScript.


  • User

    Grazie e ancora grazie SkyLinx. Prima di testare quello che mi hai appena descritto, vorrei raccontarti come nasce questa applicazione.
    L'anno scorso un mio amico mi ha detto se potevo fare una applicazione sul suo computer (che finora ho chiamato CALCOLATRICE PARLANTE ma che in realtà non fa questo e per ovvi motivi non posso dire di cosa si tratta, ma poco interessa).
    Non avendo nessuno strumento di programmazione sul suo computer (semplicemente un notepad), ho iniziato a creare una pagina HTML che richiama un file javascript. L'applicazione funziona benissimo ed attualmente viene utilizzata da questo mio amico.
    A quel punto altre persone che hanno visto questa applicazione ci hanno richiesto di installarla anche sui loro computer ed attualmente abbiamo una buona richiesta da parte di diversi utenti.
    Di conseguenza per evitare che detti utenti RIVENDONO questa applicazione ad altri guadagnando diversi soldini, abbiamo la necessita di proteggerci il più possibile.
    La maggior parte di questi utenti non sono in grado di smanettare il sorgente, si e no sanno avviare un'applicazione, ma copiare una cartella da un pc ad un altro come ben sai per molti non è una cosa cosi difficile.
    Nasce quindi l'esigenza di trovare un sistema di protezione minima (registrazione utente, password ed altre cose).
    Calcolando quindi che l'applicazione attualmente è scritta in HTML/Javascript, potrei tranquillamente convertirla in altro linguaggio di programmazione (anche se la cosa mi farebbe perdere diverso tempo), ma visto che già esiste e funziona.......
    Quello che voglio dire quindi è che non sono OBBLIGATO a continuare su questa strada ed utilizzare PER FORZA un file .json o quello che sia, ma al contrario sto cercando una soluzione semplice e discretamente funzionante.
    Finora ci sono anche altre soluzioni che sto testando, ma se per la tua/vostra esperienza ci sono altre soluzioni sono pronto a prenderle in considerazione.
    In tutti i casi ti ringrazio per le varie risposte che mi hai proposto finora e nel frattempo provo a testare quello che finora ho capito.