在我验证用户登录信息后,我为他们创建了这个会话:
$_SESSION['username']= $userName;
然后,我像这样重定向他们:
header('Location:www.domain.com/profile/' . $_SESSION['username'];
我希望我的网站有一个美容网址,例如:www.domain.com/profile/userName
因此,在我的所有重定向链接(HTML <a>
标记或PHP header()
函数)中,我将使用:
"www.domain.com/album/" . $_SESSION['username'];
是否存在安全漏洞?
我是否需要先使用session_id()
创建会话ID?
所以,检查:
if(!isset($_SESSION['id']){
//redirect to login page
}
答案 0 :(得分:1)
通常在使用Sessions时我们还需要注意 - :
会话劫持,会话固定
我建议在用户登录存储后的代码中,会话变量中的用户名还会在会话变量中存储一个唯一的值,例如USER AGENT。因此,用户访问的每个页面都可以检查是否存在相同的USER AGENT和SESSION ID,这将使其更加安全。为了使其更安全,像用户代理上的MD%一样进行加密,以便黑客无法重现它。
引自PHP安全指南
<?php
session_start();
if (isset($_SESSION['HTTP_USER_AGENT']))
{
if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
{
/* Prompt for password */
exit;
}
}
else
{
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}
?>
参考:
PHP Security Guide on Session
Another Thread on Session security
答案 1 :(得分:0)
你在保护什么?您正在做什么来验证他们是否有授权?您是否正在保护他们的个人资料并验证他们是否拥有授权,因为他们拥有会话密钥? 您没有提及检查他们是否有会话变量。
您甚至不需要知道会话ID。这对于存储用户是否已经获得认证来说是无关紧要的,这只是指示他们应该使用哪些会话信息的机制。
当用户登录时,您希望存储类似
的内容$_SESSION['authed_user'] = true;
然后,在后续尝试编辑信息时:
if ($_SESSION['authed_user']) {
// do something authed users can do
}
当然,你可能真的想要某种程度的授权。我建议您考虑使用类似SimpleAuth ...
的内容答案 2 :(得分:0)
您需要在允许用户编辑其个人资料的页面上进行授权。如果他们将在http://www.domain.com/profile/[username]
页面上进行修改,那么您需要检查他们的$_SESSION['username']
是否与他们所在的个人资料页面相同。
否则,任何人都可以输入URL(基本上猜测个人资料编号或名称)并进行编辑。
但是,你应该首先检查他们是否已登录所有人:
if (IsSet($_SESSION['username'])) {
// Logged in
} else {
// Not logged in
}