[PHP] File locali

Discussione in 'PHP' iniziata da curzio.maria, 14 Aprile 2019.

  1. curzio.maria

    curzio.maria Nuovo Utente

    Registrato:
    14 Aprile 2019
    Messaggi:
    11
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Buongiorno, oggi ho caricato sul server remoto ( ARUBA) uno script di prova che utilizzo in locale in ambiente EASYPHP.
    Questo script controlla semplicemente la presenza di un file di testo (texto.txt) in una specifica directory del disco C con una chiamata alla funzione file_exist().
    Bene, in locale la funzione torna TRUE, lo stesso script in remoto torna FALSE, non credo sia un problema legato alla sicurezza, non tento alcuna operazione sul file, solo verifico la sua presenza.

    Ho provato con c:\\posto\\testo.txt , c:\posto\testo.txt , c://posto//testo.txt , c:/posto/testo.txt , nulla.
    Il mio hosting su ARUBA è di tipo Linux.

    Se qualcuno ha qualche suggerimento....

    Grazie
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.484
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    devi distinguere, "come si dice", lato server e lato client
    lato server rappresenta il server web che risponde alle chiamate inviate dal browser che sta sul lato client
    quindi stanno operando due macchine diverse, un server ed un client

    casualmente, quando hai installato il server web in locale, le due macchine coincidono

    php lavora sulla macchina server ( lato server )

    quando il server e di conseguenza php lavorano in locale, entrambi hanno accesso al disco c:\

    quando il server é remoto ( aruba ), php accede al disco c:\ ( o equivalente linux ) del server,

    nel caso specifico devi indirizzare il file ( da php ) con la notazione delle cartelle di linux
    ed il file deve trovarsi sul server remoto

    mai potrai accedere con php al disco c:\ locale proprio per ragioni di sicurezza
     
  3. curzio.maria

    curzio.maria Nuovo Utente

    Registrato:
    14 Aprile 2019
    Messaggi:
    11
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Grazie per la cortese risposta.

    Sebbene pensionato sono alle prime armi con PHP e faccio molta confusione.
    Innanzi tutto credevo che l'ambiente di sviluppo, nel mio caso EASYPhp, separasse i due ambienti, remoto e locale anche in fase di sviluppo. Ovvero pensavo che ciò che funziona nella macchina locale (localhost) funziona anche in remoto. Evidentemente non è così.
    Ho però un dubbio, meglio una curiosità, quando faccio l'upload di un file da php riesco a leggere la directory locale, per intenderci quella del disco c:\, riesco inoltre a ottenere informazioni sul file selezionato quindi, ma questa è la mia ipotesi, in qualche modo da php è possibile leggere il disco locale, ma forse faccio confusione tra PHP e HTML.

    Chiudo, mi sarei atteso però dalla funzione di PHP almeno un warning dato che ho settato il gestore degli errori a ALL.

    Grazie
     
  4. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.484
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    di fatto sono separati, ma il server agisce sul disco "c" e risponde al browser(client) di conseguenza

    l'applicazione sul server ti da la possibilità di caricare il file
    ed attraverso il browser "navighi" le directory per scegliere il file,
    ma tu "autorizzi" l'operazione, compiendola

    può essere che l'errore sia presente nel log (bisogna vedere il setting di php.ini)
    per le mie applicazioni invio i messaggi di errore in un file specifico (corredato del percorso)
    PHP:
    error_reporting(-1);
    // ini_set('error_reporting'       , E_ALL | E_STRICT);
    ini_set('display_errors'           FALSE);
    ini_set('log_errors'               TRUE);
    ini_set('error_log'                '../errors/_PHPerrors.log');
     
  5. curzio.maria

    curzio.maria Nuovo Utente

    Registrato:
    14 Aprile 2019
    Messaggi:
    11
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Grazie.
    Aggiungo e provo.
    Ho controllato su internet e pure in JS non è affatto banale accedere anche in sola lettura a files locali.
     
  6. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.484
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    sul lato client non è consentito l'accesso al disco ( e non solo ) sia in html che js che con linguaggi di programmazione,
    proprio per ragioni di sicurezza,
    stiamo parlando di ambiente web (server/client)
    hacker permettendo
     
  7. curzio.maria

    curzio.maria Nuovo Utente

    Registrato:
    14 Aprile 2019
    Messaggi:
    11
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    In effetti ho riletto l'articolo, era una lunga routine inviata da un programmatore indiano. Conosco il JS ancor meno del PHP e quindi ho dato per scontato che se un guru... a fine routine però i commenti cui non avevo badato lamentavano una serie di errori che verificavano usando la routine.
    Bene, si far per dire, rinuncio.
    Però è strano se almeno fosse possibile leggere, solo leggere, un file si potrebbe utilizzare una chiavetta USB per proteggere l'applicazione. Grazie di nuovo
     
  8. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    853
    Mi Piace Ricevuti:
    43
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Banalmente inserisci nella root di aruba (quella che viene puntata con un dominio es: miodominio.it) 2 file:
    1- FILE.txt
    1-index.php
    nel file index.php aggiungi

    PHP:
    <?php

    //leggo il contenuto del file
    echo file_get_contents(__DIR__.'/FILE.txt');

    //leggo la profondità delle directory e ricostruisco l'albero dalla root del disco assegnato
    echo __FILE__;
    dovrebbe leggerti il contenuto del file....

    Per effettuare la lettura dei file si dovrebbe partire dalla root dell'applicazione, ma è possibile leggere anche file all'interno di tutte le partizioni montate, sia con php che con JS...
    es:
    Hosting Linux
    /var/www/vhosts/dominio/htdocs/
    /data/siti_web
    /usr/bin

    es: la mia app è posizionata in /var/www/html/miosito/index.php ma voglio leggere il file che si trova in /data/global/file.txt
    con php è possibile leggere il file anche se in una partizione differente
    PHP:
    <?php
    echo file_get_contents('/data/global/file.txt');
    ?>
    Come vedi leggi tutto da tutte le parti, falso il contrario....
    etc.... Analoga la lettura per il disco locale C...

    PHP una volta installato e configurato diventa di sistema quindi ha il diritto di leggere su ogni partizione e su tutte le risorse della macchina dove è installato... Naturalmente essendo hosting e non VPS o Server dedicato o Cloud avrai accesso solo alle tue specifiche directory....

    Utilizzando JS si potrebbe prevedere l'uso di node lato server senza php, il risultato sarebbe uguale....
    es https://code-maven.com/reading-a-file-with-nodejs
    Codice:
    var fs = require('fs');
    fs.readFile('DATA', 'utf8', function(err, contents) {
    console.log(contents);
    });
    console.log('after calling readFile');
    
     
  9. curzio.maria

    curzio.maria Nuovo Utente

    Registrato:
    14 Aprile 2019
    Messaggi:
    11
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Grazie per la risposta.
    Sono riuscito a leggerla solo ora e... non ho capito esattamente cosa suggerisci.
    Non sono un grande esperto di PHP, anzi mi rendo conto sempre più dei miei limiti e quindi se non capisco è in tutta evidenza colpa mia.

    Vengo al punto, sono riuscito a trasformare un applicativo da VB a php, stranamente funziona correttamente, si tratta di una semplice applicazione che però usa in modo 'pesante' mysql utilizzando OBJ-PDO.

    Si tratta di una applicazione che registra spese, rimborsi e fatture, limitata a meno di 5o utenti (dipendenti aziendali) per evidenti ragioni di sicurezza, dopo aver applicato filtri etc volevo utilizzare delle chiavi USB per autenticare gli utenti, oltre alla password (20 caratteri + salt di 25 caratteri) il tutto ovviamente funzionava perfettamente in locale (EASYPHP su c:\), in effetti nell'ambiente di sviluppo riesco a leggere quello che voglio, dischi di rete compresi (mappati) questo da locale.
    Da remoto non riesco a leggere file che non siano all'interno dello spazio a me assegnato da ARUBA.

    Ho chiesto al servizio clienti e il mio spazio (HOSTING) è limitato alla directory nomedominio e alle sue subdirectory, non esiste altro spazio utile, e questo peraltro pone problemi noti i sicurezza.

    Sempre secondo loro non è possibile in alcun modo leggere, da remoto (quindi da ARUBA) alcun file locale ovvero nel file system dell'utente collegato al sito e quindi al mio applicativo, aggiungo che parevano schifati da una domanda per loro tanto banale.

    Ho perso un giorno intero in internet per trovare una possibile soluzione, francamente mi pareva IMPOSSIBILE che una operazione tanto banale fosse tanto complicata (se non impossibile .. e mi ripeto) ma ....

    Da quanto ho capito, tu riesci a leggere in ogni posizione del file system del PC dove hai installato (localmente) PHP, questo posso farlo anche io, e in effetti l'ho fatto fin dal principio, ma a me serve serve una cosa del tutto diversa leggere dalla macchina dell'utente che si collega.

    Grazie per la cortese risposta, e se per caso hai osservazioni ti prego di non esitare, evidentemente sei persona competente dalla quale posso solo imparare.
     
  10. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    853
    Mi Piace Ricevuti:
    43
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    In realtà è possibile leggere anche da un qualsiasi client, solo che i sistemi di sicurezza bloccano l'esecuzione di sw maligno (viene interpretato in questo modo), quindi per ovvi motivi di tempo e sicurezza sarebbe un NON si può leggere un file dal client (sappi che non è vero)...

    Potresti creare un sw/app client che si occupi di eseguire in python/php un server web così da poterlo interrogare lanciando chiamate in localhost:porta_client, in questo modo saresti capace di leggere qualsiasi contenuto....
    Lo sforzo è molto grande, e forse diventa una strada poco percorribile...

    Non ho idea di che tipo di file devi leggere, magari uno schema logico/funzionale riesce a far capire meglio l'intento...

    Al massimo potresti prevedere la creazione di una VAPP sul server locale da interrogare, ossia crei il semplice ed efficace server rest, in questo modo anche se da remoto potrai sempre contattare il server locale per utilizzare la sua capacità di lettura e scrittura sui dischi locali e remoti...
     
  11. curzio.maria

    curzio.maria Nuovo Utente

    Registrato:
    14 Aprile 2019
    Messaggi:
    11
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Salve, in realtà sarebbe sufficiente controllare la presenza sul pc locale, quello utilizzato dall'utente che tenta di connettersi, di un file di testo qualsiasi, ad esempio eidos.eidos.it, che un utente non autorizzato abbia lo stesso file nella stessa posizione è praticamente impossibile.

    Meglio, ma non indispensabile come detto, sarebbe poter leggere questo file e confrontare una chiave cifrata ivi contenuta con una analoga registrata nel database, chiave che potrebbe, ad esempio, variare in funzione di una serie di parametri prestabiliti, etc etc.

    La soluzione che ho scelto di adottare, amo le cose semplici, (rasoio di Occam) è stata la seguente : verificato che il porting (una volta si diceva così) dell'applicazione da VB a PHP è completo e funziona ho consegnato i sorgenti e lasciato all'utilizzatore ogni decisione in merito ai problemi di sicurezza che sono enormi e oltre le mie capacità, a partire dal fatto che l'hosting di ARUBA, pure eccellente, non preveda una directory non accessibile da eventuali malintenzionati.

    Grazie per i suggerimenti.
     
Sto caricando...

Condividi questa Pagina