我遵循MVC模式在我的PHP页面中。我为每个视图页面创建了一个控制器页面,并且它将与模型页面交互。我已在每个查看页面的顶部检查了用户的登录名。但我从来没有检查控制器页面。由于任何人都可以直接进入控制器页面并可能更改数据库内容。是否需要检查每个控制器页面的登录功能
所以任何人都请告诉我,是否可以通过控制器页面进入数据库。是否需要检查控制器页面中的用户登录。
我遵循MVC模式在我的PHP页面中。我为每个视图页面创建了一个控制器页面,并且它将与模型页面交互。我已在每个查看页面的顶部检查了用户的登录名。但我从来没有检查控制器页面。由于任何人都可以直接进入控制器页面并可能更改数据库内容。是否需要检查每个控制器页面的登录功能
所以任何人都请告诉我,是否可以通过控制器页面进入数据库。是否需要检查控制器页面中的用户登录。
如果我理解正确,您将在控制器页面的每个链接页面的顶部(假设您的index.php)进行LOGIN检查。
如果是这样,那么您不需要在每个链接页面的顶部进行登录检查,只能从index.php中进行检查。如果您的登录成功位于index.php的顶部,那么您将继续包含您的目标视图页面。
例如(在你的index.php)
<?php
if (!$user->checkSession())
header('Location: login.php');
if ($_GET['p'] == 'viewPageName')
include('modules/viewPageName.php')
elseif and so on
?>
编辑
现在我有一个更好的了解你的问题。
解决方案1 :
在你的index.php(顶部位置)
<?php
define('DIRECT', true);
your login check, etc...
?>
在你其他文件,在顶部
<?php
if (!defined('DIRECT')) die('No direct access is allowed');
other code, etc...
?>
放解决方案2:
将.htaccess文件放入所有其他文件所在的文件夹中,并拒绝直接访问这些文件。
放入.htaccess中的以下内容:
deny from all
解决方案3:
好吧,假设你已经在index.php文件中定义的$ DB文件,并在设置类你index.php,您的其他文件将返回错误,因为您没有在其中定义您的数据库类。
换句话说,如果你定义了$ db = new Database();在您的index.php中,如果您尝试直接访问,您的其他文件将会出错,因为$ db尚未在其中定义。
@克里斯,是的,你的假设是正确的,但我有控制器页面中的数据库intract所以如果我直接进入控制器不是从查看页面,那么它可能会破坏数据库中的内容.. –
如果我指出一个URL绕过index.php? – tomexsans
@tomexsans,是的,绕过index.php, –
什么框架? – sdjuan
没有使用的框架 –
后面的MVC模式 –