Php несколько простых примеров не безопасного кода

И так, недавно я столкнулся с кодом написанным неким Фрилансером для конторы в которой я работаю. И так, вот кусочек его кода:

<?php
if(!$top)
$top="top_home.php";
include($top)
?>

Это код обрабатывал ссылку такого типа:

www.server.com/index.php?top=page.php

Но, что бы это все работало пришлось в php.ini включить переменную:

register_globals = On

а это абсолютно небезопасно, и мы попросили его переделать это, и вот что он сделал:

<?php
if(!$_GET[top])
$_GET[top]="top_home.php";
include($_GET[top])
?>

но это не намного безопасней предыдущего. Например, при помощи вот такого запроса можно просмотреть файлы системы:

www.server.com/index.php?top=/etc/passwd

Я бы порекомендовал :

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:

allow_url_fopen = Off
enable_dl = Off
expose_php = Off
error_log = /var/log/error_php.log

Вот и все, не совершайте глупых ошибок, и будьте аккуратны

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>