2017-03-03 67 views
0

目前學習PHP和使用include包括頁面元素,如保護包含在include中的頁面(「」);

include('menubar.php'); 
include('content.php'); 
include('footer.php'); 

它們都稱爲由說private.php

我想知道什麼,你認爲這是保護的最便捷的途徑這些頁面在打字的情況下example.com/content.php

我目前使用類似

<?php // 
require("common.php"); 

// Check to see if the user is logged in 
if(empty($_SESSION['user']) || $_SERVER['PHP_SELF'] == "content.php") 
{ 
    // if either is true redirect to index.php 
    header("Location: index.php"); 
    die("Redirecting to index.php"); // login page 
} 

但想知道還有什麼我可以/應該做的?

注意:$ _SESSION ['user']在每個會話開始時或登錄時進行驗證。

+0

對於離,如果你使用Apache,您可以使用htaccess的否認一切,但在這[文章]你的入口點狀(http://stackoverflow.com/questions/1340001/deny-直接訪問所有的PHP文件,除了index-php) –

+0

謝謝丹,我想能夠設計登錄頁面,所以我遠離htaccess。 – denski

回答

1

這也可以使用.htaccess文件。 @ 1615903的回答很大程度上依賴於此。

理解這將清除完整的概念。

請求(來自用戶的Web瀏覽器)。你的web服務器(在這個例子中是Apache)收到這個。首先,它檢查權限。然後它查看剩下的配置,並最終將請求URI映射到文件系統。現在,最後,它可以檢查權限以及.htaccess。

如果其中任何權限檢查失敗(例如,拒絕所有權限),Apache將停止處理該請求,併發回一個錯誤(或者在HTTP基本身份驗證的情況下請求用戶名爲&的密碼)。

一旦所有的權限檢查通過,Apache會查看該文件,並注意到它的.php文件。在你的(或你的虛擬主機的)Apache配置中的某處,有一個AddHandler指令告訴Apache將這個請求傳遞給PHP引擎(可能是mod_php,或者通過fast cgi)。 (對於大多數文件,它將文件的內容發送到瀏覽器,但腳本文件是特殊的,因爲那個AddHandler。)

現在,PHP讀取您的腳本文件。然後它也直接讀取包含文件。這不會通過Apache返回,因此諸如.htaccess之類的內容不適用。這也意味着你的PHP包含了不需要在你的文檔根目錄下。它們可以位於PHP進程可以訪問的任何地方(基於UNIX權限和PHP配置)。在你的php.ini中設置include_dir可以很容易地把這些放在任何地方。

客戶端JavaScript由用戶的瀏覽器運行。它不是服務器端解釋的(就像PHP一樣)。所以用戶必須能夠訪問它,就像用戶必須能夠訪問你的.html文件一樣。

因此,簡而言之:

你可以把從所有在你的PHP包含目錄拒絕一個.htaccess。 PHP的include指令不通過Apache,所以它不會在意。理想情況下,您甚至不會將您的PHP包含目錄放在您的文檔根目錄下。

你不能這樣做JavaScript,因爲JavaScript訪問通過Apache(就像.html,.png等訪問一樣)。

編號:protect php includes (with htaccess?)

+0

在閱讀了Dan對我原來的問題的評論之後,現在更有意義了。謝謝你。這非常有幫助。 – denski

1

在我看來,最方便的方法是將文件放在www-root之外,並將它們包括在內。因此,文件結構是這樣的:

/some-folder 
    common.php 
    /www-root 
     -index.php 

你將包括index.php中像這樣的文件:

include("../common.php"); 

通過這種方式,他們不是從任何地方直接訪問。

+0

謝謝你,這是非常有用的技巧。 – denski