我自己制作了一个非常小的CMS。登录后,会话设置。
CMS包括某些图像,php页面等。
这些页面还可能包含将数据添加到数据库的表单。
现在的问题是你实际上可以使用一个地址来到显示表单的页面,即;
domain.com/mycms/includes/addpage.php
你会如何建议保护这个?
注意:当我登录时,一切都必须工作,只是从外面它可能不会显示表格。我可以检查会话是否存在,但我想知道是否有更好更简单的方法。
答案 0 :(得分:8)
首先,如果你要包含PHP文件,你真的不应该把它们放在公共网络根目录。
如果无法做到这一点,另一种方法是在index.php
中定义常量(假设您将此作为主要入口点)并检查此常量是否已设置在每个包含文件中,以防止直接访问这些文件。
例如:
// index.php:
define('INDEX_LOADED', true);
// /includes/addpage.php:
if (!defined('INDEX_LOADED')) die('no direct access allowed');
答案 1 :(得分:1)
旨在将您的文件放入
domain.com/的私有强> /includes/addpage.php
然后从你的页面做
之类的东西包括( '../私人/包括/ addpage');
答案 2 :(得分:1)
我总是使用扩展名.inc.php来处理不应该从外部访问的PHP文件。然后我否认从外面可以看到扩展名。对于apache,您可以在主目录中的.htaccess文件中执行此操作:
<Files ~ "\.inc\.php$">
Order allow,deny
Deny from all
</Files>
此外,如果您使用某个框架或者您有一个类(或包含)目录,则可以拒绝访问整个目录(apache):
<Location ~ "^/(classes|framework)"
Order allow,deny
Deny from all
</Location>
其他网络服务器有其他方法可以禁止文件。如果你想要它通用和便携 - Aron Rotteveel的建议是最好的。
您可以保留仅包含类声明的文件不受保护 - 如果它们从外部运行,则不会运行任何代码。确保主机的关闭的php ini设置关闭
答案 3 :(得分:0)
如果有必要将私人文件保存在公共文件夹中,您可以使用CHMOD权限(如700
)保护它