我在我的网站上建立了一个登录名,如果登录成功,我会设置一个$_SESSION['user']
变量。SESSION登录易受攻击?
现在我保护所有内容由
if(!isset($_SESSION['user'])) {
header('Location: login.php');
}
这意味着,如果还没有登录成功,你直接回到登录页面登录的用户。
现在我的问题:这是安全的吗?其他网站是否已设置$_SESSION['user']
变量?
我在我的网站上建立了一个登录名,如果登录成功,我会设置一个$_SESSION['user']
变量。SESSION登录易受攻击?
现在我保护所有内容由
if(!isset($_SESSION['user'])) {
header('Location: login.php');
}
这意味着,如果还没有登录成功,你直接回到登录页面登录的用户。
现在我的问题:这是安全的吗?其他网站是否已设置$_SESSION['user']
变量?
号
您的网站的会话创建服务器计算机上的唯一散列和文件的哈希存储在用户的浏览器作为cookie,所以当它击中你的网络服务器,它可以知道确切的文件读书。
如果有任何其他网站设置相同的钥匙$_SESSION
变量将是只为它的哈希,您的服务器不会读。
你迄今所做的什么是好的,似乎不容易,也没有攻击其他网站不影响你的设置会话变量,但照顾你如何处理会话一旦创建会话。还会在每次登录时生成随机会话令牌,并在更改密码时更改会话令牌。
一般来说本身可以被认为是安全的会话。问题是可以窃取会话,允许黑客完全访问该会话中的任何内容。
由于PHP存储会话ID作为cookie,黑客可以简单地通过使用XSS窃取该会话。
也许看看这里了解更多信息:3210
这是正确的。这是大多数使用PHP的网站通常使用的方式。
的$_SESSION
是一个超级全局变量只能由服务器管理。
会发生什么:
session_start()
PHPSESSID
(或任何你php.ini
命名),以加密安全值的cookie。$_SESSION
变量,它在内部存储与关联于所生成的Cookie值。为什么它不能被其他网站改变:
$_SESSION
值只存储在内部。即使客户知道它的价值。它只保存会话ID的Cookie,但它甚至不知道该会话ID的含义,也不知道其他人的会话ID应该是什么。除非你是在同一台服务器上运行的其他网站,这韩元不会成为问题(在正常情况下)。
作为一个侧面说明,请提醒的是,你应该使用header("Location: index.php");
后添加return;
声明。这是错误的常见来源,在这种情况下,它可能会使服务器面临危险,因为即使您的浏览器在收到位置标题后不显示内容,您的服务器实际上仍在发送应该是用户生成的,如果他已经登录
TL; DR:如果你有一个脚本,不应该发送任何数据,如果客户没有登录,header("Location: ...");
后不添加return;
声明将使服务器仍然发送数据,但正常的浏览器不会显示出来(因为它重定向),但如果有一个人谁试图查看发送的数据(使用作为curl
作为简单的方法,不添加-L
选项)会很容易地看到他们。
会话写入web服务器上的文件,以便其他网站可以设置一个叫做'user'会话,但它会在不同的网站进行设置,有效的在不同的网站 – RamRaider