403Webshell
Server IP : 188.114.96.3  /  Your IP : 216.73.216.143
Web Server : Apache
System : Linux sv058.home.net.pl 6.8.2 husak_dirty_pages_fix #1 SMP PREEMPT_DYNAMIC Tue Apr 2 22:06:51 CEST 2024 x86_64
User :  ( 3194769)
PHP Version : 8.5.12
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /polana/admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /polana/admin/polana-v187-jeden-baner.php
<?php
declare(strict_types=1);
/** POLANA V18.7 — jeden baner cookie. Wymaga admina, nie uruchamia się sam. */
require_once dirname(__DIR__) . '/includes/functions.php';
require_admin_role();
header('Cache-Control: private, no-store, max-age=0');
header('X-Robots-Tag: noindex, nofollow', true);

function p187_e(string $value): string { return htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); }
function p187_read(string $file): string {
    $s = @file_get_contents($file);
    if (!is_string($s)) throw new RuntimeException('Nie można odczytać potrzebnego pliku.');
    return $s;
}
function p187_paths(string $root): array {
    $matches=[];
    foreach (['/assets','/assets/js','/','/js','/public/assets','/public/js'] as $part) {
        $dir = realpath($root . $part);
        if (!$dir || !is_dir($dir) || !str_starts_with($dir.'/', $root.'/')) continue;
        $js=$dir.'/tklm-tracking.js'; $css=$dir.'/tklm-consent.css';
        if (is_link($js) || is_link($css)) continue;
        if (is_file($js)) $matches[]=[$js, $css];
    }
    if (count($matches) > 1) throw new RuntimeException('Znaleziono więcej niż jeden pakiet TKLM Tracking. Najpierw wskaż aktywny plik w źródle strony; nie nadpisujemy przypadkowo.');
    if (!$matches) throw new RuntimeException('Nie znaleziono tklm-tracking.js w typowych lokalizacjach. Wgraj paczkę TKLM Tracking R2 albo prześlij ścieżkę aktywnego pliku.');
    if (!is_file($matches[0][1])) throw new RuntimeException('Obok tklm-tracking.js brakuje tklm-consent.css.');
    return $matches[0];
}
function p187_norm(string $js): string {
    $js=str_replace("\r\n", "\n", $js);
    $n=0;
    $ret=preg_replace('/^  var config = \{[^\r\n;]+\};$/m', '  var config = __CONFIG__;', $js, 1, $n);
    if (!is_string($ret) || $n!==1) throw new RuntimeException('Nieznany format konfiguracji JS, przerwano.');
    return $ret;
}
function p187_config(string $js): string {
    if (!preg_match('/^  var config = (\{[^\r\n;]+\});$/m', $js, $m)) throw new RuntimeException('Brak konfiguracji tracking JS.');
    $a=json_decode($m[1], true);
    if (!is_array($a) || ($a['domain']??'') !== 'mojapolanasmakow.pl' || ($a['banner']??'')!=='builtin') {
        throw new RuntimeException('Kod nie jest aktywną paczką TKLM dla mojapolanasmakow.pl z własnym banerem.');
    }
    return $m[1];
}
function p187_atomic(string $target, string $value): void {
    $dir=dirname($target);
    if (!is_dir($dir) || !is_writable($dir) || !is_writable($target)) throw new RuntimeException('Brak uprawnień zapisu do: '.basename($target));
    $tmp=tempnam($dir, '.p187_');
    if (!$tmp) throw new RuntimeException('Nie można utworzyć pliku tymczasowego.');
    try {
        @chmod($tmp, fileperms($target)&0777);
        if (@file_put_contents($tmp, $value, LOCK_EX)!==strlen($value) || !@rename($tmp, $target)) throw new RuntimeException('Nie udało się zapisać zmienionego pliku.');
    } finally { if (is_file($tmp)) @unlink($tmp); }
}
function p187_setmode(string $mode): void {
    if (!in_array($mode, ['off','direct','gtm'], true)) throw new RuntimeException('Nieprawidłowy tryb Polany.');
    $stmt=db()->prepare('INSERT INTO settings (setting_key, setting_value) VALUES (?, ?) ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value)');
    $stmt->execute(['polana_tracking_mode',$mode]);
}
function p187_backup_base(string $root): string {
    $lib=$root.'/includes/polana_backup_v182.php';
    if (!is_file($lib)) throw new RuntimeException('Brak biblioteki backupów V18.3. Nie wykonujemy zmiany bez bezpiecznego rollbacku.');
    require_once $lib;
    if (!function_exists('pbk_private')) throw new RuntimeException('Nie znaleziono katalogu prywatnego V18.3.');
    $private=pbk_private();
    $r=realpath($private);
    if (!$r || str_starts_with($r.'/', $root.'/')) throw new RuntimeException('Katalog backupów musi być poza WWW.');
    $dest=$r.'/polana-consent-v187';
    if (!is_dir($dest) && !@mkdir($dest,0700,true)) throw new RuntimeException('Nie można utworzyć prywatnego katalogu rollbacku.');
    @chmod($dest,0700);
    return $dest;
}
function p187_manifest(string $base): ?array {
    $path=$base.'/active.json';
    if (!is_file($path)) return null;
    $data=json_decode(p187_read($path),true);
    if (!is_array($data)) throw new RuntimeException('Manifest rollbacku jest uszkodzony.');
    return $data;
}
function p187_install(string $root, string $base): string {
    if (p187_manifest($base)!==null) throw new RuntimeException('Instalacja V18.7 już została wykonana — użyj rollbacku przed ponowną instalacją.');
    [$jsFile,$cssFile]=p187_paths($root);
    $origJs=p187_read($jsFile);$origCss=p187_read($cssFile);
    p187_config($origJs);
    if (hash('sha256',p187_norm($origJs)) !== '0febb8d1f2c7c59ea03a808cc1889f3d982b22c0941a686be591ff907bf1084a') {
        throw new RuntimeException('Plik tracking różni się od znanej wersji R2. Instalator nie nadpisze nowszego kodu — prześlij aktualny plik.');
    }
    $tplJs=p187_read($root.'/includes/polana_one_banner_r187.js.txt');
    $tplCss=p187_read($root.'/includes/polana_one_banner_r187.css.txt');
    if (hash('sha256',p187_norm($tplJs)) !== '928998eedf157f8c468651a850fe45bec8d2075a6507e0fb35aa72e9c52b2137') throw new RuntimeException('Paczka aktualizacji jest niekompletna.');
    $origConfig=p187_config($origJs);
    $updatedJs=preg_replace_callback('/^  var config = \{[^\r\n;]+\};$/m', static fn($m)=>'  var config = '.$origConfig.';', $tplJs,1,$n);
    if (!is_string($updatedJs)||$n!==1) throw new RuntimeException('Nie można zachować konfiguracji GTM i Clarity.');
    $previousMode=(string)setting('polana_tracking_mode','off');
    if (!in_array($previousMode,['off','direct','gtm'],true)) throw new RuntimeException('Nieznany tryb analityki Polany.');
    $id=date('Ymd-His').'-'.bin2hex(random_bytes(4));
    $dir=$base.'/'.$id;
    if (!@mkdir($dir,0700)) throw new RuntimeException('Brak możliwości utworzenia kopii.');
    @chmod($dir,0700);
    if (@file_put_contents($dir.'/original.js',$origJs,LOCK_EX)!==strlen($origJs) || @file_put_contents($dir.'/original.css',$origCss,LOCK_EX)!==strlen($origCss)) throw new RuntimeException('Nie zapisano pełnej kopii plików — przerwano.');
    $manifest=[
       'version'=>'18.7', 'backup_id'=>$id, 'js_rel'=>substr($jsFile,strlen($root)+1), 'css_rel'=>substr($cssFile,strlen($root)+1),
       'before_mode'=>$previousMode,'js_new_sha'=>hash('sha256',$updatedJs),'css_new_sha'=>hash('sha256',$tplCss),
    ];
    try {
        p187_atomic($jsFile,$updatedJs);
        p187_atomic($cssFile,$tplCss);
        p187_setmode('off'); // Wyłącza drugi CMP + duplikaty GA4/GTM.
        if (@file_put_contents($base.'/active.json',json_encode($manifest,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES),LOCK_EX)===false) throw new RuntimeException('Nie zapisano manifestu rollbacku.');
    } catch (Throwable $e) {
        try { p187_atomic($jsFile,$origJs); p187_atomic($cssFile,$origCss); p187_setmode($previousMode); } catch(Throwable $ignore) {}
        throw $e;
    }
    if (function_exists('admin_log')) admin_log('polana_one_cookie_187','Wdrożono jeden baner zgód TKLM; polana_tracking_mode=off');
    return 'Zainstalowano jeden baner. Drugi moduł Polany został wyłączony, a konfiguracja GTM i Clarity zachowana.';
}
function p187_rollback(string $root,string $base): string {
    $m=p187_manifest($base);
    if (!$m) throw new RuntimeException('Brak aktywnej instalacji do cofnięcia.');
    if (($m['version']??'')!=='18.7' || !preg_match('/^[0-9]{8}-[0-9]{6}-[0-9a-f]{8}$/',(string)($m['backup_id']??''))) throw new RuntimeException('Nieprawidłowy manifest.');
    [$js,$css]=p187_paths($root);
    if (substr($js,strlen($root)+1)!==($m['js_rel']??null) || substr($css,strlen($root)+1)!==($m['css_rel']??null)) throw new RuntimeException('Ścieżki różnią się od instalacji — rollback zatrzymany.');
    if (hash_file('sha256',$js)!==($m['js_new_sha']??null)||hash_file('sha256',$css)!==($m['css_new_sha']??null)||setting('polana_tracking_mode','off')!=='off') {
        throw new RuntimeException('Po instalacji pliki lub ustawienia zostały zmienione. Rollback nie nadpisze nowych zmian.');
    }
    $folder=$base.'/'.$m['backup_id'];
    $origJs=p187_read($folder.'/original.js');$origCss=p187_read($folder.'/original.css');
    p187_atomic($js,$origJs);p187_atomic($css,$origCss);
    p187_setmode((string)$m['before_mode']);
    if (!@rename($base.'/active.json',$base.'/rolled-back-'.$m['backup_id'].'.json')) throw new RuntimeException('Przywrócono pliki, ale manifest wymaga ręcznego uporządkowania.');
    if (function_exists('admin_log')) admin_log('polana_one_cookie_187_rollback','Cofnięto jeden baner zgód.');
    return 'Rollback wykonany. Przywrócono oryginalne JS/CSS i wcześniejszy tryb analityki Polany.';
}

$root=realpath(dirname(__DIR__));
$messages=[];$ready=false;$active=null;$pathJs='—';$mode='—';$base=null;
try {
    if (!$root) throw new RuntimeException('Nie można rozpoznać katalogu strony.');
    $base=p187_backup_base($root);
    if ($_SERVER['REQUEST_METHOD']==='POST') {
        verify_csrf();
        $action=(string)($_POST['action']??'');
        if ($action==='install') $messages[]=['ok',p187_install($root,$base)];
        elseif ($action==='rollback') $messages[]=['ok',p187_rollback($root,$base)];
        else throw new RuntimeException('Nieznana akcja.');
    }
    $active=p187_manifest($base);
    [$jsFile,$cssFile]=p187_paths($root);
    $pathJs=substr($jsFile,strlen($root)+1);
    $mode=(string)setting('polana_tracking_mode','off');
    $ready=true;
} catch (Throwable $e) { $messages[]=['err',$e->getMessage()]; }
render_admin_header('POLANA V18.7 — Jeden baner cookies');
?>
<style>.p187{max-width:980px;margin:28px auto;padding:18px;line-height:1.65}.p187-card{padding:24px;border-radius:14px;border:1px solid #8885;margin-bottom:18px;background:var(--panel,#fff);color:inherit}.p187-card h1{margin-top:0;font-size:27px}.p187-card button{padding:12px 16px;background:#95430c;color:white;border:0;border-radius:8px;font-weight:700;cursor:pointer}.p187-card .p187-rollback{background:#485d4c}.p187-alert{padding:12px 16px;border-radius:8px;margin-bottom:10px;background:#596f5515;border-left:4px solid #476e44}.p187-alert.err{background:#e6a39830;border-color:#aa3218}.p187 small{opacity:.75}</style>
<div class="p187"><section class="p187-card"><h1>POLANA V18.7 — jeden baner cookies</h1><p>Wykrycie <strong>TKLM Tracking R2</strong>, ukrycie dodatkowych przełączników do chwili kliknięcia „Ustawienia” i wyłączenie starego banera POLANA V17.4.</p><p>Plik: <code><?= p187_e($pathJs) ?></code> · Tryb starego modułu POLANA: <strong><?= p187_e($mode) ?></strong></p><p>Zmiany są wykonywane dopiero po zatwierdzeniu. Backup plików i poprzedniego ustawienia trafia poza WWW.</p></section>
<?php foreach ($messages as $m): ?><div class="p187-alert <?= $m[0]==='err'?'err':'' ?>"><?= p187_e($m[1]) ?></div><?php endforeach; ?>
<?php if ($ready): ?><section class="p187-card">
<?php if ($active): ?>
<h2>Aktualizacja aktywna</h2><p>Jeden baner TKLM, drugi moduł wyłączony. Jeżeli to nowa instalacja, sprawdź stronę w oknie prywatnym.</p>
<form method="post"><?= csrf_field() ?><input type="hidden" name="action" value="rollback"><button class="p187-rollback">Cofnij V18.7 (rollback)</button></form>
<?php else: ?>
<h2>Zainstaluj po utworzeniu kopii</h2><p>Instalator zmieni dwa pliki JS/CSS TKLM Tracking i jedną wartość konfiguracyjną w tabeli ustawień (tryb analityki V17.4 → off). Nie zmienia rezerwacji ani kalendarza.</p>
<form method="post"><?= csrf_field() ?><input type="hidden" name="action" value="install"><button>Zainstaluj jeden baner</button></form>
<?php endif; ?>
</section><?php endif; ?>
<section class="p187-card"><h2>Test po wdrożeniu</h2><ol><li>Otwórz stronę w trybie incognito — ma się pojawić dokładnie jedno małe okno.</li><li>Powinny być widoczne „Odrzuć opcjonalne”, „Ustawienia”, „Akceptuj wszystkie”.</li><li>W „Ustawieniach” osobno wybierzesz analitykę i marketing.</li><li>Po wyborze baner znika; link zmiany zgody zostaje w stopce.</li><li>Sprawdź, czy GA4, GTM i Clarity nie uruchamiają się przed właściwą zgodą.</li></ol><small>Uwaga: jeśli CRM w przyszłości wygeneruje i nadpisze nowe tklm-tracking.js, ponownie zweryfikuj ustawienia CMP. Nie instaluj tego narzędzia na innym serwisie.</small></section></div>
<?php render_admin_footer(); ?>

Youez - 2016 - github.com/yon3zu
LinuXploit