Bir dosyayı görüntülerken bir kullanıcı önlemek için bir yolu var mı ama başka bir dosyaya dahil olarak yine kullanabilirsiniz PHP?
Bir dosyayı görüntülerken bir kullanıcı önlemek için bir yolu var mı ama başka bir dosyaya dahil olarak yine kullanabilirsiniz PHP?
Eğer kullanın
define('APP_RAN');
sonra onu içeren dosya ve koydum
if(!defined('APP_RAN')){ die(); }
bunları doğrudan ulaşmak eğer dahil dosyaları öleceğini.
Muhtemelen olsa DocumentRoot yukarıdaki dahil tüm dosyaları koymak için daha iyi olurdu.
Örneğin, dizin sayfası olarak ise
/my/server/domain/public_html
Sen dahil dosyaları koymak gerekir
/my/server/domain/
Benim öneri:
<?php
if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) {
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>\r\n<title>404 Not Found</title>\r\n</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on this server.</p>\r\n</body></html>");
}
else {
// your code
}
?>
Doğrudan başka denir eğer 1.) Bunun bir hata atar denetler
2). Onu belirsizlik aracılığıyla güvenlik eklemek için (orijinal 404 sayfa veya basit ile karşılaştırın lütfen bu sayfayı dahil) 404 standart apache hata sayfası çıktılar
Dosyası (PHP) ">" için beklemez canlı ortamına yüklenen ise 3..) Else parçalı kısmi yürütme önler. Lütfen dahil dosya yalnızca bir işlev / bir sınıf varsa bunu gerekmez.
I Chacha102's solution için gitmek istiyorum.
Ayrıca, soru başlığı «how to check strong>», aynı zamanda kullanarak bir değişken tanımlamak zorunda kalmadan yapabilirsiniz diyor
// secret.php is the name of this file.
if($_SERVER["SCRIPT_FILENAME"]=='secret.php') die();
if (!defined('FLAG_FROM_A_PARENT'))
// Works in all scenarios but I personally dislike this
if (__FILE__ == get_included_files()[0])
// Doesn't work with PHP prepend unless calling [1] instead.
if (__FILE__ == $_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_FILENAME'])
// May break on Windows due to mixed DIRECTORY_SEPARATOR
if (basename(__FILE__) == basename($_SERVER['SCRIPT_FILENAME']))
// Doesn't work with files with the same basename but different paths
if (realpath(__FILE__) == realpath($_SERVER['DOCUMENT_ROOT'].$_SERVER['SCRIPT_NAME']))
// Seems to do the trick
Upvote bu yararlı bulursanız!
Apache altında, bu kolaydır:. Bir web tarayıcı erişimi engellemek için htaccess bir <Files>
direktifini ekleyin. Bu PHP includes
için geçerli değildir, ve (genellikle tek bir dizinde birlikte tüm erişilebilir olmayan dosyaları koymak için çalışacağım olsa) tarayıcı erişimi birkaç dosya gizlemek için iyi bir uygulamadır.
<Files="myprivatefile.php">
deny from all
</Files>
Farklı bir web sunucusu altında, belge kök dışarı dosyayı gizleyebilirsiniz, ancak (betiklerinizin open_basedir
'sıkı bir şekilde d iseniz gibi) bazı durumlarda altında, bu iş olmaz.
. Sadece $_SERVER
değişkenleri ile çözümleri genişletmek için - aşağıda küçük bir php dosyası ve yorumların içinde Ubuntu yaptım bash
test bir kopyasıdır; varlık noktası, bu değişkenler erişim türüne bağlı olarak biraz değiştirebilirsiniz, ve sembolik bağların başka yankı açıklamada, sözdizimi renk tatili içinde (note also, in the code below I have to escape the '?\>
'kullanılmadığını, ters eğik çizgi kaldırmak çalışıyor ise kod sub>):
<?php
function report($label, $value) {
printf ("%23s: %s\n", $label, $value);
}
report("DOCUMENT_ROOT.PHP_SELF", $_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'] );
report("SCRIPT_FILENAME", $_SERVER['SCRIPT_FILENAME'] );
report("__FILE__", __FILE__ );
report("PHP_SAPI", PHP_SAPI );
/*
# the test (bash):
home~$ mkdir /tmp/ptest
home~$ cd /tmp/ptest/
ptest$ ln -s /real/path/to/varcheck.php .
ptest$ echo '<? require_once "varcheck.php"; ?\>' > varcheckincl.php
# ... and in a separate terminal, run
# php (>5.4) cli server at same (/tmp/ptest) location:
ptest$ php-5.4.10 -S localhost:8000
# back to first terminal, the test - and output:
ptest$ php varcheck.php
DOCUMENT_ROOT.PHP_SELF: varcheck.php
SCRIPT_FILENAME: varcheck.php
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli
ptest$ php -r 'require_once "varcheck.php";'
DOCUMENT_ROOT.PHP_SELF: -
SCRIPT_FILENAME:
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli
ptest$ php varcheckincl.php
DOCUMENT_ROOT.PHP_SELF: varcheckincl.php
SCRIPT_FILENAME: varcheckincl.php
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli
ptest$ wget http://localhost:8000/varcheck.php -q -O -
DOCUMENT_ROOT.PHP_SELF: /tmp/ptest/varcheck.php
SCRIPT_FILENAME: /tmp/ptest/varcheck.php
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli-server
ptest$ wget http://localhost:8000/varcheckincl.php -q -O -
DOCUMENT_ROOT.PHP_SELF: /tmp/ptest/varcheckincl.php
SCRIPT_FILENAME: /tmp/ptest/varcheckincl.php
__FILE__: /real/path/to/varcheck.php
PHP_SAPI: cli-server
*/
?>
Sen bir kodlayıcı ve yükleyici PHP uzantısı kullanmak zorunda: