2009-09-11 43 views
2

是更好地檢查是否有定義的常量,檢查URL,或其他任何方式....使用什麼檢查來防止直接訪問頁面(使用PHP)?

if($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF']) 

if(!defined(INCLUDED)) 

做什麼方法你檢查如果一個文件被直接訪問,那麼,防止直接訪問頁面是非常重要的...(我認爲一個網站應該按照它的設計方式工作,所以直接訪問會違反這個規則,但是)你的想法是什麼

+0

你是在這裏發佈的同一個人嗎? http://stackoverflow.com/questions/1408201/redundancy-in-php-safer-or-unnecessary/1408263#1408263我在這個問題上發佈了一個答案,可以回答你在這裏問的問題。 – DisgruntledGoat 2009-09-11 01:25:26

回答

2

定義一個常量可能是最好的方式去做,而不需要深入研究代碼......只需在包含行之前定義一個常量,並檢查它是否在包含文件中定義...

主文件

<?php 
define("IS_INCLUDED",true); 
include "included_file.php"; 
?> 

included_file.php

<?php 
if(!defined("IS_INCLUDED")){ 
header("Location: error_page.php"); 
} 
?> 

如果訪問該網頁這樣一來,常量不會被定義,它們會被重定向到任何你想要的地方。

6

如果你不希望他們能夠被直接訪問,你不需要破解你的文件。只需將它們放置在公共可查看目錄之外的目錄中,並且它們不能被公衆訪問。您的PHP腳本仍然可以輕鬆訪問它們。

+2

另一點,如果您不能將文件放在Web目錄之外,請使用.htaccess保護目錄並將其放在那裏。 – MitMaro 2009-09-11 01:23:17

4

有三種方法解決這個問題,我經常看到/使用:

  1. 如果該文件是不是意味着要通過URL直接加載,把它放在一個包含目錄(在PHP中定義。 ini)而不是在文檔根目錄下;
  2. 如果你不能這樣做(1)在你的文檔根目錄下創建一個或多個像'include'這樣的目錄,並用mod_rewrite限制對它們的訪問;或
  3. 我傾向於發現,我所包含的任何文件都只包含函數,因此如果有人直接訪問它並不重要。

作爲(2)的一個例子:

RewriteEngine On 
RewriteRule ^include/ [R=404,L] 

這發出未發現錯誤任何企圖文件打包括目錄。