403Webshell
Server IP : 202.61.199.114  /  Your IP : 216.73.217.139
Web Server : nginx/1.22.1
System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
User : web20 ( 1018)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/clients/client2/web21/web/api/v1/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/clients/client2/web21/web/api/v1/mail.php
<?php
/**
 * Tier-B-Tool: SPF/DKIM/DMARC-Checker  →  GET /api/v1/mail.php?domain=example.com&selector=default
 *
 * Prüft per DNS-TXT: SPF (Domain), DMARC (_dmarc.Domain), DKIM (<selector>._domainkey.Domain).
 * Keine Fremd-API. 5 min Cache.
 *
 * @package SafeMyIdent\Api
 */

declare(strict_types=1);

require __DIR__ . '/../lib/bootstrap.php';

$domain = smi_valid_domain((string) ($_GET['domain'] ?? ''));
if ($domain === null) {
    smi_json_error('Bitte eine gültige Domain angeben (z. B. deine-firma.de).', 422);
}
$selector = preg_replace('/[^a-z0-9._-]/i', '', (string) ($_GET['selector'] ?? ''));

$cacheKey  = hash('sha256', 'mail|' . $domain . '|' . $selector);
$cacheFile = sys_get_temp_dir() . '/smi-cache-' . $cacheKey;
if (is_file($cacheFile)) {
    $raw = @file_get_contents($cacheFile);
    $data = $raw !== false ? json_decode($raw, true) : null;
    if (is_array($data) && ($data['exp'] ?? 0) >= time()) {
        smi_json_ok($data['val'] ?? [], true);
    }
    @unlink($cacheFile);
}

/**
 * TXT-Record(s) eines Namens holen (zusammengesetzt).
 *
 * @param string $name Hostname.
 * @return string[]
 */
$txt = static function (string $name): array {
    $out = [];
    $recs = @dns_get_record($name, DNS_TXT);
    if (is_array($recs)) {
        foreach ($recs as $r) {
            if (!empty($r['txt'])) {
                $out[] = (string) $r['txt'];
            } elseif (!empty($r['entries']) && is_array($r['entries'])) {
                $out[] = implode('', $r['entries']);
            }
        }
    }
    return $out;
};

// SPF.
$spf = '';
foreach ($txt($domain) as $t) {
    if (stripos($t, 'v=spf1') === 0) {
        $spf = $t;
        break;
    }
}

// DMARC.
$dmarc = '';
foreach ($txt('_dmarc.' . $domain) as $t) {
    if (stripos($t, 'v=DMARC1') === 0) {
        $dmarc = $t;
        break;
    }
}
$policy = '';
if ($dmarc !== '' && preg_match('/\bp=([a-z]+)/i', $dmarc, $m)) {
    $policy = strtolower($m[1]);
}

// DKIM: eigener Selector + gängige Selector.
$selectors = array_values(array_filter(array_unique(array_merge(
    $selector !== '' ? [$selector] : [],
    ['default', 'google', 'selector1', 'selector2', 'k1', 'dkim', 'mail', 's1', 's2']
))));
$checked = [];
$found   = [];
foreach ($selectors as $s) {
    $checked[] = $s;
    $host = $s . '._domainkey.' . $domain;
    $hit  = false;
    foreach ($txt($host) as $t) {
        if (stripos($t, 'DKIM1') !== false || stripos($t, 'p=') !== false || stripos($t, 'k=') === 0) {
            $hit = true;
            break;
        }
    }
    if (!$hit) {
        // DKIM kann per CNAME delegiert sein.
        $cn = @dns_get_record($host, DNS_CNAME);
        if (is_array($cn) && count($cn) > 0) {
            $hit = true;
        }
    }
    if ($hit) {
        $found[] = $s;
    }
    if (count($checked) >= 10) {
        break;
    }
}

$out = [
    'domain' => $domain,
    'spf'    => ['present' => $spf !== '', 'record' => $spf],
    'dmarc'  => ['present' => $dmarc !== '', 'record' => $dmarc, 'policy' => $policy],
    'dkim'   => ['checked' => $checked, 'found' => $found],
];

@file_put_contents($cacheFile, json_encode(['exp' => time() + 300, 'val' => $out]));
smi_json_ok($out, false);

Youez - 2016 - github.com/yon3zu
LinuXploit