"Directory tidak ditemukan: $dir"]; $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS) ); foreach ($iterator as $file) { if ($file->isFile()) { $ext = strtolower(pathinfo($file->getFilename(), PATHINFO_EXTENSION)); if (!in_array($ext, $allowedExt)) continue; $path = $file->getRealPath(); $content = @file_get_contents($path); if ($content === false) continue; $found = []; foreach ($patterns as $pattern) { if (stripos($content, $pattern) !== false) { $found[] = htmlspecialchars($pattern); } } if (!empty($found)) { $results[] = [ 'file' => $path, 'patterns' => $found, 'size' => filesize($path), 'modified' => date('Y-m-d H:i:s', filemtime($path)) ]; } } } return $results; } // Handle AJAX request if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') { header('Content-Type: application/json'); // Action: scan if (isset($_POST['action']) && $_POST['action'] === 'scan') { $scanDir = isset($_POST['directory']) ? $_POST['directory'] : __DIR__; $patterns = getPatterns(); $results = scanDirectory($scanDir, $patterns, $allowedExtensions); echo json_encode(['status' => 'success', 'results' => $results, 'directory' => $scanDir]); exit; } // Action: delete if (isset($_POST['action']) && $_POST['action'] === 'delete' && isset($_POST['files'])) { $files = json_decode($_POST['files'], true); $deleted = []; $failed = []; foreach ($files as $file) { $file = realpath($file); if ($file && is_file($file)) { if (unlink($file)) { $deleted[] = $file; } else { $failed[] = $file; } } else { $failed[] = $file; } } echo json_encode(['deleted' => $deleted, 'failed' => $failed]); exit; } echo json_encode(['status' => 'error', 'message' => 'Invalid action']); exit; } ?>
Deteksi dan hapus web shell dengan cepat