• User Attivo

    [Sicurezza] funzioni JS che verificano se un utente è loggato?

    Buon giorno a tutti gli amici di GT Forum,
    apro questo Thread perchè ho una piccola perplessità legata alla sicurezza di un'applicazione realizzata mediante JS-php-MySQL.
    In un file JS ho diverse funzioni che "dovrebbero funzionare" solo se l'utente è loggato. Così, mi era venuto in mente di:

    • mettere all'inizio di ogni funzione, nella prima riga, un richiamo ad un altro funzione (isAuth()) che non fa altro che controllare se l'utente è loggato. In caso contrario fa un return FALSE;
    • scrivere un codice php che restituisce un valore JSON a seconda se l'utente sia loggato o meno;
    • leggere il risultato ottenuto da questo file php tramite jQuery.

    Voi avete da darmi qualche altra dritta?
    Grazie.


  • User Attivo

    ragazzi nessun parere?


  • User

    La tua idea non è male, anche se è ovviamente a livello di PHP che otterrai un alto livello di sicurezza (il codice JS è aggirabile).

    Hai pensato a generare del codice javascript "on the fly"? Ovvero, se l'utente è loggato da PHP generi un file JS in cui ci sono le funzioni ma che non fanno praticamente nulla (praticamente la dichiarazione e un eventuale valore di ritorno default); mentre se l'utente è loggato, allora le funzioni avranno un corpo.

    In questa maniera, oltre ad alzare il livello di sicurezza, eviti di condividere codice JS con utenti non loggati.

    Ovviamente non so se è applicabile nel tuo progetto, ma talvolta ho usato questa tecnica


  • User Attivo

    ciao nextcode e grazie per il tuo intervento.
    Ti spiacerebbe spiegarmi meglio come fare a generare all'occorrenza il codice?
    In più pensavo anche di applicare qualche metodo di compressione JS che in rete se ne trovano tanti (di quelli che comprimono e ammucchiano tutto il codice).


  • User

    Ad esempio, ipotizzando che tu abbia due funzioni JS (dummy1 e dummy2) che hanno un comportamento diverso a seconda che l'utente sia loggato o meno:

    Codice PHP

    if ( $logged ) {
       include( "js_logged.php" );
    } else {
       include( "js_public.php" );
    } 
    ```**Codice JS se utente loggato (js_logged.php)**
    

    ?>
    <script>
    function dummy1() {
    ... codice ...
    return value;
    }
    function dummy2() {
    ... codice ...
    return value;
    }
    </script>
    <?php

    ?>
    <script>
    function dummy1() {
    return true;
    }
    function dummy2() {
    return true;
    }
    </script>
    <?php

    
    Con questa tecnica, nel codice JS potrai continuare a chiamare le funzioni dummy1 e dummy2 senza problemi, ma il loro comportamento dipenderà dal fatto che l'utente sia loggato o meno.

  • User Attivo

    Ciao,
    io programmo ad oggetti perciò uso creare delle classi php con all'interno le funzioni, cioè non mischio insieme codice php, html, ecc.
    Mi chiedevo se questo tuo suggerimento si potrebbe applicare anche programmando a oggetti.
    Ad esempio:
    Codice PHP (ipotizzando che si chiami get_js.php)

    
    <?php
        class Funzioni
        {
            public function dummy1()
            {
                if($logged)
                {
                    echo '<script type="text/javascript">
                                alert("Sei Loggato");
                                // elenco istruzioni e metodi da eseguire
                            </script>';
                }
                else
                {
                    echo 'Non sei loggato.';
                    die;
                }    
            }
        }
    ?>
    
    

    E poi nel codice HTML mi basterebbe semplicemente mettere:

    
    <html>
        <head>
            <?php include 'get_js.php'; ?>
        </head>
        <body>
        </body>
    </html>
    
    

    Così andrebbe bene?
    E riguardo alla compressione del codice JS cosa mi dici?

    Grazie.


  • User

    Certo, va benissimo. Anche io programmo ad oggetti, avevo mantenuto l'esempio abbastanza semplice e ipotizzato che dummy1 e dummy2 fossero funzioni javascript, non PHP. Comunque, va bene come l'hai impostato.

    Per la compressione del codice, prova questo:
    http: // closure-compiler.appspot.com/home

    Lo uso abbastanza spesso, ti fa anche la validazione del codice JS e il risultato è ottimale.


  • User Attivo

    Grazie del suggerimento.
    Comunque confermo che si tratta di funzioni JS e non PHP. Per comodità le ho scritte dentro ad una funzione php e all'occorrenza le includo.
    Ma penso che tu volessi dire la stessa cosa col tuo esempio.


  • User

    Bene.

    Tra l'altro, anche in JS sempre più spesso preferisco usare delle classi con metodi piuttosto che delle funzioni, quando è possibile. In questa maniera, il codice è molto più pulito


  • User Attivo

    Ciao,
    rieccomi ancora perchè, dando un'occhiata al link che hai postato tu riguardo la compressione JS, mi sono accorto di essermi espresso male.
    Per "compressione" intendevo il modo per comprimere criptando il codice JS.
    In giro ho trovato parecchi siti che utilizzano dei metodi per criptare (il più possibile) il loro codice JS generando pagine e pagine di caratteri apparantemente insignificanti.
    Ne conosci qualcuno di questi metodi?


  • User

    Ciao,

    non esiste un metodo sicuro per criptare il codice JS, perché essendo codice interpretato lato browser deve essere per sua natura in chiaro. Esistono dei metodi di offuscamento del codice, che ovviamente non sono sicuri al 100%, ma rendono semplicemente difficile interpretare il codice.

    Tra l'altro, è un problema che ho anche io avendo sviluppato delle applicazioni con un front end molto articolato in jQuery.

    Prova a cercare su google "javascript obfuscator" e vedrai diversi tool online, alcuni sono più efficaci (es. YUI compressor), ma la protezione non è garantita mai al 100%.

    Vedi anche:
    stackoverflow.com /questions/272342/free-javascript-obfuscators