保护包含在include中的页面(“”);

问题描述:

目前学习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

这也可以使用.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

在我看来,最方便的方法是将文件放在www-root之外,并将它们包括在内。因此,文件结构是这样的:

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

你将包括index.php中像这样的文件:

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

通过这种方式,他们不是从任何地方直接访问。

+0

谢谢你,这是非常有用的技巧。 – denski