SerVal - бесплатная система безопасности сайтов

1 234
rklending
На сайте с 24.02.2016
Offline
100
#31
totamon:
судя по постам в разделе все к этому идет))
SeVlad, ты всех собирателей мыл и другой инфы решил вывести на чистую воду, или только этих? какой ответ ты ждешь? ты ж знаком с доктором Хаусом - "все врут" 😂 и врут не всегда, чтобы обмануть или скрыть что-то...
зы. главное чтобы в навязчивый маркетинг не опустились... мне на днях письмо от одной конторы пришло "Вы скачивали наш скрипт, но все еще не установили его, может вам помочь?" и как это понимать?))

Как как... заботятся ☝

D
На сайте с 05.10.2005
Offline
104
#32
totamon:
судя по постам в разделе все к этому идет))
SeVlad, ты всех собирателей мыл и другой инфы решил вывести на чистую воду, или только этих? какой ответ ты ждешь? ты ж знаком с доктором Хаусом - "все врут" 😂 и врут не всегда, чтобы обмануть или скрыть что-то...
зы. главное чтобы в навязчивый маркетинг не опустились... мне на днях письмо от одной конторы пришло "Вы скачивали наш скрипт, но все еще не установили его, может вам помочь?" и как это понимать?))

Нет, мы 100% не хотим никому ничего рассылать, а SeVlad меня практически убедил, что смысла в регистрациях нет, так что, через неделю, быстрее всего, скачать можно "без регистраций и смс" =)

А по поводу опасений в вебшелле, единственный - скрипт-сканер, который кладется на наблюдаемые сайты. Сейчас наш программист его подробно откомментрует и я выложу для успокоения. Может приз объявить за поиск шелла в SerVal? :)

Alex Klo
На сайте с 15.06.2006
Offline
304
#33

в скачанном архиве отсутствует install.txt

особо интересует то, что должно предшествовать запуску install.php ввиду

DrJeans:
Сильно удивлён был, что систему нужно разворачивать как отдельный, самостоятельный сайт, а не в корне подопечного сайта
dimases:
Сама система SerVal разворачивается на отдельном аккаунте, например, в поддомене serval.moisite.ru и в ней заводятся все проекты

зачем мне отдельный аккаунт, если я на своём аккаунте могу создать отдельный сайт на домене или поддомене?

dimases:
система работает с ЧПУ, поэтому ей нужен либо корень, либо насадки в реврайте.

а каталог сайта со своим .htaccess и реврайтом не подойдет?

Проверка и мониторинг позиций сайта ( http://www.topvisor.ru/?inv=1520 ) Продвигаю сайты http://climat-nw.ru/conditioner-installation/ http://www.aircom-spb.ru/service/montaj/
SeVlad
На сайте с 03.11.2008
Offline
1609
#34
totamon:
судя по постам в разделе все к этому идет))

не сыпь мне соль.. читаю и плачу. :( (заметил насколько редко я стал отвечать? Не на что ж.. А матом низзя. Но радует, что с форума не все грамотные ещё разбежались. А иногда и новые появляются. Это вселяет надежду ;))

totamon:
ты ж знаком с доктором Хаусом

Не, хто это ? :) (конечно я знаю что это за персонаж, но это "искусство" не для меня)

totamon:
ты всех собирателей мыл и другой инфы решил вывести на чистую воду, или только этих

Да хотя бы умерить пыл любителей.. Взяли моду - то мыла, то телефоны на каждом ГСе углу спрашивать, то домены по паспорту... Вливая в уши дурачкам - "это всё для вашей безопасности".. И ведь не только ведутся, но и начинают лечить - не гони на хороших людей... ппц просто какой-то. Сами же себе могилу роем и удивляемся - "а чегойто нас имеют везде, где нипопадя".

Глобальное потупление :(

totamon:
и как это понимать?

Вот-вот.. подумать стоит.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
D
На сайте с 05.10.2005
Offline
104
#35
Alex Klo:
в скачанном архиве отсутствует install.txt
особо интересует то, что должно предшествовать запуску install.php ввиду

В нем должна быть инструкция по установке? По-моему, все и так ясно. В следующий релиз добавим.

Alex Klo:

зачем мне отдельный аккаунт, если я на своём аккаунте могу создать отдельный сайт на домене или поддомене?

Аккаунтом я назвал дисковое пространство, в котором размещаются файлы системы. Он должен, по дефолту, корневым по http. А как это будет устроенно у вас - не имеет значение.

Alex Klo:

а каталог сайта со своим .htaccess и реврайтом не подойдет?

Если перепишите правила в .htaccess - конечно подойдет. Вся адресация там относительно корня идет.

D
На сайте с 05.10.2005
Offline
104
#36

Файл /data/Scanner.php из которого потом создается serval-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.php, размещаемый на наблюдаемых ресурсах - это непосредственный скрипт сканирования файловой структуры.


<?
{[copyright]}

ini_set('display_errors', 'Off');
ini_set('track_errors', 1);
ini_set('memory_limit','100M');
error_reporting(0);
set_time_limit(300);

register_shutdown_function('serval_shutdown_func');

/* Класс сканера */
Class Scanner{
var $log = array(
'scan'=>array(), /* Массив папок, которых просканировали */
'dir'=>array(), /* Массив папок, которые в очереди */
'file'=>array() /* Массив информации о файлах (Имя, Размер, Хеш, Вложенность, Папка) */
);
var $ext = false; /* Массив расширений файлов для сканирования */
var $exc = false; /* Массив папок, которые нужно исключить */
var $excf = false; /* Массив файлов, которые нужно исключить */
var $rootDir = ''; /* Root папка */
var $dirId = 1; /* Счетчик */
var $version = 1.6; /* Версия сканера */
var $maxDir = 100; /* Максимальное кол-во папок за раз по умолчанию */
var $isTest = false;

function run($param = array()){
if(!is_array($param) || empty($param['path'])){
return array("status"=>'error','version'=>$this->version,'msg'=>"Ошибка передачи данных");
}
$param['path'] = $this->fixPath(($param['path'] === '.' ? $_SERVER['DOCUMENT_ROOT'] : $param['path']));

/* Максимальное кол-во папок */
if($param['dirMax']>0){
$this->maxDir = $param['dirMax'];
}
/* Если это тест */
if($param['is_test']=="yes"){
$this->isTest = true;
}

if(is_dir($param['path'])){
if(is_array($param['ext']) && count($param['ext'])>0){
foreach($param['ext'] as $v){
$v = trim($v);
if(!empty($v)){
$this->ext[] = $v;
}
}
}
$this->ext = (is_array($param['ext']) && count($param['ext'])>0) ? $param['ext'] : false;

if(is_array($param['exc']) && count($param['exc'])>0){
foreach($param['exc'] as $v){
$v = trim($v);
if(!empty($v)){
$dir = $param['path'].'/'.$v.'/';
$this->exc[] = $this->fixPath($dir,false);
}
}
}
$this->excf = (is_array($param['excf']) && count($param['excf'])>0) ? $param['excf'] : false;
if(is_array($param['excf']) && count($param['excf'])>0){
foreach($param['excf'] as $v){
$v = trim($v);
if(!empty($v)){
$this->excf[] = $this->fixPath($param['path'].'/'.$v,false);
}
}
}


$this->rootDir = $param['path'];
/* Если передали папки, которые нужно просканировать (шаги) */
if(is_array($param['listDir']) && count($param['listDir'])>0){
foreach($param['listDir'] as $val){
if(!empty($val)){
$this->dirId++;
$this->log['dir'][$this->dirId] = $val;
$this->find($val['path'],$this->dirId,($val['level']+1));
}
}
}else{
$this->find($param['path'],$this->dirId);
}
return array("status"=>'ok','dirMax'=>$this->maxDir,'version'=>$this->version,'log'=>$this->log);
}else{
return array("status"=>'error','version'=>$this->version,'msg'=>"Ошибка! root папка не доступна!");
}
}

/*
Метод сканирует папку
*/
function find($path,$dirId,$i=0){
if(count($this->log['scan'])>=$this->maxDir) return false; /* Максимум, который можно просканировать */
if($i>100) return false; /* Если большая вложенность */

$path = $this->fixPath($path.'/');
$fixPath = $this->fixPath($path.'/',false);

/* Читаем папку */
$list = glob($path."{.*,*}",GLOB_BRACE);
if(isset($this->log['dir'][$dirId])){
$this->log['scan'][$dirId] = $this->log['dir'][$dirId];
}
unset($this->log['dir'][$dirId]);
if(count($list)>0){
foreach($list as $val){
$pathInfo = pathinfo($val);
if($pathInfo['basename'] === '.' || $pathInfo['basename'] === '..' || is_link($val)) continue;
if($this->exc && in_array($val.'/',$this->exc) ) continue;

if(is_dir($val)){
$PathName = $this->fixPath($pathInfo['dirname'].'/'.$pathInfo['basename'].'/',false);
if(empty($PathName)) continue;
if($this->skip($this->fixPath($pathInfo['dirname'].'/'.$pathInfo['basename'].'/'),$this->exc)) continue;

$this->dirId++;
$this->log['dir'][$this->dirId] = array('path'=>$PathName,'level'=>$i);
if(!$this->isTest){
$this->find($val,$this->dirId,($i+1));
}
}

if(is_file($val)){
if(!$this->ext || in_array(".".$pathInfo['extension'],$this->ext)){

if($this->skip($val,$this->excf)) continue;

$this->log['file'][] = array(
'dirId'=>$dirId,
'level'=>$i,
'name'=>$pathInfo['basename'],
'size'=>filesize($val),
'hash'=>$this->hashFile($val),
);
}
}
unset($pathInfo);
}
}
unset($list);
}

/*
FIX пути папки
*/
function fixPath($val,$root = true){
$val = $this->rootDir.'/'.str_replace($this->rootDir,"/",$val);
if(!$root){ /* Удаляем рутовую директорию */
$val = '/'.str_replace($this->rootDir,"/",$val);
}
return preg_replace('~[\/]+~u','/',$val);
}

/*
Метод получает хеш сумму файла
*/
function hashFile($file){
$hash = false;
if (function_exists('hash_file')) {
$hash = @hash_file('md5', $file);
} elseif(function_exists('md5_file')) {
$hash = @md5_file($file);
} else {
if($c = file_get_contents($file)){
$hash = md5($c);
unset($c);
}
}
return $hash ? $hash : -1;
}

/*
Метод обработки исключений
*/
function skip($str_in,$exc){
if(is_array($exc) && count($exc)>0){
foreach($exc as $str){
$str = preg_quote("[{$str}]","#");
$str = str_replace("\*","(.*)",$str);
if(preg_match("#^({$str})#","[".$str_in."]",$matches)){
return true;
}
}
}
return false;
}

}

/* Класс кодирования */
Class BritCrypt{
var $key = null;
var $encodingIn = 'UTF-8';
var $encodingOut = 'CP866';
var $stb = 63;
var $type = 'default';

/* Кодирование */
function encrypt($string=''){
if(empty($this->key)) return false;
if($this->type=="lite"){
return $this->crypt_lite($string);
}else{
$keyw = $this->calculateKeyw($string);
$Len = mb_strlen($string, $this->encodingIn);

$result = '';
for ($i = 0; $i < $Len; $i++) {
$char = mb_substr($string, $i, 1, $this->encodingIn);
$ord = ord(iconv($this->encodingIn, $this->encodingOut, $char));
$char = chr(($ord - $this->stb) ^ $keyw[$i]);
$result.= iconv($this->encodingOut, $this->encodingIn, $char);
}
unset($string);
return $result;
}
}


function calculateKeyw($pass){
$keyw = array();
$lenPass = mb_strlen($pass, $this->encodingIn);
$lenKey = mb_strlen($this->key, $this->encodingIn);
for ($i = 1; $i <= $lenPass; $i++) {
if ($lenKey < $lenPass) {
$j = $i % $lenKey;
if ($j === 0) {
$j = $lenKey;
}
} else {
$j = $i;
}

$keyw[] = ord(mb_substr($this->key, $j - 1, 1, $this->encodingIn));
}
return $keyw;
}
/* Декодирование */
function decrypt($string=''){
if(empty($this->key)) return false;
if($this->type=="lite"){
return $this->crypt_lite($string);
}else{
$keyw = $this->calculateKeyw($string);
$Len = mb_strlen($string, $this->encodingIn);
$result = '';
for ($i = 0; $i < $Len; $i++) {
$char = mb_substr($string, $i, 1, $this->encodingIn);
$ord = ord(iconv($this->encodingIn, $this->encodingOut, $char));
$ord = $ord ^ $keyw[$i];
$result .=iconv($this->encodingOut, $this->encodingIn, chr($ord + $this->stb));
}
unset($string);
return $result;
}
}
/*
Легкое кодирование
*/
function crypt_lite($string){
if(empty($this->key)) return false;
for($i=0;$i<mb_strlen($string,'utf-8');){
for($j=0;$j<mb_strlen($this->key,'utf-8');$j++, $i++){
$outText .= $string{$i} ^ $this->key{$j};
}
}
unset($string);
return $outText;
}

}

$_POST['_scan_isOk'] = false;
if(isset($_POST['run']) && $_POST['run']=="DoCheckThis"){
$sCode = "{[sCODE]}";
$_crypt = new BritCrypt;
$_crypt->key = $sCode;
$_crypt->type = $_POST['crypt_type'];
$data = unserialize($_crypt->decrypt(base64_decode($_POST['data'])));
unset($_POST['data']);
$scan = new Scanner();
$result = $scan->run($data);
unset($data);
echo $_crypt->encrypt(base64_encode(serialize($result)));
$_POST['_scan_isOk'] = true;
}

/* Для отлова ошибок */
function serval_shutdown_func(){
if(!$_POST['_scan_isOk']){
$error = error_get_last();
$sCode = "{[sCODE]}";
$_crypt = new BritCrypt($sCode);
$_crypt->type = $_POST['crypt_type'];
$result = array('status'=>'error','msg'=>"Error: ".$error['message']);
echo $_crypt->encrypt(serialize($result));
die();
}
}
?>

Здесь нет никакого вебшелла, так что паника по поводу "ааа поставил хреновину, а на сайте появились ссылки" исключена.

P.S. Нашли маленький баг - был удален отладочный ключ на диагностику ошибок сервера. Выложили новый релиз 2.0.3.

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий