所以我有一个相当无聊的问题,我一直在读这个主题很多,但找不到我想要的答案,所以请耐心等待......
我有一个相当简单的网站,我一直在设计,包括以下内容:
1)我希望用户能够通过在浏览器中输入网址直接访问的HTML和PHP文件。
2)仅在1)内的iframe内查看的HTML文件(不要问我为什么使用iframe)
3)由1)调用的PHP文件,例如提交表单数据时。我想2)和3)可以访问1),但用户不能通过输入网址直接访问。
4)图像和包括等
5)也许这是一个完全不同的问题,但我也有一个MySQL数据库。
据我所知,我可以通过将它们放在网站目录中的私人/公共文件夹中来控制对文件的访问?我的问题是我的目录结构应该如何,我应该把1),2),3)等放在哪里?
非常感谢你的帮助。
答案 0 :(得分:1)
你的httpdocs
目录是你的Apache DocumentRoot
(在/etc/httpd/conf/httpd.conf
中找到)或你的vhost DocumentRoot
(如果你已经定义了vhosts),所以假设Linux:< / p>
1,2,4应该进入/var/www/vhosts/sitename.com/httpdocs/
- 这些可以通过浏览器直接访问。
3应该进入/var/www/vhosts/sitename.com/library/
。当用户提交数据时,它应该到达处理程序页面(用户必须能够“看到”此页面),该页面包含此库目录中的必要文件。只要您的服务器配置为为所有* .php脚本运行PHP,这可能是不必要的,因为隐藏PHP脚本几乎没有什么好处。如果您不希望他们直接调用它们并且您希望将它们保存在可公开访问的区域中,请尝试:
公共剧本:
define('INVOKED_BY_SCRIPT', true);
...
include "../library/hiddenScript.php";
“隐藏”脚本:
if (!defined('INVOKED_BY_SCRIPT') || true !== INVOKED_BY_SCRIPT) {
echo "Cannot invoke directly";
exit;
}
您的MySQL数据库应该在/var/lib/mysql
中,或者默认情况下安装在哪里。请务必运行MySQL安全脚本mysql_secure_installation
以删除默认密码和测试数据库。
答案 1 :(得分:1)
您的目录结构无关紧要。 所有用户都可以访问某些用户可以访问的任何网址。您只能控制该网址的内容。
如果您确实需要限制对1)加载内容的访问,则必须使用PHP来提供内容。该PHP脚本可以检查一些参数或登录凭据或确保URL已被1)加载的东西。
但是,由于您没有描述您遇到的具体问题,因此很难给出明确的答案。例如,方法需要的安全性有很大差异。例如,检查URL是否使用JavaScript在框架内加载是相当简单的,但检查并不难以规避。
答案 2 :(得分:0)
除了include之外的所有内容都应该在你的public_html目录中。
对于3,不可能有一个可由表单引用的PHP脚本,但用户无法通过在地址栏中输入地址来访问它。您可以做的最好的事情是检查发布变量以查看是否已发布任何内容。您可以检查HTTP_REFERER变量,但我不建议这样做,因为它不能被依赖。
答案 3 :(得分:0)
您无法仅在iframe中查看HTML
1)没有调用任何文件。它是用户浏览器调用您的文件。
所以,只需保留你的目录结构,没关系。
答案 4 :(得分:0)
您可能正在寻找的是一种将可执行文件“隐藏”在文档根目录之外的方法,您可以使用以下目录结构来执行此操作:
然后,对于public_html / index.php,你只需要:
<?php
require_once('../private_index.php');