具体而言,这与使用客户端会话cookie来识别服务器上的会话有关.
对整个网站使用SSL/HTTPS加密是最好的答案,并且您可以最好地保证中间人攻击中没有人能够嗅探现有的客户端会话cookie吗?
也许第二最好对存储在会话cookie中的会话值本身使用某种加密?
如果恶意用户具有对计算机的物理访问权限,他们仍然可以查看文件系统以检索有效的会话cookie并使用它来劫持会话?
当我真的想知道什么阻止某人模仿会话时,我试图构建我自己的安全PHP会话类?
IE,为什么不在test.php上的代码
$_SESSION['logged_in'] = true;
Run Code Online (Sandbox Code Playgroud)
无法在index.php上工作
if($_SESSION['logged_in'] == True){
echo 'logged in';
}
Run Code Online (Sandbox Code Playgroud)
我知道这样做的方法是通过将会话锁定到IP地址和用户代理来生成安全ID来保护会话,但这究竟是如何工作的呢?
意思是,如果我能够猜测会话ID,我能够设置$ _SESSION ['logged_in'] = true并模拟登录吗?我应该更改SESSION变量以检查登录更安全吗?
对不起我的问题,希望我有所帮助......
场景:
session题:
这是一个足够强大的安全措施本身,还是我应该
========
(顺便说一句,在我研究这个问题时,这个wiki是一个很棒的读物.)
谢谢你的回复.我已经更新了我的PHP会话代码.
我已经摆脱了用户代理检查,因为@Rook已经向我展示了逻辑中的缺陷.
不幸的是我通过编辑它搞砸了原来的问题,现在我无法回复对不起的家伙,但@Rook确实解决了我原来的问题.
再次感谢您的帮助,daza166
这篇文章指出
如果您的站点在共享Web服务器上运行,请注意同一服务器上的任何其他用户都可以轻松查看任何会话变量.
在像GoDaddy这样的大型主机上,是否真的没有针对此的保护措施?这真的很容易吗?如果这很容易,我主机上其他用户的会话变量在哪里,我可以查看它们?
我知道有很多关于这个主题的帖子,但没有一个解决了我的问题。
我的 Windows 计算机上运行着 WAMP 服务器。我创建了一个登录系统,它能够设置 PHP 会话并验证它们在创建的页面上是否正常工作。一旦我切换到不同的页面,无论是通过输入 URL 还是 javascript 函数,我都会丢失会话。
这是我登录用户的 test.php
require_once('config.php');
$user = new User();
$result = $user->login('email@gmail.com', 'mysecretpassword');
echo $result;
echo '</br>';
$result = $user->isLoggedIn();
echo $result;
Run Code Online (Sandbox Code Playgroud)
这是用户实际登录的功能
public function login($email, $password) {
// Hash Password
$password = $this->hashPassword($password);
// Check if email and password match
$query = "SELECT id, confirm_email FROM users WHERE email = ? AND password = ?";
$a_bind_params = array($email, $password);
$a_param_types = array('s','s');
$results = $this->db->select($query, $a_bind_params, $a_param_types);
// If …Run Code Online (Sandbox Code Playgroud)