1: Memeriksa jumlah file yang disertakan
if( count(get_included_files()) == ((version_compare(PHP_VERSION, '5.0.0', '>='))?1:0) )
{
exit('Restricted Access');
}
Logika: PHP keluar jika jumlah sertakan minimum tidak terpenuhi. Perhatikan bahwa sebelum PHP5, halaman dasar tidak dianggap sebagai termasuk.
2: Mendefinisikan dan memverifikasi konstanta global
// In the base page (directly accessed):
define('_DEFVAR', 1);
// In the include files (where direct access isn't permitted):
defined('_DEFVAR') or exit('Restricted Access');
Logika: Jika konstanta tidak didefinisikan, maka eksekusi tidak dimulai dari halaman dasar, dan PHP akan berhenti mengeksekusi.
Perhatikan bahwa demi portabilitas di seluruh peningkatan dan perubahan di masa mendatang, membuat metode otentikasi ini modular akan secara signifikan mengurangi overhead pengkodean karena perubahan tidak perlu dikodekan ke setiap file.
// Put the code in a separate file instead, say 'checkdefined.php':
defined('_DEFVAR') or exit('Restricted Access');
// Replace the same code in the include files with:
require_once('checkdefined.php');
Dengan cara ini, kode tambahan dapat ditambahkan checkdefined.php
untuk tujuan logging dan analitis, serta untuk menghasilkan respons yang sesuai.
Kredit di mana kredit jatuh tempo: Ide brilian tentang portabilitas berasal dari jawaban ini .
3: Otorisasi alamat jauh
// Call the include from the base page(directly accessed):
$includeData = file_get_contents("http://127.0.0.1/component.php?auth=token");
// In the include files (where direct access isn't permitted):
$src = $_SERVER['REMOTE_ADDR']; // Get the source address
$auth = authoriseIP($src); // Authorisation algorithm
if( !$auth ) exit('Restricted Access');
Kelemahan dengan metode ini adalah eksekusi yang terisolasi, kecuali token sesi disediakan dengan permintaan internal. Verifikasi melalui alamat loop-back dalam hal konfigurasi server tunggal, atau daftar putih alamat untuk infrastruktur server multi-server atau beban-seimbang.
4: Otorisasi token
Mirip dengan metode sebelumnya, seseorang dapat menggunakan GET atau POST untuk meneruskan token otorisasi ke file include:
if($key!="serv97602"){header("Location: ".$dart);exit();}
Metode yang sangat berantakan, tetapi juga mungkin yang paling aman dan serbaguna pada saat yang sama, bila digunakan dengan cara yang benar.
5: konfigurasi spesifik server Web
Sebagian besar server memungkinkan Anda untuk menetapkan izin untuk file atau direktori individual. Anda dapat menempatkan semua menyertakan Anda dalam direktori terbatas seperti itu, dan mengonfigurasi server untuk menolaknya.
Sebagai contoh di APACHE, konfigurasi disimpan dalam .htaccess
file. Tutorial di sini .
Perhatikan bahwa konfigurasi khusus server tidak direkomendasikan oleh saya karena mereka buruk untuk portabilitas di berbagai server web. Dalam kasus-kasus seperti Content Management Systems di mana algoritma penolakan rumit atau daftar direktori ditolak agak besar, itu mungkin hanya membuat sesi konfigurasi ulang agak mengerikan. Pada akhirnya yang terbaik adalah menangani ini dalam kode.
6: Menempatkan termasuk dalam direktori aman DI LUAR root situs
Paling tidak disukai karena keterbatasan akses di lingkungan server, tetapi metode yang agak kuat jika Anda memiliki akses ke sistem file.
//Your secure dir path based on server file-system
$secure_dir=dirname($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR."secure".DIRECTORY_SEPARATOR;
include($secure_dir."securepage.php");
Logika:
- Pengguna tidak dapat meminta file apa pun di luar
htdocs
folder karena tautannya akan berada di luar ruang lingkup sistem alamat situs web.
- Server php mengakses sistem file secara asli, dan karenanya dapat mengakses file di komputer seperti halnya program normal dengan hak istimewa yang diperlukan dapat.
- Dengan menempatkan file sertakan dalam direktori ini, Anda dapat memastikan bahwa server php dapat mengaksesnya, sementara hotlinking ditolak untuk pengguna.
- Bahkan jika konfigurasi akses sistem file server web tidak dilakukan dengan benar, metode ini akan mencegah file-file tersebut menjadi publik secara tidak sengaja.
Maafkan konvensi pengkodean yang tidak lazim. Umpan balik sangat dihargai.