<?php
namespace imcat;

/**
safBase : 基础-安全过滤(Safil=Safety Filter)
  Stop,ipStop,robotStop,
  RndA,
*/
class safBase{
    
    
// ---- 用户信息 基础过滤项 --------------------------------------- 
    
    // IPStop
    
static function ipStop($ip=''){
        
$ip || $ip self::userIP();
        
$tab glbConfig::read('ipstop','sy');
        if(empty(
$ip) || empty($tab)) return;
        if(
$tab){
            if(
preg_match("/^($tab)$/",$ip)) self::Stop('ipStop');
        }
    }
    
    
// RobotStop
    
static function robotStop(){
        if(
basEnv::isRobot()) self::Stop('robotStop');
    }
    
    
// ---- 公共杂项方法 ---------------------------------------
    
    // Stop - 停止运行并记录操作
    
static function Stop($key,$exmsg=''){
        if(
$key=='robotStop'glbHtml::httpStatus(403); 
        
$cfg = array(
            
'robotStop'=>'HTTP 403 Forbidden',
            
'ipStop'=>'Stop by IP Fobidden!',
            
'urlFrom'=>'Stop by HTTP_REFERER!',
            
'urlScan'=>'Stop by Safety Scan!',
        );
        
$msg = isset($cfg[$key]) ? $cfg[$key] : $key;
        
$exmsg && $msg .= " [$exmsg]";
        
glbError::show($msg);
    }
    
    
// RndA - 由时间戳, 生成随机特殊字符数组对
    /* Return : Array(
        [0^1>2+] => '',
        [3-] => '85d6',
        [4&] => '9637',
        [5~] => '973f',);*/
    
static function RndA($timer,$encode){
        global 
$_cbase;
        
$safe $_cbase['safe'];
        
$stim str_replace('.','',$timer);
        
$stim strrev($stim); $a = array(); 
        
$rnum $safe['rnum'];
        
$rspe $safe['rspe'];  
        
$spla strlen($rspe);
        for(
$i=0;$i<strlen($stim);$i++){
            
$t substr($stim,$i,1)+substr($rnum,$i,1);
            
$a[] = $t
            if(
$i<$spla){
                
$t2 $t $spla;
                
$c substr($rspe,$t2,1);
                
$rspe = (($t2 2)==$c '').str_replace($c,'',$rspe).(($t2 2)==$c '');
            }
        }
        
$r = array(); $k '';
        
$m 1+($a[2] % 4);
        
$len count($a) - ($a[3] % 9);
        for(
$i=0;$i<$len;$i++){
            if(
$i<$m){
                
$k .= $i.substr($rspe,$i,1);
            }elseif(
$i==$m){
                
$r[$k.$i.substr($rspe,$i,1)] = '';
            }else{
                
$r[$i.substr($rspe,$i,1)] = $a[$i].substr($encode,$i*2,3); 
            }
        }
        return 
$r;
    }

    
// --- End ----------------------------------------
    
}