Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拒绝访问MVC目录结构中的专用文件夹_Php_.htaccess_Directory Permissions - Fatal编程技术网

Php 拒绝访问MVC目录结构中的专用文件夹

Php 拒绝访问MVC目录结构中的专用文件夹,php,.htaccess,directory-permissions,Php,.htaccess,Directory Permissions,在我的MVC目录结构中有一个私有文件夹,我想拒绝对它的所有访问。只有通过“仅包含”才能访问此文件夹及其包含的文件 对于公用文件夹,任何人都应该能够访问它,因为这是我的视图 root index.php是我的条目文件,它应该能够包含并执行private index.php脚本 有谁能帮我解决这个问题,或者为我指明实现这一目标的正确方向 private model controller core config.ini.php index.php ...

在我的MVC目录结构中有一个私有文件夹,我想拒绝对它的所有访问。只有通过“仅包含”才能访问此文件夹及其包含的文件

对于公用文件夹,任何人都应该能够访问它,因为这是我的视图

root index.php是我的条目文件,它应该能够包含并执行private index.php脚本

有谁能帮我解决这个问题,或者为我指明实现这一目标的正确方向

private
    model
    controller
    core
    config.ini.php
    index.php
    ...
public
    stylesheets
    signup.php
    login.php
    index.php
    ...
index.php

为您不希望直接访问的所有文件夹添加此.htaccess

<Files *.php>
    Order Deny,Allow
    Deny from all
</Files>

如果您使用的是Apache,典型的解决方案是在./private中放置一个.htaccess文件,其中包含:

Deny from all 
我也同意hakre的观点,那就是它对公共目录下的webroot更有意义

另一种解决方案是将webroot设置为公共的,然后将private移到webroot目录之外

其中www是您的webroot。

有两种方法:

1:正确的方法

/homedir/-您的网站在哪里

/homedir/private/-您的私有文件所在的位置

/homedir/httpdocs/-网站的公共部分

2:另一种方式

/httpdocs/private/-private文件

/httpdocs/private/.htaccess-订单允许,拒绝拒绝来自所有

/httpdocs/-其余文件

但是,您应该知道,如果您的Web服务器挂起或更改某些特定设置,您的.htaccess文件可能会处于非活动状态

这意味着您的所有私人文件将通过浏览器变得可用

这就是为什么首选第一种方式而不是.htaccess限制

还有什么可能?代码级别限制:

在每个公共php脚本中定义一个常量:

defineMY\u SECRET\u常数,1

在每个私有php脚本中,检查是否在代码的第一行定义了常量:

如果!definedMY_SECRET_常量{die无法直接打开文件。}


将index.php移到公用文件夹中,因为它是您的输入文件。将Web服务器的webroot配置为公用文件夹。做了,你本来应该做的。你的问题是什么?你也写.htaccess。到目前为止你做了什么?除了我第一条评论中的建议外,您还可以将Web服务器配置为拒绝访问某些资源,或者更好地只允许访问您希望允许访问的资源。这样就不容易出错,因为我无法访问直接服务器设置,所以我认为htaccess是我的最佳选择。你能用该域的主机设置指定webroot吗?如果是,请使用第一条评论。如果没有,仍然使用第一条注释,然后查看此处和类似内容:-…好吧,比方说,在webroot中不包含配置文件是一种很好的做法,这样它们就不会被托管。听起来像是先决条件而不是后决条件。还要确保您的应用程序对目录遍历攻击是安全的-请阅读此处了解更多信息:
site/private/...etc...
site/www/index.php
site/www/stylesheets/...etc...