Dengan kata lain, bagaimana saya bisa mengetahui jika orang yang menggunakan aplikasi web saya ada di server tempatnya berada? Jika saya ingat dengan benar, PHPMyAdmin melakukan sesuatu seperti ini untuk alasan keamanan.
99
Anda juga dapat menggunakan $_SERVER['REMOTE_ADDR']
alamat IP mana yang diminta klien diberikan oleh server web.
$whitelist = array(
'127.0.0.1',
'::1'
);
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
// not valid
}
Host: 127.0.0.1
dan itu akan diisiHTTP_HOST
, jadi itu bukan metode yang dapat diandalkan sama sekali.$whitelist = array('127.0.0.1', '::1');
Sebagai pelengkap, sebagai fungsi ...
sumber
Pengguna OS yang lebih baru (Win 7, 8) mungkin juga merasa perlu untuk menyertakan alamat jarak jauh format IPV6 dalam susunan daftar putih mereka:
sumber
$_SERVER["REMOTE_ADDR"]
harus memberi tahu Anda IP pengguna. Tapi itu spoofable.Periksa pertanyaan karunia ini untuk pembahasan yang sangat rinci.
Saya pikir apa yang Anda ingat dengan PHPMyAdmin adalah sesuatu yang berbeda: Banyak Server MySQL dikonfigurasi sehingga hanya dapat diakses dari localhost untuk alasan keamanan.
sumber
Maaf, tetapi semua jawaban ini tampak mengerikan bagi saya. Saya menyarankan untuk mengulang pertanyaan karena dalam arti semua mesin adalah "localhost".
Pertanyaannya seharusnya; Bagaimana cara menjalankan jalur kode yang berbeda tergantung pada mesin mana ia dijalankan.
Menurut saya, cara termudah adalah dengan membuat file bernama DEVMACHINE atau apa pun yang Anda inginkan sebenarnya dan kemudian cukup centang
Ingatlah untuk mengecualikan file ini saat mengupload ke lingkungan hosting langsung!
Solusi ini tidak bergantung pada konfigurasi jaringan, tidak dapat dipalsukan dan memudahkan peralihan antara menjalankan "live-code" dan "dev-code".
sumber
Tampaknya Anda tidak perlu menggunakan
$_SERVER['HTTP_HOST']
, karena ini adalah nilai di header http, mudah dipalsukan.Anda dapat menggunakan
$_SERVER["REMOTE_ADDR"]
juga, ini adalah nilai yang lebih aman, tetapi juga dapat dipalsukan. Iniremote_addr
adalah alamat di mana Apache mengembalikan hasil.sumber
REMOTE_ADDR
adalah mungkin untuk memalsukan, namun jika Anda ingin memalsukannya sebagai127.0.0.1
atau::1
, yang memerlukan kompromi mesin, di mana yang palsuREMOTE_ADDR
adalah kekhawatiran Anda yang paling kecil. Jawaban yang relevan - stackoverflow.com/a/5092951/3774582Jika Anda ingin memiliki whitelist / allowlist yang mendukung IP statis dan nama dinamis .
Sebagai contoh:
Dengan cara ini Anda dapat mengatur daftar nama / IP yang akan (pasti) dapat dideteksi. Nama dinamis menambah lebih banyak fleksibilitas untuk mengakses dari berbagai titik.
Anda memiliki dua opsi umum di sini, Anda dapat menetapkan nama di file host lokal Anda atau Anda dapat menggunakan satu penyedia nama dinamis yang dapat ditemukan di mana saja.
Fungsi ini CACHES dihasilkan karena gethostbyname adalah fungsi yang sangat lambat.
Untuk pupose ini saya telah menerapkan fungsi ini:
Untuk keandalan yang lebih baik, Anda dapat mengganti $ _SERVER ['REMOTE_ADDR'] untuk get_ip_address () yang disebutkan @Pekka di posnya sebagai "pertanyaan hadiah ini"
sumber
Bagaimana jika membandingkan
$_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR']
untuk menentukan apakah klien menggunakan mesin yang sama dengan server?sumber
$_SERVER['SERVER_ADDR']
tidak selalu dapat mengembalikan alamat server dengan andal, misalnya jika menggunakan penyeimbang beban, ia mengembalikan alamat IP penyeimbang beban yang saya yakini.Saya menemukan jawaban yang mudah.
Karena semua drive lokal memiliki C: atau D: atau F: ... dll.
Deteksi saja apakah karakter kedua adalah:
sumber