Prendi un sito PHP a caso. In sostanza, è garantito che il suo server web sia configurato come segue: serve qualsiasi file dalla radice del documento, ad eccezione di determinati file o percorsi che sono nella lista nera. Anche gli script sono resi eseguibili utilizzando un modello simile: tutti i file .php sono eseguibili dal server Web ad eccezione di quelli in blacklist.
ASP.NET è configurato allo stesso modo in IIS: * i file .aspx sono, per impostazione predefinita, eseguibili da qualsiasi directory, e si suppone che si debbano blacklist come una posizione pubblica "upload" per prevenire vulnerabilità.
Non conosco altri server Web, ma in IIS è possibile girarlo completamente, rimuovendo tutti i mapping del gestore e quindi autorizzando file / percorsi molto specifici. Dato un codebase ben strutturato, uno può avere solo due di questi mapping: una singola mappatura per un "/ public /" da servire da StaticFileHandler, e un'altra mappatura che mappa "/index.php" - e niente else - per FastCgiModule. Per ASP.NET, è un po 'più di lavoro, ma se questo fosse un obiettivo , gli strumenti potrebbero essere scritti nella whitelist di file .aspx durante la distribuzione, in modo che nessun altro file .aspx possa essere eseguito, non importa dove si trovano.
Permettere tutto e quindi provare a tappare i buchi è sicuramente uno dei "no-no" della "sicurezza 101". Perché è così onnipresente nelle configurazioni dei server Web?