Struttura dei file durante l'utilizzo del token

0

Sto utilizzando un token di modulo per proteggere il processo di convalida del mio file php.

Fondamentalmente la struttura del file php assomiglia a questo:

if ($_POST) {//form has been submitted?

    if (validateFormToken) {
        //process form-data
    }

} else {

    //display form and generate token
    include 'includes/forms/form.php';

}

Vorrei sapere se sarebbe più sicuro se dividi il file php in due file:

  1. il modulo stesso e
  2. il file php di convalida

Chiedo solo perché attualmente uso solo un file e questo file è accessibile direttamente. Se utilizzo due file (di cui sopra), potrei impedire l'accesso diretto del file di convalida tramite il token generato. Ma il form-file poteva ancora accedere direttamente. C'è un altro modo per impedire l'accesso diretto tramite .htaccess o qualche altro metodo di cui non sono a conoscenza?

    
posta drpelz 27.11.2013 - 19:20
fonte

1 risposta

2

Il codice non diventerà più sicuro di per sé suddividendolo in modo diverso tra i file. La cosa importante è quale codice verrà eseguito quando qualcuno richiede un determinato URL. Se questo cambia perché il tuo server web sta eseguendo un file diverso o perché hai un'istruzione if..else in un file è del tutto irrilevante. File separati possono aiutare l'organizzazione del codice e quindi prevenire possibili bug, ma non è più sicuro di per sé.

Se è possibile accedere a "include files" che in genere non devono essere eseguiti da soli, e ciò consente a un utente malintenzionato di eludere qualche protezione o un altro, è del tutto colpa sua per aver esposto pubblicamente questo codice eseguibile in primo luogo. È necessario inserire solo codice "pubblico" nella directory webroot pubblica. Se un visitatore non deve andare a http://example.com/include/never/execute/this/directly.php , allora questo URL deve richiedere una risposta 404 dal server web invece di farlo eseguire del codice. Il modo corretto per farlo è quello di non mettere il file lì in primo luogo, ma al di fuori del webroot:

myapp/
  includes/
    sensitive.php
    ...
webroot/
  contact.php
  index.php
  ...

Questo può arrivare ad avere solo un index.php nel webroot, usando mod_rewrite per indirizzare tutte le richieste in esso e usando un router di richiesta per gestire le richieste in PHP.

Il tuo server web risponde alle richieste di URL. Questo non ha nulla a che fare con i file fisici. Tenetelo sempre a mente. Quale richiesta di URL implica quali file sono completamente a tua disposizione. Il punto è quale URL attiverà la risposta; il modo in cui i file sono disposti sul back-end è completamente irrilevante.

    
risposta data 27.11.2013 - 20:34
fonte

Leggi altre domande sui tag