2 решения для хорошей защиты:
- Apache
с htaccess :
RedirectMatch 404 "\.(sql|sh|java|class|inc\.php)$"
Или в / etc / apache2 / sites-enabled :
<VirtualHost *:80>
#...
RedirectMatch 404 "\.(sql|sh|java|class|inc\.php)$"
#...
</VirtualHost>
Затем назовите свой файл так: myInternalFileIncludeOnly.inc.php
- PHP
С помощью этого примера кода PHP может обнаружить:
if( get_included_files()[0] == __FILE__ ){
echo '2.php direct access';
}else{
echo '2.php was included';
}
EDIT :
Смотрите ответ Тим, так что если у вас есть prepend include (cf php.ini), используйте это:
if(
(!ini_get('auto_prepend_file') && get_included_files()[0] === __FILE__)
||
ini_get('auto_prepend_file') && (($__FILE__=str_replace('\\','/',__FILE__)) === str_replace('\\','/',$_SERVER['DOCUMENT_ROOT'].$_SERVER['SCRIPT_FILENAME']) || $__FILE__ === str_replace('\\','/',$_SERVER['SCRIPT_FILENAME']) )
)
echo '2.php direct access',"\n";