PDA

Показать полную графическую версию : Сообщили о дыре в сайте. Помогите найти.


Angel of death
19-07-2007, 02:33
У меня проблема я подключен к провайдеру по витой паре и у нас есть локальная сеть. У меня имееться сайт в локальной сети. Недавно один человек мне пишет, что есть на сайте уязвимость. Причем именно в коде сайта. Он мне запускал блокнот и выводил листинги файлов на дисках, отличных от дисков сервера. Как можно защититься от подобных атак. ( он мне не чего плогово не зделал, но говарить отказываеться каким образом он меня сломал) Скоро я собираюсь переводить сайт и в интернет, вот я и задумываюсь, как бы чего мне не натворили.

Из скриптов на сайте <?Php
if (@$title=="")
$title="Главная";
print ("<script>
var xzx=navigator.appName;
document.write (\"<title>\"+xzx+\"]]][[[- --::++_:::..$title..:::_++::--]]][[[</title>\");
if ((xzx!==\"Microsoft Internet Explorer\")&&(xzx!==\"Netscape\")&&(xzx!==\"Opera\"))
alert (\"У вас стоит некоректный браузер - \"+xzx+\". Возможно страница не будет отображенна коректно!\");
</script>");
?>


<?php
print ("<h3>--::++_:::..$title..:::_++::--</h3>");
?>
<?php
if (@!$name_pos)
{
print ("
<form action=\"in1.php\" method=\"POST\">
<input type=\"text\" name=\"name\" value=\"Имя\" size=\"10\">
<input type=\"password\" name=\"parol\" value=\"\" size=\"10\"><br>
<input type=\"submit\" value=\"Войти\"><br>
<a href=\"reg.php\">Регистрация</a>
</form>
");
}
else
{
print ("
<a href=\"index.php? &file=spis.php &script=1&title=Пользователи\">Список зарегестрированных пользователей</a>
<hr width=\"90%\">
<div align=\"center\">Ваше имя:</div>
<a href=\"index.php? &file=cab.php&script=1\">$name_pos</a><br>
<div class=\"link\">
<a href=\"exit.php\">
Выйти
</a>
</div>
<br>
");

}
//система регистрации
?>



<?PHP
print ("<a href=\"index.php\">Главная</a>");
$bites = @readfile("ssil1.php");
//ссылки
?>



<?php
$String1 = @strpos("$file", ":");
if ($String1=="")
{
if (@$file=="") $file="standart/index.htm";
if (@$script=="")
{
$bites = @readfile("$file");
}
else
{
$bites = @require("$file");
}
if (!$bites)
print ("<h3><div align=\"center\">Данный раздел не работает по техническим причинам.Просим прощения за неудобства.</div></h3>");
}
else
print ("<h1>Куда лезем?</h1>");
//основное содержание
?>

Как защетить сайт от взлома?

XCodeR
19-07-2007, 10:58
$bites = @require("$file");
здесь может быть... потенциальный хакер через урл задает знаечние переменной $files и усе... подключается нужные ему срипт.
не используйте открытые переменные. Есть массивы $_GET, $_POST, $_SESSION, $_GLOBALS и т.д.

Prisoner
19-07-2007, 11:16
Есть массивы $_GET, $_POST, $_SESSION, $_GLOBALS и т.д.
Которые в данном случае, согласись, не панацея - их значения также можно подделать.
Angel of death, XCodeR прав - как минимум одна дырка есть. Сделайте следующее - создайте механизм проверки и фильтрации допустимых значение переменной $file. К примеру руками набейте массив всех значений которые может принимать эта переменная и перед инклюдом проверяйте: то, что в $file (или $_GET['file'] если угодно) есть ли в массиве дозволенных значений? Нет? Атака!

Массив дозволенных значений можно формировать как руками, так и автоматически, если потенциально включаемых файлов у Вас много.

rus-4-ever
28-07-2007, 21:29
Есть массивы $_GET, $_POST, $_SESSION, $_GLOBALS и т.д. Которые в данном случае, согласись, не панацея - их значения также можно подделать.
Извините, сейчас меня поставили немного в тупик... с массивом GET всё понятно... а как остальное подделать??? точнее массив Session??? Он ведь вроде на сервере хранится, и что можно сделать для защиты от подделок?

XCodeR
28-07-2007, 22:45
rus-4-ever
$Session - массив переменных переданных по сессии.

Prisoner
29-07-2007, 03:25
Да, SESSION тут более защищен - я просто процитировал весь список полностью не заметив возникнувшей неточности. К вопросу "более защищен" - можно украсть идентификатор сессии, к примеру, прослушивая канал клиент-сервер. Защитой может выступить шифрование канала силами SSL.




© OSzone.net 2001-2012