1: Eklenen dosya sayısını kontrol etme
if( count(get_included_files()) == ((version_compare(PHP_VERSION, '5.0.0', '>='))?1:0) )
{
exit('Restricted Access');
}
Mantık: Minimum içerme sayısı karşılanmazsa PHP çıkar. PHP5'ten önce temel sayfanın bir içerme olarak değerlendirilmediğini unutmayın.
2: Global sabitin tanımlanması ve doğrulanması
// 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');
Mantık: Sabit tanımlanmazsa, yürütme temel sayfadan başlamaz ve PHP yürütmeyi durdurur.
Not önemli ölçüde değişiklikler sabit kodlanmış her dosyaya olması gerekmez gibi havai kodlama azaltacak bu kimlik doğrulama yöntemi modüler yaparak yükseltmeleri ve gelecekteki değişiklikleri karşısında taşınabilirlik uğruna.
// 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');
Bu şekilde , günlük kaydı ve analitik amaçların yanı sıra uygun yanıtlar oluşturmak için ek kod eklenebilir checkdefined.php
.
Kredinin vadesi geldiğinde kredi: Parlak bir taşınabilirlik fikri bu cevaptan geldi .
3: Uzaktan adres yetkilendirme
// 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');
Bu istekle ilgili dezavantaj, dahili istekle birlikte bir oturum belirteci sağlanmadığı takdirde yalıtılmış yürütmedir. Tek bir sunucu yapılandırması veya çoklu sunucu veya yük dengeli bir sunucu altyapısı için bir adres beyaz listesi olması durumunda geri döngü adresi üzerinden doğrulayın.
4: Jeton yetkilendirme
Önceki yönteme benzer şekilde, içerme dosyasına bir yetkilendirme belirteci iletmek için GET veya POST kullanılabilir:
if($key!="serv97602"){header("Location: ".$dart);exit();}
Çok dağınık bir yöntem, aynı zamanda doğru şekilde kullanıldığında belki de en güvenli ve çok yönlü.
5: Web sunucusuna özgü yapılandırma
Çoğu sunucu tek tek dosyalar veya dizinler için izin atamanıza izin verir. Tüm içeriklerinizi bu tür kısıtlı dizinlere yerleştirebilir ve sunucunun bunları reddedecek şekilde yapılandırmasını sağlayabilirsiniz.
Örneğin APACHE'de yapılandırma .htaccess
dosyaya kaydedilir . Eğitim burada .
Not farklı web sunucular arasında taşınabilirlik için kötü çünkü sunucu özgü yapılandırmaları benim tarafımdan tavsiye edilmez ancak o. Reddetme algoritmasının karmaşık olduğu veya reddedilen dizinlerin listesinin oldukça büyük olduğu İçerik Yönetim Sistemleri gibi durumlarda, yalnızca yeniden yapılandırma oturumlarını oldukça korkunç hale getirebilir. Sonunda bunu kodda ele almak en iyisidir.
6: Yerleştirme, site kökünün DIŞINDA güvenli bir dizine içerir
En az sunucu ortamlarındaki erişim sınırlamaları nedeniyle tercih edilir, ancak dosya sistemine erişiminiz varsa oldukça güçlü bir yöntemdir.
//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");
Mantık:
- Bağlantılar
htdocs
web sitesinin adres sisteminin kapsamı dışında olacağından , kullanıcı klasör dışındaki herhangi bir dosyayı isteyemez .
- Php sunucusu, dosya sistemine yerel olarak erişir ve bu nedenle, gerekli ayrıcalıklara sahip normal bir program gibi bir bilgisayardaki dosyalara erişebilir.
- Dahil etme dosyalarını bu dizine yerleştirerek, hotplinking kullanıcı tarafından reddedilirken php sunucusunun bunlara erişmesini sağlayabilirsiniz.
- Web sunucusunun dosya sistemi erişim yapılandırması düzgün yapılmasa bile, bu yöntem bu dosyaların yanlışlıkla halka açılmasını engelleyecektir.
Lütfen alışılmadık kodlama sözleşmelerimi affedin. Herhangi bir geri bildirim takdir edilmektedir.