MODx Anti Hacker

Это небольшая наработка защиты от атак на ваш сайт.
Она не спасет вас от 100% атак, но подавляющее большинство атак она отвернёт. 

Установка, создайте плагин с кодом ниже + событие OnWebPageInit
в параметры вставте:

&message=Сообщение;text;Hacker detected!!!!  o,O &white_list=Исключения;textarea;&black_list=черный список;textarea;,!],<script,/**\/,?>,<?,union,select,remove,from,where,on,delete ,$modx,mkdir,unset,query,file,eval,include,require,get_,stac,steam,curl,exec



В данной версии 1.0 
— вынесен чёрный список в параметры
— добавлены имена полей исключений — тех что ненадо фильтровать
— в чёрный список добавлены сочетания ,!]


//<?
/**
 * BAH - (Anti Hacker) created By Bumkaka
 *
 * @category    plugin
 * @version     V 1.0
 * @internal    @events OnWebPageInit
 * @internal  @legacy_names BAH
 * @internal  @installset base, sample
 * @internal  @properties  &message=Сообщение;text;Hacker detected!!!!  o,O &white_list=Исключения;textarea; &black_list=черный список;textarea;,!],<script,/**\/,?>,<?,union,select,remove,from,where,on,delete ,$modx,mkdir,unset,query,file,eval,include,require,get_,stac,steam,curl,exec
 */

$black_list
=explode(',',$black_list);
$white_list
=explode(',',$white_list);
foreach($_POST as $key=>$value){
 
if (!is_array($value)){$_POST[$key]=check($value,$message,$black_list,$white_list,$key);}
 
else {foreach ($value as $key2=>$val){$res[$key2]=check($val,$message,$black_list,$white_list,$key);}
                        $_POST
[$key]=$res;
                        unset
($res);  
                               
}
}

foreach($_GET as $key=>$value){
 
if ($key=='q') {
     $str
= strtolower($value);
   
//Modify Agel_Nash
   
if (strpos($str, "select") !== false && strpos($str, "union") !== false)die($message);
               
continue;  
 
}
   
 
if (!is_array($value)){$_GET[$key]=check($value,$message,$black_list,$white_list,$key);}
 
else {foreach ($value as $key2=>$val){$res[$key2]=check($val,$message,$black_list,$white_list,$key);}
       
                        $_GET
[$key]=$res;
                        unset
($res);  
                               
}
}

function check($str,$message,$black_list,$white_list,$key){
  $str2
= strtolower($str);
 
if (in_array($key,$white_list)) return $str;
 
foreach ($black_list as $word) {
         
if (strpos($str2, $word) !== false) return $message;
 
}
   
return $modx->db->escape($str);
}




Предостережение — этот плагин не имеет влияние на скрипты и плагины выполняемые раньше него — будте осторожны с последовательность выполнения плагинов.

Отправить заявку на создание сайта

Сообщение отправлено