И так, недавно я столкнулся с кодом написанным неким Фрилансером для конторы в которой я работаю. И так, вот кусочек его кода:
<?php if(!$top) $top="top_home.php"; include($top) ?>
Это код обрабатывал ссылку такого типа:
Но, что бы это все работало пришлось в php.ini включить переменную:
а это абсолютно небезопасно, и мы попросили его переделать это, и вот что он сделал:
<?php if(!$_GET[top]) $_GET[top]="top_home.php"; include($_GET[top]) ?>
но это не намного безопасней предыдущего. Например, при помощи вот такого запроса можно просмотреть файлы системы:
Я бы порекомендовал :
1. Используйте fopen()для открытия файлов, сохраняйте в переменную и затем выводите используя print
2. Не используйте include();
3. Проверяйте входящие переменные при помощи регулярных выражений, как пример:
<?php if (ereg("^[a-z]+\.html$", $_GET[cen])) { echo "Good!"; } else { die("Try hacking somebody else's site."); } ?>
4. Сохраняйте в логи всякие попытки взлома или отсылайте уведомления на почту. Вы конечно же не сможете привлечь нарушителя к закону, но вы сможете использовать эту информацию для блокировки данного пользователя.
Минимум необходимых опций для обеспечения безопасности, в php.ini:
enable_dl = Off
expose_php = Off
error_log = /var/log/error_php.log
Вот и все, не совершайте глупых ошибок, и будьте аккуратны