Mogę polecić mały patent na zabezpieczenie się przed wypadkiem gdy administrator dopuści wyświetlanie plików, niestety ma on pewne wymagania co do konfiguracji serwera... ale po kolei:
1. Zakładamy że nasza strona to: www.strona.gdzies.pl. Na serwrze zalega ona w katalogu /home/www/strona, w tym miejscu umieszczamy jedyny skrypt:[php:1:1c496d231e]<?php
include "loader.php";
?>[/php:1:1c496d231e]
2. Zmieniamy ustawienia php lub tworzymy plik .htaccess tak aby zmodyfikować include_path:
Kod
AddType application/x-httpd-php .html .php .inc
DirectoryIndex index.php index.html
php_value include_path '/home/www/strona/include'
Metoda z plikiem .htaccess może też zabezpieczyć nas przed ewentualnymi błędami admina - sami w naszym serwisie wymuszamy parsowanie php dla wszystkich potencjalnych rozszerzeń
2. Tworzymy katalog /home/www/strona/include (aby zaciemnic warto nazwać go np inclooooode - w najprostszy sposób zapewni to całkiem sporo ochrony przed googlarzami)
3. Katalog zabezpieczamy przed odczytem - można to zrobić albo w konfigu apache albo plikiem .htaccess (w katalogu /home/www/strona/include):
Kod
Order Deny,Allow
Deny from all
4. Aktywujemy mod_rewrite w apache z następującą konfiguracją:
Kod
RewriteEngine On
rewriteRule ^/([a-z]+).html(.*)$ /index.php?pp=$1 [QSA,L]
Będzie to zmieniało każde wywowałanie z postaci np. /strona.html na /index.php?pp=strona. Przyjęte zostaną wywołania tylko plików z rozszerzeniem html składające się z liter - wszystkie inne zostaną potraktowane przez Error404. Oczywiście można rewriteRule skonstruować zupełnie inaczej, stosowanie do swoich potrzeb. Tutaj podałem tylko najprostszy przykład.
4. Tworzymy plik loader.php w katalogu /home/www/strona/include [php:1:1c496d231e]<?php
$pages_dir="/home/www/strona/include/pages/"
if (!isset($_GET['pp'])) {
$page='index';
} else {
$page=$_GET['pp'];
}
$file=$pages_dir.$page.'.php';
if (file_exists($file)) {
include $file;
} elseif (file_exists($pages_dir.'index.php')) {
include $pages_dir.'index.php';
}
?>[/php:1:1c496d231e]
5. W katalogu /home/www/strona/include/pages/ umieszczamy właściwy kod naszych stron nazywany index.php, strona.php itd....
W przykładzie katalog include znajduje się w obszarze DocumentRoot apache, najlepiej jest jednak wynieść go za ten obszar tak aby przykładowo miec strukturę:
/home/www/strona/root/ <- tutaj znajdzie się index.php z odniesieniem do loader.php i to jest Ustawione jako DocumentRoot
/home/www/strona/include/ <- To jest katalog ustawiany jako include dla php