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


CI should I use defined BASEPATH on model and view?

根据我的理解,在CI中,出于安全原因,我们必须编写这行代码

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

放置在每个控制器页面的顶部,以防止该页面在控制器上单独运行。

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

提前感谢

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

CodeIgniter库存文件有这一行,因为它试图在几乎为零配置的情况下运行,这通常意味着用户已将所有内容放在web浏览器下。

但话虽如此,这并不意味着你的设置应该像那样。恰恰相反——只有您的index.php文件可以通过web访问,如果您这样做了,这些行就无关紧要了。

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

是的,出于安全考虑,这是必要的。它用于禁止直接访问您的views &通过浏览器获取models文件。如果你不包含这个,任何人都可以通过浏览器访问你的文件,这是一个风险。

但是,您可以通过以下代码

禁止通过application目录中的.htaccess直接访问您的文件
<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

添加

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

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