【问题标题】:Map only accessible for webserver and not for other users地图仅供网络服务器访问,其他用户不可访问
【发布时间】:2011-11-24 14:16:33
【问题描述】:

在我的网站上,我使用了很多包含,大多数包含应该只能供网络服务器访问,而不能供世界其他地方访问。因此,如果我在我网站的页面中包含“../include_map/file.php”,则世界上其他用户应该无法使用 URL 请求(“website.com/include_map/file.php”) .是否有可能使用包含文件来保护地图,以便只有网络服务器可以包含这些文件?

【问题讨论】:

    标签: php ajax chmod


    【解决方案1】:

    PHP 可以包含来自服务器硬盘驱动器上各处(也包括非公共目录)的文件。

    例如,如果您的 htdocs 位于 /var/www/domain/htdocs/ 您还可以包含位于 /var/www/domain/include_map 的文件,而不允许网络服务器从那里读取(如果配置正确)。

    然后,您可以使用 www.yourdomain.com/../include_map/file.php 进行测试以访问该文件。 如果您仍然可以这样访问它,则需要注意您的网络服务器配置,以防止其他人读取您的日志和其他内容。

    另一种方法是通过 .htaccess 或 apache config 拒绝对目录的访问。 php 仍然可以包含文件,而用户无法从 Internet 访问它们。

    在 apache 配置中,您可以执行以下操作:

    <Directory /inlcude_map>
       Order Deny,Allow
       Deny from all
    </Directory>
    

    在你可以写的 .htaccess 文件中

    Order Deny,Allow
    Deny from all
    

    .htaccess 文件应位于您要保护的目录中。请咨询您的服务器提供商,了解哪种方式最适合您。如评论中所述,您必须首先确定 .htaccess 是否适合您。

    【讨论】:

    • 注意:.htaccess 可能被禁用,或者它可能是另一个不支持 .htaccess 并且需要在服务器级别进行配置的网络服务器软件(例如轻量级 httpd 或 nginx)。
    • 我只是想指出你不应该依赖 .htaccess。
    【解决方案2】:

    你可以按照zuloo说的去做。如果您希望它在任何情况下都能正常工作,您可以为此使用一个常量。

    文件包括:

    define('IS_APP', true);
    require_once('some/file/to/include.php');
    
    // your code here
    

    包含的文件:

    if(!defined('IS_APP')) {
       die('No direct access');
    }
    
    // your code here
    

    【讨论】:

    • 谢谢,这在所有相对链接上都可以正常工作,例如包含 Javascript 文件 src="../files/javascript.js",但使用绝对链接会出现问题。我在我的 https 文件中使用绝对链接,我不确定我是否可以安全地使用 https 的相对链接,但我不这么认为......
    • 请检查 https 和 http 是否使用相同的文件。这应该适用于所有类型的网址。
    • 是的,他们使用相同的文件.....但是就像我说的,对于 http,我使用相对链接。对于 https 我必须使用绝对链接...
    • 不应该与使用常量的方法相关...我需要一个代码 sn-p ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2023-03-17
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2014-03-23
    相关资源
    最近更新 更多