0

我有以下结构:

Index.php
Account.php
Login.php
CheckLogin.php

当有人通过 login.php 登录时,它会检查用户名和密码并设置以下会话变量

$_SESSION['username'] = $username;
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);

当他们访问包含文件 CheckLogin.php 的 Account.php 时,该文件会检查 HTTP_USER_AGENT 以及是否设置了用户名变量。

现在这就是我遇到问题的地方。如果用户返回 index.php(主页)并登录,我想显示帐户链接。但是,如果用户没有登录,即刚刚访问了该网站,我想显示注册链接。我在想我可以做到以下几点:

<?php session_start()

if (!isset($_SESSION['username'])) {
// If username is not set destroy the session
session_destroy();
echo ("<a href=\"signup.php\">Sign up</a>");
}
else {
// If username is set
echo ("<a href=\"account.php\">Sign up</a>");
}
?>

我知道这并不完全安全,但是如果有人设法劫持会话并访问 account.php,它会进行检查,该检查应该破坏会话并在它们不合法时将其注销。这是最佳实践还是有更好的方法来实现这一预期结果。我不禁认为每个人都只是访问该站点并创建和破坏会话是一个坏主意。这是正确的做法还是我需要考虑其他任何事情?

4

2 回答 2

0

如果您的检查仅基于会话,请确保您的网站不会受到保护。我有几个建议: 1- 使用 CSRF 来提高您拥有的每个帖子的安全性。2- 会话应始终加密,您应该对它们使用盐密钥。这样你就可以得到更多的保障。仅用于信息会议并不总是保护您的网站的最佳方式。

于 2012-12-20T23:02:58.360 回答
0

这足以检查。无需在每次尝试时都销毁会话。

<?php session_start()

if (isset($_SESSION['username'])) {
    echo ("<a href=\"account.php\">Sign up</a>");
}
else {
    // If username is not set
    echo ("<a href=\"signup.php\">Sign up</a>");
}
?>

如果有人能够劫持会话,他也将能够访问您的account.php. 如上所述,请阅读有关身份验证系统的优秀教程或使用插件。在没有适当知识的情况下构建身份验证有点危险。

于 2012-12-20T22:53:45.430 回答