2012-10-22 10 views
6

Moja strona php ma wiele plików php, niektóre z nich są przeznaczone dla interfejsu użytkownika, a niektóre z nich są plikami pomocniczymi (pliki, które komunikują się przez bazę danych i nawzajem, aby zwrócić wynik). Teraz potrzebuję, aby ten użytkownik nie mógł wykonywać plików pomocniczych z ich bezpośrednich adresów URL.Twórz pliki php ukryte przed światem zewnętrznym

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) 

Więc muszę to użytkownik może wykonywać i przeglądać mydomain.com/login.php ale ot musi być w stanie wykonać mydomain.com/login_handle.php, natomiast login.php i handle_login.php trzymać i może komunikować uzyskać dostęp do siebie nawzajem. Dzięki,

Edit: Niestety ale używam dzielonego hostingu i jest żaden folder inny niż public_html.

+5

przechowywać je poza webroot? – eggyal

+0

Czy pliki php nadal mogłyby się ze sobą komunikować? –

+0

Idealnie, jedyną rzeczą, która powinna być przechowywana w webroot, jest twój router; wszystkie żądania powinny być kierowane do routera i będzie on odpowiedzialny za włączenie kodu znajdującego się poza twoim webrootem. –

Odpowiedz

4

Pierwsze rzeczy, które próbuję:

  1. Move dołączone pliki spoza głównego dokumentu

  2. przesunąć dołączone pliki wewnątrz innego folderu i zabezpieczyć go za pomocą .htaccess. Ewentualnie zmień nazwy plików włączeń na .inc i utwórz na tej podstawie regułę.

  3. Upewnij się, że dołączone pliki nie wyświetlają niczego; nie jest to naprawdę bezpieczne, ale jeśli plik zawiera tylko funkcje, definicje klas itp. bez generowania żadnych wyników, po prostu wyświetlałby pustą stronę.

hackish podejście do tego można dokonać stosując stałe:

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 

Edycja

Podejście nr 2 od góry może być wykonana przez:

  1. Tworzenie katalogu pod public_html np includes/

  2. Przenieś wszystkie pliki, które powinny być zawarte tylko w tym folderze

  3. Dodaj następujący .htaccess wewnątrz:

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

Tak, lubię twoje rozwiązanie. Dzięki, –

+0

Ale żeby to zrobić, muszę napisać stałą w każdej linii, prawda? Czy może istnieć jakieś rozwiązanie htaccess? –

+0

@ user1706482 W tym celu polecam najpierw przenieść wszystkie zawarte pliki do podfolderu. –

1

Spróbuj użyć .htaccess.

Zamiast 127.0.0.1 tego adresu IP należy podać adres IP serwera.

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

Tak, potrzebuję czegoś dokładnie takiego. Ale jak to działa? –

+0

Przejdź do folderu public_html i otwórz plik .htaccess lub utwórz, jeśli nie istnieje. –

+0

Dzięki, twoja odpowiedź jest dokładnie tym, czego potrzebuję. Ale robiąc to pokazuje niedozwolony błąd dla obu typów dostępu, tj. Nie mogę się zalogować, ponieważ podana strona nie może uzyskać dostępu do plików wewnętrznych. –