我正在玩学习新东西,目前正在努力登录和退出我的网站,只有在我登录时才能访问不同的页面。我目前有一个登录表单会登录我。我有一个会话变量集,可以检查是否有人登录,如果没有重定向到登录页面。这是它的工作原理,以及我的问题。我有一个登录页面,一旦登录将指示您说Home.php。这一切都很好,除了,我可以从网址直接转到home.php。即使此人未登录,mysite.com/home.php也允许访问。
为了解决这个问题,我尝试了两件事。我试过Home.php:
<?php
session_start();
if(isset($_SESSION["Authenticate"])){
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<?php include "structure/header.php" ?>
<div class="cmsPanel">
<a href="php/cms/logoutProcess.php">Logout</a>
<div id="AddEditor">
<form method="POST" action="php/cms/newEditor.php">
<input class="loginFields" type="text" name="name" placeholder="First Name">
<input class="loginFields" type="email" name="email" placeholder="Email">
<input type="submit" value="Create New Editor">
</form>
</div>
<div id="manageEditors">
<div>
</div>
</div>
</div>
<?php include "structure/footer.php" ?>
</body>
</html>
}
else{
header("Location: login.php");
}
?>
哪个不起作用。我最终会得到一个错误500和一个空白页面。因此,我试图提出一个解决方案,我认为我可以做这样的事情:
<?php
session_start();
if(isset($_SESSION["Authenticate"])){
include_once('php/cms/EditorPanel.php');
}
else{
header("Location: login.php");
}
?>
哪个有效,除了你可以去mysite.com/php/cms/Editorpanel.php并绕过登录。这也让我意识到有人也可以直接访问mysite.com/php/cms/newEditor之类的东西.php和我在服务器上的任何其他后端脚本。我个人希望能够在home.php上使用第一次尝试,但我还需要了解如何防止任何人访问我服务器上的其他后端脚本。
我以为我可以在cms文件夹中使用htaccess并从All添加Deny,但是这会阻止任何后端脚本运行。我可以使用cgi-bin吗?如果是这样,我究竟如何访问它?在我的ftp上它不允许我在根目录www之外添加任何内容。有没有办法在已建立的主机内部指定一个新的根目录?
答案 0 :(得分:0)
你必须在用户注销时清除会话,并且在每个页面上你必须检查会话是否为空,也许你这样做但是仔细检查代码。
答案 1 :(得分:0)
许多Web框架使用的解决方案是使用某种调度程序。
因此,您可以在网站的根目录中添加.htaccess文件,如下所示:
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php to dispatch request
RewriteRule . index.php
在您放置源代码的目录中,您可以添加一个拒绝所有请求的htaccess
deny from all
在index.php里面你只需要解析$ _SERVER ['REQUEST_URI']来查看用户请求的网址,并根据需要包含文件,某种路由器功能。
结帐Slim框架以查看更强大的方法
您可以使用的最简单的事情如下:
内部index.php
var_dump($_SERVER['REQUEST_URI']);//For debugging purposes, so you could check the url
if(strstr($_SERVER['REQUEST_URI'],"private.php")){//if the url requested the file private.php inside the private directory
require_once './private/private.php'; //include the file
}
如您所见,用户无法直接访问任何源代码,在if语句中您可以添加所需的所有会话验证,在此之前您可以预处理请求。这样,您就可以完全控制用户可以访问的每个文件
答案 2 :(得分:0)
Home.php是一个混有html的php脚本,没有分离。你需要将你的HTML与你的PHP分开。在开始html之前关闭你的php标签。这应该有助于你的第一个问题。关于保护资产的第二个问题@Pablo Flores的答案应该指出正确的方向。
<?php
session_start();
if(isset($_SESSION["Authenticate"])){
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<?php include "structure/header.php" ?>
<div class="cmsPanel">
<a href="php/cms/logoutProcess.php">Logout</a>
<div id="AddEditor">
<form method="POST" action="php/cms/newEditor.php">
<input class="loginFields" type="text" name="name" placeholder="First Name">
<input class="loginFields" type="email" name="email" placeholder="Email">
<input type="submit" value="Create New Editor">
</form>
</div>
<div id="manageEditors">
<div>
</div>
</div>
</div>
<?php include "structure/footer.php" ?>
</body>
</html>
<?php
}
else{
header("Location: login.php");
}
?>