Хотел бы поинтересоваться ибо когда то видел как ламают сайты через поисковик еще давненько.. типа через отображение запроса проводили атака в самом сайте. Скачал я какойто скрипт под названием 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.
Неужели? Можно записать любое содержимое в файл через специально сформированный УРЛ. PHP: $home = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $_SERVER['REQUEST_URI'] - никак не фильтруется, подделать очень просто:
Записать в файл можно всё что угодно, но т.к. файл не html и не php, то записанный контент не выполнится (по дефолту) => не повредит ничему
Ну тогда давайте будем позволять пользователю записывать в файл (html), что попало, и попросим чтобы на ачате включили HTML, ибо это "не повредит ничему"
Что значит по дефолту? Откуда ты знаешь какие дефолтные настройки сервака? Не надо быть столь увереным. Если включен модуль mod_mime то пхп скрипт с любим расширением выполнится как пхп
+ к этому локальный инклуд... или вдруг есть скрипт который читает этот лог, как минимум раскрытие информации о сервере )
эмм,продимонстрируй плз я лично не догадуюсь,вот если б код имел такой вид: PHP: $xek=$_GET['tratata']); echo $xek; то PHP: ?tratata=phpinfo(); вобщем с интересом взгляну,да и новое для себя узнаю. и по сабжу: вышеприведенный скрипт будет работать если регистр_глобал он потому как: $ip = $REMOTE_ADDR;
Code: http://evilsite.ru/evilscript.php?<?phpinfo()?> В файл запишется Code: evilsite.ruevilscript.php?<?phpinfo()?>
L I G A, ппц, бред ты написал во-первых ну и что тебе это даст? выведет надпись "phpinfo()" ?)) Вовторых Димич говорит про $_SERVER['REQUEST_URI']; , её изменить то проблем не возникнет
Spyder да ты прав как то не заметил, там надо: <?php $xek=eval($_GET['tratata']); echo $xek; ?> ну да ладно а $_SERVER['REQUEST_URI']; выводит путь после ....php? [тут] ???
L I G A, неужели трудно сделать PHP: 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 ммм тот пример что ты дал совсем не в тему =) он написал ниже тоесть еси в файл будет записан пхп код (а он будет) то ппри обращении к файлу он выполнится
Зачем новый? Cначала впиши $bot = ""; И пропусти $_SERVER['REQUEST_URI']; через тот же htmlspecialchars()
Люди я знаю что вы все знаете. ) Как быть ? Хочу безопасный код. Вы тут пишет что куда и как... и понимаю лиш половину того что вы пишите. и понимаю что он не безопасен. Так как быть ? Это как ? Спасибо.
Как-то так: PHP: <? $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); } ?>