.htaccess consente l'accesso ai file solo da include

Ho varie sottocartelle sul mio sito Web e vorrei che l'utente non fosse in grado di accedervi tramite URL ma allo stesso tempo i miei file PHP principali per poterli includere o usarli come azioni su moduli o collegamenti.

Ho provato a usare un .htaccess con

<Files *> Order Allow,Deny Deny from All </Files> 

ma ha negato qualsiasi accesso anche all'interno dei miei script. Logico come ho scoperto, ma non so come farlo funzionare. Qualche idea?

PS La mia preoccupazione principale è che alcuni file non sono inclusi nei file PHP principali, ma sono collegati lì e il loro codice finisce con header('Location: ../index.php'); tornare alla pagina principale del progetto.

Vedo molte risposte con Consenti, Nega non negare, Permetti

L'ordine di questo è importnte e causa il problema. Stai dicendo al computer che negare è più importnte di consentire, perché è elencato per ultimo. Per mostrarti … se dici:

 <Files .htaccess> Order Allow,Deny Deny From All Allow From xxx.xxx.xxx.xxx 127.0.0.1 </Files> 

Stai dicendo prima Permetti a chiunque sia permesso, quindi nega tutto … il che continua a negare TUTTO.

Se decidi di negare, consenti di negare tutto, quindi consenti a chiunque sia consentito.

 <Files .htaccess> Order Deny,Allow Deny From All Allow From xxx.xxx.xxx.xxx 127.0.0.1 </Files> 

Il command Consenti, essendo più importnte, poiché è il command finale, consente quindi quelli elencati dopo il command Consenti da.

xxx.xxx.xxx.xxx = Il tuo IP

Fai questo:

 <Files *> Order Deny,Allow Allow from 192.168.100.123 127.0.0.1 Deny from all </Files> 

L'elenco degli IP sarà host specifici che permetti, come localhost.

Questo funziona anche con la direttiva, non solo con il file, se si desidera bloccare solo determinate directory.

C'è un metodo ancora più sicuro. Archivia i tuoi file di inclusione sotto le cartelle accessibili web. Quindi se i tuoi file web sono qui …

/var/www/mysite.com/

Memorizza i tuoi file include qui:

/ Var / include /

Quindi includili con un path completo …

 include '/var/includes/myincludes.inc.php'; 

Dal web, il file myincludes.inc.php è completamente inaccessibile.

Di solito per proteggere questi file logici dall'accesso pubblico è ansible

  1. mettilo nella directory protetta, sopra htdocs
  2. aggiungi un controllo per la costante pubblica .. if(!is_defined(some_root_const)){die();}
  3. cambia estensione a .inc o qualcosa .. e nega con .htaccess basato su quello

inserisci il codice dell'applicazione al di fuori della tua cartella html pubblica. quindi è ansible aggiungere un path di inclusione nella parte superiore degli script per consentire allo script di accedervi come se si trovassero nella stessa cartella.

http://php.net/manual/en/function.set-include-path.php

In .htaccess dovrai specificare quali IP, host vuoi consentire e puoi farlo anche per directory. per es

 <Directory /dir/to/block> Order Allow,Deny Allow from 192.168.0.1 4.4.4.4 Deny from All </Directory> <Directory /dir/to/allow> Order Allow, Deny Allow from All </Directory>