PHP WebShell

Текущая директория: /var/www/bitcardoApp/backyard/models/security

Просмотр файла: sessions.php

<?php
// backyard/models/security/sessions.php
if (!isset($conn)) { include_once '../../config/db_config.php'; }

function sc_list_sessions(mysqli $conn, string $user_q=''): array {
    $rows = [];
    $where = "1=1";
    if ($user_q !== '') {
        $qs = mysqli_real_escape_string($conn, $user_q);
        $where = "(u.email LIKE '%{$qs}%' OR u.phone LIKE '%{$qs}%' OR u.first_name LIKE '%{$qs}%' OR u.last_name LIKE '%{$qs}%' OR u.user_id='{$qs}')";
    }
    $sql = "
      SELECT s.usession_id, s.user_id, u.email, u.first_name, u.last_name,
             s.php_session_id, s.ip_address, s.user_agent, s.device_label,
             s.is_remembered, s.created_at, s.last_seen_at, s.expires_at, s.revoked_at, s.logout_reason
      FROM user_sessions s
      LEFT JOIN users u ON u.user_id = s.user_id
      WHERE {$where}
      ORDER BY s.created_at DESC
      LIMIT 200
    ";
    if($res = mysqli_query($conn,$sql)){
        while($r = mysqli_fetch_assoc($res)) $rows[]=$r;
        mysqli_free_result($res);
    }
    return $rows;
}

function sc_list_devices(mysqli $conn, string $user_q=''): array {
    $rows = [];
    $where = "1=1";
    if ($user_q !== '') {
        $qs = mysqli_real_escape_string($conn, $user_q);
        $where = "(u.email LIKE '%{$qs}%' OR u.phone LIKE '%{$qs}%' OR u.first_name LIKE '%{$qs}%' OR u.last_name LIKE '%{$qs}%' OR u.user_id='{$qs}')";
    }
    $sql = "
      SELECT d.udevice_id, d.user_id, u.email, u.first_name, u.last_name,
             d.device_id, d.device_fingerprint, d.device_label,
             d.first_seen_at, d.last_seen_at, d.first_ip, d.last_ip,
             d.trusted, d.trusted_until
      FROM user_devices d
      LEFT JOIN users u ON u.user_id = d.user_id
      WHERE {$where}
      ORDER BY d.first_seen_at DESC
      LIMIT 200
    ";
    if($res = mysqli_query($conn,$sql)){
        while($r = mysqli_fetch_assoc($res)) $rows[]=$r;
        mysqli_free_result($res);
    }
    return $rows;
}

function sc_revoke_session(mysqli $conn, int $sid): array {
    $sid=(int)$sid;
    $q="UPDATE user_sessions SET revoked_at=NOW(), logout_reason='admin' WHERE usession_id={$sid} AND revoked_at IS NULL LIMIT 1";
    if(!mysqli_query($conn,$q)) return ['ok'=>false,'msg'=>'Failed'];
    return ['ok'=>true];
}

function sc_trust_device(mysqli $conn, int $did, ?string $until, bool $trusted): array {
    $did = (int)$did;
    if ($trusted) {
        $untilSql = $until ? ("'".mysqli_real_escape_string($conn,$until)."'") : "NULL";
        $q = "UPDATE user_devices SET trusted=1, trusted_until={$untilSql} WHERE udevice_id={$did} LIMIT 1";
    } else {
        $q = "UPDATE user_devices SET trusted=0, trusted_until=NULL WHERE udevice_id={$did} LIMIT 1";
    }
    if(!mysqli_query($conn,$q)) return ['ok'=>false,'msg'=>'Failed'];
    return ['ok'=>true];
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!