1: Sprawdzanie liczby dołączonych plików
if( count(get_included_files()) == ((version_compare(PHP_VERSION, '5.0.0', '>='))?1:0) )
{
exit('Restricted Access');
}
Logika: PHP kończy pracę, jeśli minimalna liczba dołączeń nie zostanie osiągnięta. Zauważ, że przed PHP5, strona bazowa nie jest uwzględniana.
2: Definiowanie i weryfikacja stałej globalnej
// In the base page (directly accessed):
define('_DEFVAR', 1);
// In the include files (where direct access isn't permitted):
defined('_DEFVAR') or exit('Restricted Access');
Logika: Jeśli stała nie jest zdefiniowana, wykonanie nie rozpoczyna się od strony bazowej, a PHP przestaje działać.
Należy pamiętać, że ze względu na przenośność w ramach uaktualnień i przyszłych zmian, uczynienie tej metody uwierzytelniania modułową znacznie zmniejszyłoby obciążenie związane z kodowaniem, ponieważ zmiany nie będą musiały być zakodowane na stałe w każdym pliku.
// Put the code in a separate file instead, say 'checkdefined.php':
defined('_DEFVAR') or exit('Restricted Access');
// Replace the same code in the include files with:
require_once('checkdefined.php');
W ten sposób można dodać dodatkowy kod do checkdefined.php
logowania i celów analitycznych, a także do generowania odpowiednich odpowiedzi.
Kredyt jest należny: z tej odpowiedzi zrodził się genialny pomysł przenośności .
3: Zdalna autoryzacja adresu
// Call the include from the base page(directly accessed):
$includeData = file_get_contents("http://127.0.0.1/component.php?auth=token");
// In the include files (where direct access isn't permitted):
$src = $_SERVER['REMOTE_ADDR']; // Get the source address
$auth = authoriseIP($src); // Authorisation algorithm
if( !$auth ) exit('Restricted Access');
Wadą tej metody jest izolowane wykonywanie, chyba że token sesji jest dostarczany z wewnętrznym żądaniem. Zweryfikuj za pomocą adresu sprzężenia zwrotnego w przypadku konfiguracji z pojedynczym serwerem lub białej listy adresów dla infrastruktury wieloserwerowej lub serwera o zrównoważonym obciążeniu.
4: Autoryzacja tokena
Podobnie jak w przypadku poprzedniej metody, można użyć GET lub POST, aby przekazać token autoryzacyjny do pliku dołączanego:
if($key!="serv97602"){header("Location: ".$dart);exit();}
Bardzo skomplikowana metoda, ale być może jednocześnie najbardziej bezpieczna i wszechstronna, jeśli jest używana we właściwy sposób.
5: Konfiguracja specyficzna dla serwera WWW
Większość serwerów umożliwia przypisywanie uprawnień do poszczególnych plików lub katalogów. Możesz umieścić wszystkie swoje dołączenia w takich ograniczonych katalogach i skonfigurować serwer tak, aby je odrzucał.
Na przykład w APACHE konfiguracja jest przechowywana w .htaccess
pliku. Samouczek tutaj .
Zauważ jednak, że konfiguracje specyficzne dla serwera nie są przeze mnie zalecane, ponieważ są złe dla przenośności między różnymi serwerami internetowymi. W przypadkach takich jak systemy zarządzania treścią, w których algorytm odmowy jest złożony lub lista odrzuconych katalogów jest dość duża, może to tylko sprawić, że sesje rekonfiguracji będą raczej makabryczne. W końcu najlepiej załatwić to w kodzie.
6: Umieszczanie załączników w bezpiecznym katalogu POZA katalogu głównym serwisu
Najmniej preferowane ze względu na ograniczenia dostępu w środowiskach serwerowych, ale jest to dość skuteczna metoda, jeśli masz dostęp do systemu plików.
//Your secure dir path based on server file-system
$secure_dir=dirname($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR."secure".DIRECTORY_SEPARATOR;
include($secure_dir."securepage.php");
Logika:
- Użytkownik nie może zażądać żadnego pliku spoza
htdocs
folderu, ponieważ łącza znajdowałyby się poza zakresem systemu adresowego serwisu WWW.
- Serwer php uzyskuje dostęp do systemu plików w sposób natywny, a zatem może uzyskiwać dostęp do plików na komputerze, tak jak zwykły program z wymaganymi uprawnieniami.
- Umieszczając pliki nagłówkowe w tym katalogu, możesz zapewnić, że serwer php uzyska do nich dostęp, podczas gdy hotlinkowanie jest zabronione dla użytkownika.
- Nawet jeśli konfiguracja dostępu do systemu plików serwera WWW nie została wykonana poprawnie, ta metoda zapobiegnie przypadkowemu upublicznieniu tych plików.
Proszę wybaczyć moje niekonwencjonalne konwencje kodowania. Wszelkie uwagi są mile widziane.