PDA

Просмотр полной версии : Безопасность кода ? Вот сам сурс Seobot


Adio
16.07.2009, 04:31
Хотел бы поинтересоваться ибо когда то видел как ламают сайты через поисковик еще давненько.. типа через отображение запроса проводили атака в самом сайте.

Скачал я какойто скрипт под названием Seobot

Который отображает сприсо страниц и какой бот посетил

вот сам seobot



<?
if ( strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex') ) { $bot='Yandex';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot') ) {$bot='Google';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'Slurp') ) {$bot='Slurp';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'WebCrawler') ) {$bot='WebCrawler';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'ZyBorg') ) {$bot='ZyBorg';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'google') ) {$bot='Google';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'scooter') ) {$bot='AltaVista';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'stack') ) {$bot='Rambler';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'aport') ) {$bot='Aport';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'lycos') ) {$bot='Lycos';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'fast') ) {$bot='Fast Search';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'rambler') ) {$bot='Rambler';}
if($bot !="") {
$ip = $REMOTE_ADDR;
$date = date("d.m.Y");
$home = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$fh = fopen('sebot', "r");
$fil = fread($fh, filesize('sebot'));
fclose($fh);
$con=$date.":::".$bot.":::".$ip.":::".$home."::: \r\n".$fil;
$file=fopen("sebot","w");
fputs($file, $con);
fclose($file);
}
?>


Хотел просить безопасный ли этот код. т.е если пооделать запрост и он отобразит к примеру ковычки или инлюд какой или xss ?


Может поставить фильтрацию ? но там же надо что бы слеши были... а я опять в этих Регулярках ничо не понимаю..

Ну что бы все пропускало кроме кавычек или еще там чего ..

Вообщем просто хочу совета.

n0reply
16.07.2009, 08:19
В данном коде, если включен register_globals можно перезаписать переменную $bot, тем самым писать что угодно тебе в файл sebot, насколько это опасно решать тебе....

Чтобы исправить перед первым if'ом напиши $bot = ""; А лучше переписать все через switch case default.

Dimi4
16.07.2009, 11:16
Код абсолютно безопасен. Не заморачивайся так на этом
Неужели?
Можно записать любое содержимое в файл через специально сформированный УРЛ.
$home = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$_SERVER['REQUEST_URI'] - никак не фильтруется, подделать очень просто:

/script.php?a=<?php eval('ls -la'); ?>

FireFenix
16.07.2009, 11:33
Неужели?
Можно записать любое содержимое в файл через специально сформированный УРЛ.
$home = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

Записать в файл можно всё что угодно, но т.к. файл не html и не php, то записанный контент не выполнится (по дефолту) => не повредит ничему

erihtoney
16.07.2009, 11:47
Записать в файл можно всё что угодно, но т.к. файл на html и не php, то записанный контент не выполнится (по дефолту) => не повредит ничему
Ну тогда давайте будем позволять пользователю записывать в файл (html), что попало, и попросим чтобы на ачате включили HTML, ибо это "не повредит ничему"

Dimi4
16.07.2009, 11:59
Записать в файл можно всё что угодно, но т.к. файл не html и не php, то записанный контент не выполнится (по дефолту) => не повредит ничему
Что значит по дефолту? Откуда ты знаешь какие дефолтные настройки сервака?
Не надо быть столь увереным. Если включен модуль mod_mime то пхп скрипт с любим расширением выполнится как пхп :)

Gar|k
16.07.2009, 12:14
+ к этому локальный инклуд... или вдруг есть скрипт который читает этот лог, как минимум раскрытие информации о сервере )

L I G A
16.07.2009, 12:18
Неужели?
Можно записать любое содержимое в файл через специально сформированный УРЛ.
$home = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$_SERVER['REQUEST_URI'] - никак не фильтруется, подделать очень просто:
эмм,продимонстрируй плз я лично не догадуюсь,вот если б код имел такой вид:

$xek=$_GET['tratata']);
echo $xek;


то

?tratata=phpinfo();
вобщем с интересом взгляну,да и новое для себя узнаю.
и по сабжу:
вышеприведенный скрипт будет работать если
регистр_глобал он
потому как:
$ip = $REMOTE_ADDR;

mailbrush
16.07.2009, 12:25
http://evilsite.ru/evilscript.php?<?phpinfo()?>
В файл запишется evilsite.ruevilscript.php?<?phpinfo()?>Если включен модуль mod_mime то пхп скрипт с любим расширением выполнится как пхп

Spyder
16.07.2009, 12:42
L I G A, ппц, бред ты написал
во-первых
$xek=$_GET['tratata']);
echo $xek;

?tratata=phpinfo();
ну и что тебе это даст? выведет надпись "phpinfo()" ?))
вышеприведенный скрипт будет работать если
регистр_глобал он
потому как:
$ip = $REMOTE_ADDR;
Вовторых Димич говорит про $_SERVER['REQUEST_URI']; , её изменить то проблем не возникнет

L I G A
16.07.2009, 12:50
Spyder да ты прав как то не заметил,
там надо:
<?php
$xek=eval($_GET['tratata']);
echo $xek;
?>

ну да ладно
а $_SERVER['REQUEST_URI']; выводит путь после ....php? [тут]
??? :confused:

mailbrush
16.07.2009, 13:09
Создай у себя файлик test.php, впиши в него evilsite.ruevilscript.php?<?phpinfo()?> и открой.

Dimi4
16.07.2009, 13:11
L I G A, неужели трудно сделать
echo $_SERVER['REQUEST_URI'];
P.S. http://localhost/test3.php?a=b
/test3.php?a=b

Adio
16.07.2009, 14:28
Посоветуйте тогда какой нибуть скрипт для выводе реферов ? т.е я хочу что бы был вывод откуда пришол пользователь или где лазил Бот. Только безопасный если кто знает. Я просто не хочу на сервак ставить все попало что бы потом не окозаться без сайта и данных в 1 прекрасный день ..

Adio
16.07.2009, 15:07
UP

Adio
16.07.2009, 15:08
Вот нашол еще 1 LOG REFFER


<?php


// file where referrals are stored, change if you wish
$file = "refers.txt";

// if set to 1 IPs will be logged and associated with the URL they were referred by
$log_ip = 0;

//////////////////// NO NEED TO EDIT BELOW ////////////////////

$referer = (!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] == '') ? 'an unknown url/direct access (typing in URL)' : $_SERVER['HTTP_REFERER'];
$ip = ($log_ip == 1) ? $_SERVER['REMOTE_ADDR'] : false;
$time = date('d F Y');
$user_text = ($log_ip == 1) ? "On {$time} {$ip}" : "On {$time} a user";
$refer_text = "{$user_text} was referred by {$referer}";
$fp = fopen($file, 'a');
fwrite($fp, "{$refer_text}\n");
fclose($fp);

?>

Этот безопасный ? ..

Doom123
16.07.2009, 17:13
L I G A ммм тот пример что ты дал совсем не в тему =)

он написал ниже

Если включен модуль mod_mime то пхп скрипт с любим расширением выполнится как пхп

тоесть еси в файл будет записан пхп код (а он будет) то ппри обращении к файлу он выполнится

Dimi4
16.07.2009, 17:19
Зачем новый? Cначала впиши $bot = "";
И пропусти $_SERVER['REQUEST_URI']; через тот же htmlspecialchars()

Adio
16.07.2009, 20:44
Зачем новый? Cначала впиши $bot = "";
И пропусти $_SERVER['REQUEST_URI']; через тот же htmlspecialchars()

Люди я знаю что вы все знаете. )

Как быть ?

Хочу безопасный код. Вы тут пишет что куда и как... и понимаю лиш половину того что вы пишите. и понимаю что он не безопасен. Так как быть ?

впиши $bot = "";
И пропусти $_SERVER['REQUEST_URI']; через тот же htmlspecialchars()

Это как ?

Спасибо.

n0reply
16.07.2009, 20:55
Как-то так:

<?
$bot = "";
if ( strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex') ) { $bot='Yandex';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot') ) {$bot='Google';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'Slurp') ) {$bot='Slurp';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'WebCrawler') ) {$bot='WebCrawler';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'ZyBorg') ) {$bot='ZyBorg';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'google') ) {$bot='Google';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'scooter') ) {$bot='AltaVista';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'stack') ) {$bot='Rambler';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'aport') ) {$bot='Aport';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'lycos') ) {$bot='Lycos';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'fast') ) {$bot='Fast Search';}
elseif ( strstr($_SERVER['HTTP_USER_AGENT'], 'rambler') ) {$bot='Rambler';}
if($bot !="") {
$ip = $REMOTE_ADDR;
$date = date("d.m.Y");
$home = $_SERVER['HTTP_HOST'] . htmlspecialchars($_SERVER['REQUEST_URI']);
$fh = fopen('sebot', "r");
$fil = fread($fh, filesize('sebot'));
fclose($fh);
$con=$date.":::".$bot.":::".$ip.":::".$home."::: \r\n".$fil;
$file=fopen("sebot","w");
fputs($file, $con);
fclose($file);
}
?>

diehard
16.07.2009, 22:14
Записать в файл можно всё что угодно, но т.к. файл не html и не php, то записанный контент не выполнится (по дефолту) => не повредит ничему
Кури матчасть про локал-инклюд.

diehard
17.07.2009, 01:20
FireFenix

Мда.. отныне кури матчасть 2 раза.