Buat file baru bernama security.php. File ini akan membaca .htaccess Anda, mengambil semua IP yang ada di baris Deny from, dan langsung memblokirnya sebelum halaman utama dimuat.
PHP
<?php * Global Security - * Otomatis mengambil daftar blokir dari .htaccess */ // 1. TENTUKAN PATH KE .HTACCESS $htaccess_path = __DIR__ . '/.htaccess'; // 2. FUNGSI MENGAMBIL IP DARI .HTACCESS function get_banned_ips($file) { $banned_ips = []; if (file_exists($file)) { $lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); foreach ($lines as $line) { // Mencari baris yang dimulai dengan "Deny from" if (preg_match('/^Deny from\s+([^\s]+)/i', trim($line), $matches)) { $banned_ips[] = trim($matches[1]); } } } return $banned_ips; } // 3. DETEKSI IP PENGUNJUNG (Real IP) function get_visitor_ip() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) return $_SERVER['HTTP_CLIENT_IP']; if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]; return $_SERVER['REMOTE_ADDR']; } $ipad = get_visitor_ip(); $blacklist = get_banned_ips($htaccess_path); // 4. PROSES PENGECEKAN (HARD BLOCK) if (in_array($ipad, $blacklist)) { http_response_code(403); // Memanggil tampilan error menakutkan yang sudah Anda buat include('error.php'); exit(); } // 5. Hardening Header (Mencegah XSS & Clickjacking) header("X-Frame-Options: DENY"); header("X-Content-Type-Options: nosniff"); header("X-XSS-Protection: 1; mode=block"); header("Referrer-Policy: strict-origin-when-cross-origin");
Cara Pasang: Di file index.php Anda, letakkan kode ini di baris paling atas (Baris 1):
include('security.php');
Tentu, Anda bisa membuat sistem tersebut bekerja secara otomatis tanpa harus mengetik ulang daftar IP di dalam script PHP. Kita akan membuat PHP membaca file .htaccess Anda, mencari semua baris yang mengandung kata Deny from, lalu mengambil alamat IP-nya untuk dimasukkan ke dalam daftar blokir secara real-time.
Berikut adalah kode untuk file global_security.php yang mengambil data langsung dari .htaccess:
Script global_security.php (Auto-Fetch dari .htaccess)
PHP
<?php
/**
* Global Security
* Otomatis mengambil daftar blokir dari .htaccess
*/
// 1. TENTUKAN PATH KE .HTACCESS
$htaccess_path = __DIR__ . '/.htaccess';
// 2. FUNGSI MENGAMBIL IP DARI .HTACCESS
function get_banned_ips($file) {
$banned_ips = [];
if (file_exists($file)) {
$lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
// Mencari baris yang dimulai dengan "Deny from"
if (preg_match('/^Deny from\s+([^\s]+)/i', trim($line), $matches)) {
$banned_ips[] = trim($matches[1]);
}
}
}
return $banned_ips;
}
// 3. DETEKSI IP PENGUNJUNG (Real IP)
function get_visitor_ip() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) return $_SERVER['HTTP_CLIENT_IP'];
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
return $_SERVER['REMOTE_ADDR'];
}
$ipad = get_visitor_ip();
$blacklist = get_banned_ips($htaccess_path);
// 4. PROSES PENGECEKAN (HARD BLOCK)
if (in_array($ipad, $blacklist)) {
http_response_code(403);
// Memanggil tampilan error menakutkan yang sudah Anda buat
include('error.php');
exit();
}
Cara Mengaktifkan Tanpa include di Tiap File:
Agar script ini berjalan di seluruh website (otomatis melindungi index.php, error.php, dan file lainnya), Anda punya dua pilihan:
Opsi A: Menggunakan .htaccess (Paling Praktis)
Tambahkan baris ini di bagian paling atas file .htaccess Anda:
Apache
php_value auto_prepend_file = "/var/www/web/global_security.php"
Opsi B: Menggunakan php.ini (Paling Aman)
Buka file php.ini Anda, cari auto_prepend_file, dan isi dengan path lengkap file tersebut:
Ini,
auto_prepend_file = "/var/www/web/global_security.php"
Mengapa Cara Ini Lebih Baik?
-
Sinkronisasi Otomatis: Setiap kali script
error.phpAnda menambahkan IP baru ke.htaccess, script PHP ini akan langsung mengenali IP tersebut sebagai musuh pada kunjungan berikutnya. -
Menghindari Baris Rusak: Meskipun ada baris
Deny fromyang kosong atau berantakan di.htaccessAnda, fungsipreg_matchdi atas cukup cerdas untuk hanya mengambil baris yang memiliki format IP yang benar. -
Solusi IP Private: Mengingat log Anda sering mencatat IP gateway
192.168.44.1, metode PHP ini lebih efektif karena ia melakukan pengecekan di level aplikasi sebelum halaman sempat dirender sepenuhnya.
3. Perbaikan .htaccess (Newline Fix)
# --- A FIREWALL ---
# REDIRECT ERRORS
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php
# DAFTAR BLACKLIST (Otomatis terisi oleh script)
Order Allow,Deny
Allow from all
Kenapa Ini Lebih Baik?
-
Tanpa Jarak Jauh: Script PHP sekarang menggunakan
PHP_EOL, sehingga setiap IP baru akan menempel tepat di bawah IP sebelumnya tanpa spasi kosong. -
Berita Keamanan: File
activity_log.txtAnda sekarang akan terlihat seperti laporan forensik digital yang sangat profesional. -
Double Protection: Meskipun Apache gagal membaca
.htaccess, filesecurity.phpakan tetap memblokir pengunjung tersebut melalui kode PHP.
Saran Tambahan: Untuk mengecek apakah log “Berita” sudah masuk, silakan buka file activity_log.txt di server. Jika ada serangan, formatnya akan rapi menggunakan kotak pembatas (====).
0 Comments