Просмотр полной версии : Безопасность кода ? Вот сам сурс Seobot
Хотел бы поинтересоваться ибо когда то видел как ламают сайты через поисковик еще давненько.. типа через отображение запроса проводили атака в самом сайте.
Скачал я какойто скрипт под названием 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 ?
Может поставить фильтрацию ? но там же надо что бы слеши были... а я опять в этих Регулярках ничо не понимаю..
Ну что бы все пропускало кроме кавычек или еще там чего ..
Вообщем просто хочу совета.
В данном коде, если включен register_globals можно перезаписать переменную $bot, тем самым писать что угодно тебе в файл sebot, насколько это опасно решать тебе....
Чтобы исправить перед первым if'ом напиши $bot = ""; А лучше переписать все через switch case default.
Код абсолютно безопасен. Не заморачивайся так на этом
Неужели?
Можно записать любое содержимое в файл через специально сформированный УРЛ.
$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, ибо это "не повредит ничему"
Записать в файл можно всё что угодно, но т.к. файл не html и не php, то записанный контент не выполнится (по дефолту) => не повредит ничему
Что значит по дефолту? Откуда ты знаешь какие дефолтные настройки сервака?
Не надо быть столь увереным. Если включен модуль mod_mime то пхп скрипт с любим расширением выполнится как пхп :)
+ к этому локальный инклуд... или вдруг есть скрипт который читает этот лог, как минимум раскрытие информации о сервере )
Неужели?
Можно записать любое содержимое в файл через специально сформированный УРЛ.
$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 то пхп скрипт с любим расширением выполнится как пхп
L I G A, ппц, бред ты написал
во-первых
$xek=$_GET['tratata']);
echo $xek;
?tratata=phpinfo();
ну и что тебе это даст? выведет надпись "phpinfo()" ?))
вышеприведенный скрипт будет работать если
регистр_глобал он
потому как:
$ip = $REMOTE_ADDR;
Вовторых Димич говорит про $_SERVER['REQUEST_URI']; , её изменить то проблем не возникнет
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()?> и открой.
L I G A, неужели трудно сделать
echo $_SERVER['REQUEST_URI'];
P.S. http://localhost/test3.php?a=b
/test3.php?a=b
Посоветуйте тогда какой нибуть скрипт для выводе реферов ? т.е я хочу что бы был вывод откуда пришол пользователь или где лазил Бот. Только безопасный если кто знает. Я просто не хочу на сервак ставить все попало что бы потом не окозаться без сайта и данных в 1 прекрасный день ..
Вот нашол еще 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);
?>
Этот безопасный ? ..
L I G A ммм тот пример что ты дал совсем не в тему =)
он написал ниже
Если включен модуль mod_mime то пхп скрипт с любим расширением выполнится как пхп
тоесть еси в файл будет записан пхп код (а он будет) то ппри обращении к файлу он выполнится
Зачем новый? Cначала впиши $bot = "";
И пропусти $_SERVER['REQUEST_URI']; через тот же htmlspecialchars()
Зачем новый? Cначала впиши $bot = "";
И пропусти $_SERVER['REQUEST_URI']; через тот же htmlspecialchars()
Люди я знаю что вы все знаете. )
Как быть ?
Хочу безопасный код. Вы тут пишет что куда и как... и понимаю лиш половину того что вы пишите. и понимаю что он не безопасен. Так как быть ?
впиши $bot = "";
И пропусти $_SERVER['REQUEST_URI']; через тот же htmlspecialchars()
Это как ?
Спасибо.
Как-то так:
<?
$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);
}
?>
Записать в файл можно всё что угодно, но т.к. файл не html и не php, то записанный контент не выполнится (по дефолту) => не повредит ничему
Кури матчасть про локал-инклюд.
FireFenix
Мда.. отныне кури матчасть 2 раза.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot