2013-03-27 68 views
0

在我多年來所做的各種PHP登錄系統中,我嘗試了各種不同的方法來保護頁面。保護公衆頁面的安全

我總是使用.htaccess,它將所有請求路由到index.php。但是,如果您直接輸入某個頁面的地址(如果您知道),則會加載,這顯然不是很安全。

在一臺服務器上,我嘗試將public_html的以外的所有「安全」頁面。這很好。這意味着你不能再轉到'文件夾/產品/ product.php'。大!這意味着我可以將所有對該頁面的請求放在一個包含中,並完全控制誰瀏覽該頁面。

但是,我在一臺不同的服務器上遇到了一個問題,基本上它不允許我訪問httpdocs文件夾以外的任何東西。好吧,不完全正確,我可以訪問,打開FastCGI支持,但我會得到會話寫入錯誤。關閉它,並打開PHP作爲Apache模塊,我得到basedir restrictions

好的。那麼我怎麼能確定一個頁面是只有可以被我訪問?即使它在公共文件夾中?是否有某種.htaccess可以放在那裏,這會阻止任何人從外部訪問它?或者如果我密碼每個文件夾,密碼是否可用,這是否意味着我仍然可以包含這些文件?

我真的需要一個很好的最終解決方案。一個可以在所有服務器上工作的方法,並且我可以看到發生的唯一方法是將所有內容都保存在公用文件夾中。

+0

添加'與.htaccess''從all'否認。 – Yoshi 2013-03-27 08:37:04

+0

@Yoshi爲每個文件夾添加一個.htaccess? – Chud37 2013-03-27 08:41:26

+0

至少每一個在根層面(可以這麼說)。但它會被子文件夾繼承(只要它不被覆蓋) – Yoshi 2013-03-27 08:43:11

回答

2

如果你想禁止訪問的目錄和所有它的子目錄下,你可以添加一個.htaccessdeny from all。只要這不會被「更深」的htaccess文件覆蓋,就足夠了。

你也可能想要檢查「大」框架如何構造他們的代碼。 (例如symfony,zend等)。

延伸閱讀:

+0

非常感謝。我不知道這個規則。這是一個很大的幫助。 – Chud37 2013-03-27 09:22:12

1

一種方法是做這樣的事情,基本上禁止那些被運行爲頂級腳本:

在所有的終端,你希望成爲的,因爲你做的第一件事,設置一個全局旗。

<?php 
$GLOBALS['INSIDE_AN_ENDPOINT'] = true; 

然後,在每個包含文件中,只需確保在繼續之前設置了標誌。

<?php 
if (!isset($GLOBALS['INSIDE_AN_ENDPOINT'])) { header('Status: 403 Forbidden'); exit; } 
+0

我不喜歡那種方法。我不希望爲每個頁面添加一些內容以確保它正確加載。 – Chud37 2013-03-27 08:41:03