<?php
/*e
.htaccess подключение
php_value auto_prepend_file "/doc_root/logger/logger.php"
*/
$config = array(
'allow_ip' => array('
91.244.169.154',),
'mailto' => 'dim-2g@yandex.ru',
'path' => '/var/www/u1651312/data/www/logger/',
'domain' => $_SERVER['HTTP_HOST'],
'telegram_chat_id' => '',
'telegram_token' => '',
'notification' => array(''), //'notification' => ['telegram','email'],
);
$config['blacklist'] =
@include_once($config['path'].$config['domain'].'-blacklist.php');
if (!is_array($config['blacklist'])) $config['blacklist'] = array();
$config['bad_parts'] = getSignatures($config['path'].'signatures.txt');
if ($_SERVER['REQUEST_METHOD'] == 'POST' && !isset($_COOKIE['debug'])){
//индивидуальные условия отмены обработки данных
if (CustomAllowAccess()) return;
//если с разрешенных IP - то не обрабатываем данные
if (in_array($_SERVER['HTTP_X_REAL_IP'], $config['allow_ip'])) return;
//проверка данных на запрещенные запросы
foreach ($_POST as $key => $value) {
foreach ($config['bad_parts'] as $part){
if (strpos($key.$value, $part)!==false) {
LogBlackList($_SERVER['REMOTE_ADDR']);
}
}
}
LogFull();
LogFiles();
LogIp();
if (array_key_exists($_SERVER['REMOTE_ADDR'], $config['blacklist'])) {
header('HTTP/1.1 403 Forbidden');
unset($_POST);
die('403 Forbidden');
}
}
function WrireLog($filename, $data) {
global $config;
$sData = "<?php\n";
$sData .= "return " . var_export($data, true)."\n";
$sData .= "?>";
file_put_contents($filename, $sData);
}
function LogBlackList($ip){
global $config;
if (array_key_exists($ip, $config['blacklist'])){
$config['blacklist'][$ip]++;
}else{
$config['blacklist'][$ip] = 1;
if (in_array('email', $config['notification'])){
mail($config['mailto'], $config['domain'].' попытка передать потенциально опасный код',"IP:".$ip."\n\nPOST:".var_export($_POST,true));
}
if (in_array('telegram', $config['notification'])){
SendTelegramm($config['domain'].' в BlackList добавлен ip: '. $ip);
}
}
if (is_array($config['blacklist'])){
WrireLog($config['path'].$config['domain'].'-blacklist.php', $config['blacklist']);
}
}
function LogFull() {
global $config;
ob_start();
echo "Time:".date('Y-m-d H:s:i').' : '.$_SERVER['REMOTE_ADDR'].' : '.$_SERVER['SCRIPT_NAME'];
echo "\n"; echo "\n\n"; echo "POST\n"; print_r($_POST); echo "\n\n"; echo "GET\n"; print_r($_GET); echo "\n\n"; echo "SERVER\n"; print_r($_SERVER); echo "\n\n";
$output = ob_get_clean();
file_put_contents($config['path'].$config['domain'].'-data.php', PHP_EOL . $output, FILE_APPEND);
}
function LogFiles() {
global $config;
$sPath = $_SERVER['REQUEST_URI'];
$aData =
@include_once($config['path'].$config['domain'].'-log.php');
if (!is_array($aData)) $aData = array();
if (array_key_exists($sPath, $aData)){
$aData[$sPath] = $aData[$sPath]+1;
}else{
$aData[$sPath] = 1;
if (in_array('email', $config['notification'])){
mail($mailto,$config['domain'].' обращение к новому файлу', "file: ".$sPath."\n\nPOST:".var_export($_POST,true));
}
if (in_array('telegram', $config['notification'])){
SendTelegramm($config['domain']." обращение к новому файлу %0A"."file: ".$sPath);
}
}
WrireLog($config['path'].$config['domain'].'-log.php', $aData);
}
function SendTelegramm($txt) {
global $config;
$fp=fopen("
https://api.telegram.org/bot".$config['telegram_token']."/sendMessage?chat_id=".$config['telegram_chat_id']."&parse_mode=html&text={$txt}","r");
}
function LogIp() {
global $config;