Tüm doğrudan erişimi engelle. Index.php hariç php dosyalarını

11 Cevap php

index.php: ben bir haricindeki tüm .php dosyalara doğrudan erişimi reddetmek istiyorum

Diğer tek erişim .php dosya php olmalıdır include.

Eğer mümkünse ben aynı klasördeki tüm dosyaları istiyorum.

UPDATE:

Genel bir kural yüzden tüm dosyalara geçmesi gerekmez, güzel olurdu. Risk Bir dosya veya çizgi unutmak olduğunu.

UPDATE 2:

index.php bir klasörde www.myadress.com/myfolder/index.php

Tüm .php myfolder dosya ve klasör alt klasörler erişim inkar etmek istiyorum.

11 Cevap

Index.php, böyle bir erişim değerini ekleyin:

$access = 'my_value';

Her dosyada, hatta tek bir bayt php tarafından yankılandı önce bu çeki şunlardır:

if(empty($access)) {
    header("location:index.php"); 
    die();
}

Bu şekilde, diğer php dosyaları erişilebilir olacak, sadece içinden gerektirir / dahil değil url yoluyla.

Emin misin, bunu yapmak istiyorsun? Css ve js dosyaları ve görüntüleri ve ... hatta?

Tamam, ilk onay yüklü olarak mod_access apache, sonra htaccess aşağıdaki ekleyin.:

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

<Files /index.php>
    Order Allow,Deny
    Allow from all
</Files>

İlk yönerge, çünkü Order Deny,Allow, daha sonra, ikinci yönergesi sadece index.php etkiler uygulanan alır İzin arasında localhost dışında herhangi bir dosya erişimi yasaklıyor.

İhtar: Sipariş doğrultusunda virgülden sonra boşluk yok.

[EDIT:]

.. * Css veya * eşleşen dosyaları erişime izin vermek için js bu yönergeyi kullanabilirsiniz:

<FilesMatch ".*\.(css|js)$">
    Order Allow,Deny
    Allow from all
</FilesMatch>

Sen <Location> veya <Directory> içeride için yönergeleri kullanamazsınız. Htaccess dosyaları olsa.

Senin seçenek index.php erişime izin explicitely sonra, izin etrafında ilk <FilesMatch ".*\.php$"> kullanmak grubunu inkar ve olacaktır.

Actually, I came here with the same question as the creator of the topic, but none of the solutions given were a complete answer to my problem. Why adding a code to ALL the files on your server when you could simply configure it once ? The closest one was Residuum's one, but still, he was excluding ALL files, when I wanted to exclude only php files that weren't named index.php.

. Yüzden bu içeren bir htaccess ile geldi:

<Files *.php>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Files>

<Files index.php>
    Order Allow,Deny
    Allow from all
</Files>

(Htaccess dosyaları ardışık çalışan Unutmayın, bu yüzden mükemmel sorunun önkoşul uygun.)

And here we go. The only php files that will be accessible for an user will be the ones named index.php. But you can still acces to every image, css stylesheet, js script, etc.

Sorusuna eğik bir cevap dışında daha sonra tek giriş noktaları index.php dosyalarından, sınıflar gibi tüm kod yazmak için. Sınıfları içeren PHP dosyaları onlar Apache üzerinden doğrudan çağrılan bile, başına bir şey neden olmaz.

. Direk bir cevap htaccess aşağıdaki eklemektir:

<FilesMatch "\.php$">
    Order Allow,Deny
    Deny from all
</FilesMatch>
<FilesMatch "index[0-9]?\.php$">
    Order Allow,Deny
    Allow from all
</FilesMatch>

Bu index2.php vb index.php gibi herhangi bir dosya erişilmesine izin verir, ancak diğer. Php dosyalarına her türlü erişimini reddeder. Bu diğer dosya türlerini etkilemez.

Sen index.php bir sabiti tanımlayan denemek ve benzeri bir şey ekleyebilirsiniz

if (!defined("YOUR_CONSTANT")) die('No direct access');

diğer dosyaların başlangıcına.

VEYA, mod_rewrite kullanabilir ve .htaccess bu gibi düzenleme, index.php isteklerini yönlendirmek:

RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ /index.php/$1 [L,R=301]

Sonra index.php gelen tüm istekleri analiz ve uygun önlemleri almak gerekir.

.... Tüm * jpg, * gif, * css ve * dışında bırakmak istiyorsanız png dosyaları, örneğin, sonra bu gibi ikinci satırı düzenlemeniz gerekir:

RewriteCond $1 !^(index\.php|*\.jpg|*\.gif|*\.css|*\.png)

Nasıl web kök yukarıdaki index.php hariç tüm. Php dosyalarını tutmak konusunda? Herhangi bir yeniden yazma kuralları veya programatik kludges gerek yok.

Senin yolunu eklemek için içeren klasör ekleme sonra, basit vb mutlak yolları kullanmak gerek şeyleri tutmaya yardımcı olacaktır

URL yeniden yazma. Php dosyaları için bir URL eşleştirmek için kullanılır olabilir. Aşağıdaki kurallar. Php istek doğrudan yapılmış veya yeniden yazılmış olup olmadığını tespit edebilirsiniz. Bu ilk durumda isteği yasaklamaktadır:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^.+?\ [^?]+\.php[?\ ]
RewriteRule \.php$ - [F]
RewriteRule test index.php

Bu kurallar .php ile biten tüm istekleri yasaklamış olursunuz. Ancak, bu tür index.php içerir (/test (index.php yeniden yazar gelir) ve /test?f=index.php (index.php patlar ki) / şeklinde URL'ler querystring) hala izin verilir.

THE_REQUEST ihtiva the full HTTP request line sent by the browser to the server (e.g., GET /index.php?foo=bar HTTP/1.1)

Kolay bir çözüm. Inc olmayan tüm index.php dosyaları yeniden adlandırmak, daha sonra * erişimi reddetmek. Inc dosyaları. Ben projelerin bir çok kullanmak ve mükemmel çalışıyor.

Bunun yerine bilerek I self-contained Eğer doğrudan erişim istemediğiniz herhangi bir sayfanın üst kısmında, bu hala. Htaccess kuralları ile eşleştirilmiş olmalıdır olan bu ama ben daha güvenli hissediyorum etrafında bir değişken geçirmeden orada bir fail-safe htaccess hiç pisliklerini alırsa.

<?php
// Security check: Deny direct file access; must be loaded through index
if (count(get_included_files()) == 1) {
    header("Location: index.php"); // Send to index
    die("403"); // Must include to stop PHP from continuing
}
?>

Allow only 2 ip , all other will block

Order Deny,Allow
Deny from all
Allow from 173.11.227.73 108.222.245.179

bir klasördeki tüm dosyaları yerleştirmek. bu klasöre bir. htaccess dosyası yerleştirmek ve tüm inkar ona değer vermek. sonra klasörün dışına yerleştirilmiş index.php thats kullanıcı girişi ya da bir olaya dayanan sağ sayfalarını yankı var