2012-10-22 20 views
6

Il mio sito Web php ha più file php, alcuni dei quali sono per l'interfaccia utente e alcuni di essi sono file helper (i file, che comunicano attraverso il database e l'un l'altro per restituire un risultato). Ora ho bisogno che quell'utente non possa eseguire i file helper dalle loro url dirette.Rendi i file php nascosti al di fuori del mondo

e.g. mydomain.com/login.php ---------- (Interface file, must be accessible to user) 
    mydomain.com/login_handle.php ----(Healper file, must not be accessible to user) 

Quindi ho bisogno è utente può eseguire e navigare mydomain.com/login.php, ma deve ot in grado di eseguire mydomain.com/login_handle.php, mentre login.php e handle_login.php mantenere comunicare e ci riesce accedere l'un l'altro. Grazie,

Edit: dispiace ma sto usando hosting condiviso e non v'è nessun cartella diversa public_html.

+5

conservarli al di fuori del webroot? – eggyal

+0

I file php sarebbero ancora in grado di comunicare tra loro? –

+0

Idealmente, l'unica cosa che dovrebbe essere memorizzata in webroot è il tuo router; tutte le richieste dovrebbero essere indirizzate al router, e sarebbe responsabile per l'inclusione del codice situato al di fuori del proprio webroot. –

risposta

4

Le prime cose che vorrei tentare:

  1. Spostare i file inclusi al di fuori della radice del documento

  2. spostare i file inclusi all'interno di un'altra cartella e proteggerlo con .htaccess. In alternativa, rinominare i file di inclusione per terminare con .inc e creare una regola basata su tale.

  3. Assicurarsi che i file inclusi non generino nulla; questo non è veramente sicuro, ma se il tuo file contiene solo funzioni, definizioni di classi, ecc. senza produrre alcun output, mostrerebbe solo una pagina vuota.

L'approccio hacker per questo può essere realizzato utilizzando costanti:

index.php

<?php 

define('MY_CONSTANT', '123'); 

include('helper.php'); 

helper.php

<?php 

if (!defined('MY_CONSTANT')) { exit; } 

// we were called from another file 
// proceed 

Modifica

L'approccio numero 2 dall'alto può essere fatto da:

  1. Creare una cartella sotto public_html, per esempio includes/

  2. spostare tutti i file che dovrebbero essere inclusi solo in questa cartella

  3. Aggiungere il seguente .htaccess interna:

    <FilesMatch "\.php$"> 
    Order allow, deny 
    Deny from all 
    </FilesMatch> 
    
+0

Sì, mi è piaciuta la soluzione. Grazie, –

+0

Ma per fare questo, devo scrivere una costante in ogni riga, non è vero? Può esserci qualche soluzione htaccess per questo? –

+0

@ user1706482 Per questo consiglio di spostare prima tutti i file inclusi in una sottocartella. –

1

Prova a usare .htaccess.

Invece di 127.0.0.1 questo IP, è necessario inserire l'indirizzo IP del server.

<Files login_handle.php> 
    Order Allow,Deny 
    Deny from all 
    Allow from 127.0.0.1 
</Files> 
+0

Sì, ho bisogno di qualcosa esattamente come questo. Ma come farlo funzionare? –

+0

Vai alla cartella public_html e apri il file .htaccess o crea se non esiste. –

+0

Grazie, la tua risposta è esattamente ciò di cui ho bisogno. Ma facendo questo mostra un errore proibito per entrambi i tipi di accesso, ad esempio, non riesco ad accedere alla pagina vietata significa che anche i file interni non possono accedere? –

Problemi correlati