我的问题似乎很基本,但是我不知道如何在Google中进行搜索。我希望我的网站内容只能通过全局get变量访问。就是这样。
<?php
include("../backend/connection.php");
if(isset($_GET['page'])){
if ($_GET['page'] === "register"){
include ("pages/register.php");
}
elseif($_GET['page'] === "login"){
include ("pages/login.php");
}
elseif($_GET['page'] === "home"){
include ("pages/home.php");
}
}
?>
因此,用户可以通过“ www.mywebsite.com?page=register”访问注册页面。但是他也可以使用“ www.mywebsite.com/pages/register.php”访问该页面。这是个问题。连接文件仅包含在我的索引文件中。 register.php文件包含需要数据库连接的代码,并且由于该数据库连接仅包含在索引文件中,因此用户将获得错误。通过该错误,他将获得有关我的网站目录的信息,并且他可能会尝试继续挖掘直到找到一个漏洞为止。
我认为以下代码可以解决问题。
<?php
include("../backend/connection.php");
if(isset($_GET['page'])){
if ($_GET['page'] === "register"){
include ("pages/register.php");
}
elseif($_GET['page'] === "login"){
include ("pages/login.php");
}
elseif($_GET['page'] === "home"){
include ("pages/home.php");
}
}elseif(!isset($_GET['page'])){
header("www.mywebsite.com?page=home");
}
?>
我认为该代码是一种快速解决方案,但是我知道有一种更好的方法可以做到这一点,我需要一些建议。
答案 0 :(得分:2)
将文件夹pages
移动到文档根目录之外,并用以下命令加载它们:
include ("../pages/register.php");
就像处理../backend/connection.php
一样。
这样,没有人可以通过Web服务器从外部直接访问它们,但是仍然可以在您的PHP代码中访问它们。您也不需要检查是否在所有页面上都定义了一些常量。
多数现代框架也是这样做的。他们在Web根目录中只有一个index.php
文件,外面的所有其他代码(包括视图)
答案 1 :(得分:1)
您可以定义常量,例如
define('APP_LOADED', true);
在随附的脚本中检查是否已定义常量,如果未定义则退出
if (!defined('APP_LOADED')){
exit();
}