• User

    Proteggere l'accesso ad un file

    Prima di tutto faccio due premesse:

    1. non conosco nulla di php
    2. la mia situazione è un po' anomala

    Allora, come ho spiegato (malamente, ad essere sincero) qua:
    giorgiotave.it/forum/php-mysql/84684-protezione-file-lato-client.html

    vorrei distribuire un file htm che contiene uno script. Fin qua non ci sarebbero problemi, se nonchè questo file deve essere eseguito in locale (mi hanno detto che è colpa di alcune particolarità di ajax).

    Il codice html si divide in due parti:
    nella prima, è presente il riferimento ad un file js salvato sul mio server;
    nella seconda viene creato un array di siti da visitare.

    Quello che volevo sapere io è:
    come faccio a limitare l'accesso al file js (presente sul mio server) ai soli utenti registrati?

    Spero di essermi spiegato abbastanza...
    Grazie a tutti in anticipo


  • User Attivo

    Ciao tampe125,
    esistono diversi modi per fare quello che chiedi.
    A braccio direi di agganciarti ai dati di login, che probabilmente saranno salvati in variabili di sessione, suppongo pertanto che esista una variabile del tipo $_SESSION['userid'].

    Detto ciò, nella pagina html/php accessibile a tutti metti l'informazione pubblica e a metà pagina (ovviamente banalizzo) metti un bel

    if (isset($_SESSION['userid'])){
    //mostra la parte riservata
    //includi file specifici
    //fai le capriole...:D
    }

    Inoltre potresti rendere tutto più robusto facendo una query all'inizio dello script, per verificare che effettivamente l'utente $_SESSION['userid'] sia registrato sul tuo db, e settare di conseguenza un'apposita flag su cui basare il controllo precedente.

    Spero di aver capito il problema e di aver risposto a tono...
    :ciauz:


  • User

    la tua risposta sarebbe ottima se il mio fosse un caso normale, ma io mi trovo in una situazione un po' anomala..

    io ho costruito una pagina che deve essere lanciata in locale (il motivo è spiegato nei vari post a cui rimandavo prima), che però per funzionare ha bisogno di un file js che si trova sul server.

    esiste un qualche metodo per proteggere l'accesso al suddetto file js?

    grazie in anticipo


  • User Attivo

    Così al volo:
    rinomini il file js con un nome assurdo che non metterai mai nel codice html (tipo superpippo23.js), quindi, con la logica che ti ho indicato sopra, quando un utente si logga, copi (con il comando copy di php) il file superpippo.is in una stringa dal nome assurdo, ad esempio:

    $nome=md5(time().$_SESSION['userid']); // viene tipo f8sfuyciuda87cvaa8d7
    copy('superpippo23.js',$nome);

    e quindi nell'html ti inclusi il file dal nome assurdo, per poi rimuoverlo appena l'utente si slogga...

    Al primo caffè, forse, saprò suggerirti qualcosa di meglio!:D


  • User Attivo

    Oppure, molto più pulito, crei il file .js dinamicamente con php... sempre usando la logica di prima, costruisci il file .js in modo che se l'utente è loggato venga stampato il contenuto corretto, altrimenti viene lasciato in bianco. Una cosa del tipo:

    if (isset($_SESSION['userid'])){
    echo <<<EOF
    //tutto il contenuto dell'attuale file JS
    EOF;
    }else{
    echo "";
    }

    In questo modo il file .js è ancora tecnicamente accessibilile a tutti, ma per gli utenti non loggati è solo un file vuoto.

    Ovviamente affinchè ciò funzioni devi abilitare l'interprete php per i files .js, cosa possibile agendo sulla direttiva, se non vado errato, ***AddType application/x-httpd-php ***di httpd.conf, oppure agendo su .htaccess (credo...) o tramite specifica funzione che alcuni provider mettono a disposizione da panello di controllo.

    Nella peggiore delle ipotesi, se non riuscisi ad abilitare l'interprete php per i files .js, credo che si possa semplicemente rinominare il file .js in .php, richiamandolo ovviamente con il nome corretto dalle varie pagine php/html, senza alcun tipo di problema...

    Speriamo di aver centrato l'obiettivo!
    :ciauz:


  • User Attivo

    Mi sono riletto tutto il 3d precedente, e credo di aver capito da dove nasce la madre di tutti gli errori...

    Php, è uno script lato server, pertanto, distrubuendo un file html in locale, anche se questo richiama un js sul server, con php puoi fare veramente poco.... Se metti la pagina sul server allora puoi sbizzarirti, altrimenti troveresti solo mezze soluzioni. In questo modo torniamo a quello che ti hanno consigliato, in modo corretto:

    per ovviare a questo problema mi hanno detto che la soluzione più semplice è quella di creare una pagina php che ci pensa lei ad effettuare la chiamata (anche qua copio&incollo quello che mi hanno detto).

    Al che tu obietti:

    1. non ho la più pallida idea di come potrei fare
    1. al dominio esterno apparirebbe l'ip del mio sito che effettua la richiesta tramite la suddetta pagina php, mentre invece io ho la necessità che il dominio esterno veda l'ip di ogni singolo utente.

    Per il p.to 1), va beh..., o ci provi comunque, smanettando un po', o trovi chi lo fa al posto tuo, per il p.to 2) non si capisce un granché... di quale richiesta parli? Se si tratta dell'accesso ad un file che includi nel tuo codice php hai ragione, ma se si tratta di semplici link (come mi pare di aver capito nel prosieguo dei tuoi post), allora si vede solo l'IP di chi clicca...

    Se invece decidi di non mettere la pagina sul server, ma di far scaricare direttamente il file htm, php non c'entra veramente poco con il tuo problema...:bho:

    Se metti online tutto e ci dici esattamente cosa vuoi impedire e a chi, possiamo provare ad escogitare qualcosa, altrimenti continuiamo ad andare per tetti...:D
    :ciauz:


  • User

    wow, grazie mille per il supporto, praticamente è come se ti avessi qua accanto.

    adesso sono un attimo di corsa perchè sono al lavoro.
    appena posso scrivere liberamente cerco di spiegare il tutto al meglio.

    cmq grazie mille per il supporto che mi hai dato fin'ora!


  • User

    allora, mi sono accorto che la cosa sta diventando troppo complessa rispetto al suo scopo (puro divertimento).
    quindi l'abbandono qui.

    Grazie a tutti per il supporto che mi avete offerto.