<?php
/**
 * g5check 정확 확인 파일 — 이 사이트가 "실제로 웹에서 쓰는" PHP 버전과 PHP2Shell 위험 여부를 보여 준다.
 * https://github.com/PARK-DONGMIN/g5check (MIT)
 *
 * 쓰는 법
 *   1) 이 파일을 FTP 로 사이트 폴더(index.php 가 있는 곳)에 올린다.
 *   2) 브라우저로 https://내사이트주소/g5check-version.php 를 연다.
 *   3) 결과를 확인한 뒤 파일을 지운다.
 *
 * 안전장치
 *   - 올린 지 30분이 지나면 아무것도 보여 주지 않는다(404). 지우는 걸 잊어도 버전이 계속 노출되지 않는다.
 *   - 서버 경로·설정값·DB 정보는 출력하지 않는다. 다른 파일을 실행(include)하지 않고, 그누보드 버전 한 줄만 글자로 읽는다.
 *   - 검색엔진에 잡히지 않게 noindex.
 * 서버 명령줄(php -v)의 버전과 웹에서 쓰는 버전은 다를 수 있다. 이 파일은 웹 쪽 버전을 보여 준다.
 * PHP 5.3 에서도 돌아가도록 옛 문법으로만 썼다.
 */

// 30분이 지난 파일은 응답하지 않는다
if (@filemtime(__FILE__) < time() - 1800) {
    header('HTTP/1.0 404 Not Found');
    exit;
}
header('Content-Type: text/html; charset=utf-8');
header('X-Robots-Tag: noindex, nofollow');
header('Cache-Control: no-store');
header('X-Frame-Options: DENY');

$ver = PHP_VERSION;
$p = explode('.', preg_replace('/[^0-9.].*$/', '', $ver));
$maj = (int)$p[0];
$min = isset($p[1]) ? (int)$p[1] : 0;
$pat = isset($p[2]) ? (int)$p[2] : 0;
$line = $maj . '.' . $min;

// PHP2Shell(CVE-2026-109618·109619) 수정 버전. 8.1 이하는 공식 패치 없음
$fixed = array('8.5' => 12, '8.4' => 27, '8.3' => 36, '8.2' => 35);
$eol = array('8.2' => '2026-12-31', '8.3' => '2027-12-31', '8.4' => '2028-12-31', '8.5' => '2029-12-31');

if (!isset($fixed[$line])) {
    $level = 'danger';
    $title = 'PHP ' . $ver . ' — PHP2Shell 공식 패치 없음';
    $msg = 'PHP ' . $line . ' 은(는) 이번 취약점의 수정 버전이 나오지 않습니다. PHP 8.3 또는 8.4 최신 버전으로 전환해야 합니다. 그누보드·영카트 사이트라면 PHP 8 에서 깨지는 소스를 먼저 점검·수정한 뒤 전환하세요.';
} elseif ($pat < $fixed[$line]) {
    $level = 'danger';
    $title = 'PHP ' . $ver . ' — PHP2Shell 취약 버전';
    $msg = 'PHP ' . $line . '.' . $fixed[$line] . ' 이상으로 업데이트하면 해결됩니다. 같은 ' . $line . ' 안의 업데이트라 보통 소스 수정은 필요 없습니다. 호스팅 업체에 업데이트를 요청하세요.';
} else {
    $level = 'ok';
    $title = 'PHP ' . $ver . ' — PHP2Shell 수정 버전';
    $msg = '이번 취약점이 고쳐진 버전입니다.' . (isset($eol[$line]) ? ' 이 버전의 보안 지원은 ' . $eol[$line] . ' 까지입니다.' : '');
}

// 그누보드 버전 (version.php 를 실행하지 않고 글자로만 읽는다)
$g5 = '';
foreach (array(dirname(__FILE__) . '/version.php', dirname(__FILE__) . '/config.php') as $f) {
    if (is_file($f) && filesize($f) < 200000) {
        $src = @file_get_contents($f);
        if ($src && preg_match("/define\\s*\\(\\s*['\"]G5_GNUBOARD_VER['\"]\\s*,\\s*['\"]([0-9.]+)['\"]/", $src, $m)) { $g5 = $m[1]; break; }
    }
}
$sapi = php_sapi_name();
$h = 'htmlspecialchars';
?><!doctype html>
<html lang="ko"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="robots" content="noindex,nofollow">
<title>g5check 정확 확인</title>
<style>
body{margin:0;background:#f6f7f9;color:#1b1f24;font:16px/1.65 "Apple SD Gothic Neo","Malgun Gothic",sans-serif;word-break:keep-all}
.w{max-width:720px;margin:0 auto;padding:28px 16px}
.c{background:#fff;border:1px solid #e3e6ea;border-radius:14px;padding:20px 22px;margin:0 0 14px}
.b{display:inline-block;padding:3px 12px;border-radius:999px;font-size:13px;font-weight:800}
.ok{color:#15803d;background:#e8f6ec}.danger{color:#c0262d;background:#fdecec}
.t{font-size:20px;font-weight:800;margin:10px 0 6px}
.m{color:#5b6470;font-size:14px}
.warn{background:#fff6dd;border-color:#f3dc9b}
a{color:#1f6feb}
</style></head><body><div class="w">
<h1 style="font-size:24px">g5check 정확 확인</h1>
<div class="c">
  <span class="b <?php echo $level; ?>"><?php echo $level === 'ok' ? '안전' : '위험'; ?></span>
  <p class="t"><?php echo $h($title); ?></p>
  <p><?php echo $h($msg); ?></p>
  <p class="m">웹에서 실제로 쓰는 PHP 입니다 (실행 방식: <?php echo $h($sapi); ?>). 서버 명령줄의 php -v 결과와 다를 수 있습니다.</p>
</div>
<div class="c">
  <p class="t" style="font-size:17px">그누보드</p>
  <p><?php echo $g5 !== '' ? '그누보드 ' . $h($g5) : '이 폴더에서 그누보드 버전 정보를 찾지 못했습니다.'; ?></p>
  <?php if ($g5 !== '' && version_compare($g5, '5.5', '<')) { ?>
  <p class="m">5.5 이전 그누보드는 PHP 7.4 이하 기준이라, PHP 8 로 올리면 화면이 멈추는 곳이 생길 수 있습니다. 전환 전에 소스 검사기로 먼저 점검하세요.</p>
  <?php } ?>
</div>
<div class="c warn">
  <p><b>확인이 끝났으면 이 파일을 지워 주세요.</b> 올린 지 30분이 지나면 저절로 아무것도 보이지 않지만, 지우는 것이 가장 안전합니다.</p>
</div>
<p class="m">소스 검사기·안내: <a href="https://g5check.webcheck-kr.workers.dev" rel="noopener">g5check.webcheck-kr.workers.dev</a> · 점검·전환 작업 문의: <a href="mailto:luckypdm20@gmail.com">luckypdm20@gmail.com</a></p>
</div></body></html>
