限制直接文件访问Nginx和Codeigniter


Restrict direct file access Nginx and Codeigniter

我正在寻找一种干净的方法来限制对我的CodeIgniter PHP站点中的直接文件的访问,该站点运行在nginx上。

我有一些.phar.json文件在web根目录中浮动,还有一些文件不会由CodeIgniter处理。

如果我直接在浏览器中键入.php文件的路径,我使用的是

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

拒绝直接脚本访问。然而,攻击者可能会以这种方式映射我的目录结构(如果他/她发现我在使用CodeIgniter)。

我想要的是一种方法来限制所有来自web服务器的访问(在我的例子中是nginx)。一旦进入生产阶段,我就知道我只想让用户使用几个url片段。

如何以一种良好的可扩展方式限制对这些资产的访问,但仍然允许自由检索我的资产?

编辑

如果我不包括,我基本上想要一种保护自己的方法

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

在PHP脚本的顶部。这就是我的可扩展性。我想可能有一个很好的"一刀切"的解决方案可以应用于nginx。

将任何不应该是公共的东西(例如CodeIgniter)放在公共目录之外。

例如,如果你的根是/var/www/htdocs,那么把你的东西放在/var/www,比如/var/www/codeigniter。然后,您可以在/var/www/htdocs中删除一个index.php文件,并从中包含CodeIgniter。

此处请小心。。我不确定您是否希望通过http请求访问.json。。

但以下是如何在.htaccess文件中做到这一点:

# Prevent direct access to certain filetypes and directories
<Files ~ "('.(phar|json))$">
Order deny,allow
Deny from all
</Files>

我强烈建议您只需将私人文件放在一个可以chmod的目录中,这样就不能在应用程序之外访问它们(如果这是您想要的)。