我正在使用PHP和MySQL创建一个Web门户,供用户使用单点登录方法登录和访问各种工具。一些工具包括phpMyAdmin和Piwik。着陆页将显示他们可以使用的所有工具,而无需单独登录。
会话称为“门户网站”。
我有以下文件: index.php - 检查它们是否已登录。如果已登录,则显示包含工具列表的页面。
login.php - 提供登录表单,创建会话,并在获得授权后重定向回index.php
logout.php - 提供了一个用于销毁会话的注销功能。
由于我在过去的4年里没有使用过PHP,所以我发现很多东西都有可能发生变化。
以下是每页使用的脚本。
的index.php
<?php
session_start();
if(!isset($_SESSION['user']) || (trim($_SESSION['pass']) == '')) {
header("location: login.php");
exit();
} else }
// show list of tools (secure area)
}
?>
的login.php
<?php
if (!empty($_POST)) {
session_set_cookie_params(0, '/', '', 0); // NOT SURE WHAT THIS DOES?
session_name("Portal");
session_start();
// check if credentials match
...code...
// if credentials are ok
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
session_write_close();
header('Location: index.php');
} else {
// show login form
}
?>
logout.php
<?php
session_start();
$_SESSION = array();
if (ini_get("session.use_cookies")) { // !not sure what all this below does!
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 4200,
$params["path"], $params["domain"], $params["secure"], $params["httponly"]);
}
session_destroy();
header('Location: http://.../index.php');
?>
如何删除特定会话,即Portal?我在根域有另一个登录来访问报告,我不希望有权访问的用户都从两个会话中注销,而只是登录门户。
我的编码中是否有任何需要改进的内容可以改善/增强安全性?
谢谢!
答案 0 :(得分:0)
您似乎没有任何服务器端验证。任何用户都可以在登录字段中插入他们想要的内容,然后访问“安全区域”,因为他们插入登录字段的任何内容都在会话中。如果您没有验证任何内容,我建议将登录信息放入数据库,当用户登录时,他们必须具有与数据库中的凭据相对应的匹配凭据。
另外,index.php页面的else {}面向错误的方向。这应该会出错。
<强>的index.php 强>
<?php
session_start();
if(!isset($_SESSION['user']) || (trim($_SESSION['pass']) == '')) {
header("location: login.php");
exit();
} else {
// show list of tools (secure area)
}
?>
答案 1 :(得分:0)
嗯,您的代码存在一些问题。
首先,您必须在{/ strong> session_name
之前致电session_start
(请参阅manual)。
此外,请勿在会话中提供敏感数据!
如session_set_cookie_params的文档中所述,您也可以之前致电session_start
:
session_set_cookie_params(3600, '/', '.yourdomain.com', false, true); // Notice the dot before the domain
这将允许您访问此域中所有应用程序中的会话。
我不知道你如何使用多个应用程序来完成这项工作,但如果他们支持单点登录,你就可以没有将密码放在那里。