CI我应该在模型和视图上使用已定义的BASEPATH吗?

时间:2016-10-17 08:22:03

标签: php codeigniter security

据我所知,出于安全原因,我们必须编写这行代码

defined('BASEPATH') OR exit('No direct script access allowed');

在每个控制器页面的顶部,以防止页面自己运行控制器。

但是我想知道是否有必要在每个视图和模型页面上编写此代码?正如我通过google和stackoverflow搜索的那样,没有人在视图和模型页面上清楚地解释。

提前谢谢

3 个答案:

答案 0 :(得分:1)

不,你不一定需要这样做。

CodeIgniter库存文件具有此行,因为它尝试以几乎为零的配置运行,这通常意味着用户已将所有内容放在webroot下。

但话虽如此,但这并不意味着您的设置应该是这样的。恰恰相反 - 只有你的index.php文件可以通过网络访问,如果你这样做,这些行并不重要。

当然,您可以通过Apache中的.htaccess规则或nginx下的正确location块拒绝访问框架文件。

答案 1 :(得分:0)

是的,这对于安全问题是必要的。这是为了禁止直接访问您的views& models文件通过浏览器。如果你不包括这个,任何人都可以通过浏览器访问你的文件,这是一个风险。

但是,您可以通过以下代码禁止通过.htaccess目录中的application直接访问您的文件

<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

答案 2 :(得分:0)

添加

总是更安全
 defined('BASEPATH') OR exit('No direct script access allowed');

在您的模型和视图中,因为如果您的服务器不允许.htaccess或者它被覆盖,则可以访问该脚本。