2016-08-11 75 views
2

我在我的网站上建立了一个登录名,如果登录成功,我会设置一个$_SESSION['user']变量。SESSION登录易受攻击?

现在我保护所有内容由

if(!isset($_SESSION['user'])) { 
    header('Location: login.php'); 
} 

这意味着,如果还没有登录成功,你直接回到登录页面登录的用户。

现在我的问题:这是安全的吗?其他网站是否已设置$_SESSION['user']变量?

+1

会话写入web服务器上的文件,以便其他网站可以设置一个叫做'user'会话,但它会在不同的网站进行设置,有效的在不同的网站 – RamRaider

回答

1

您的网站的会话创建服务器计算机上的唯一散列和文件的哈希存储在用户的浏览器作为cookie,所以当它击中你的网络服务器,它可以知道确切的文件读书。

如果有任何其他网站设置相同的钥匙$_SESSION变量将是只为它的哈希,您的服务器不会读。

3

你迄今所做的什么是好的,似乎不容易,也没有攻击其他网站不影响你的设置会话变量,但照顾你如何处理会话一旦创建会话。还会在每次登录时生成随机会话令牌,并在更改密码时更改会话令牌。

2

你不太可能,除非有在同一台服务器上的另一个登录页面来面对这个问题。说,管理员和前端用户的登录。

如果你想加强您的会话和其他安全组件,你可以参考这个:

PHP Session Security

3

一般来说本身可以被认为是安全的会话。问题是可以窃取会话,允许黑客完全访问该会话中的任何内容。

由于PHP存储会话ID作为cookie,黑客可以简单地通过使用XSS窃取该会话。

也许看看这里了解更多信息:​​3210

4

这是正确的。这是大多数使用PHP的网站通常使用的方式。

$_SESSION是一个超级全局变量只能由服务器管理。

会发生什么:

  1. 你叫session_start()
  2. 将生成一个名为PHPSESSID(或任何你php.ini命名),以加密安全值的cookie。
  3. PHP声明了一个名为$_SESSION变量,它在内部存储与关联于所生成的Cookie值。

为什么它不能被其他网站改变:

  1. $_SESSION值只存储在内部。即使客户知道它的价值。它只保存会话ID的Cookie,但它甚至不知道该会话ID的含义,也不知道其他人的会话ID应该是什么。
  2. 此会话ID Cookie不能被其他网站盗用或修改。默认情况下,cookie路径设置为您自己的域,客户端只应将其发送给您。 (如果客户要发送到其他网站,它的泄漏了自己的证书,这是没有你的责任,但客户端浏览器的漏洞)

除非你是在同一台服务器上运行的其他网站,这韩元不会成为问题(在正常情况下)。


作为一个侧面说明,请提醒的是,你应该使用header("Location: index.php");后添加return;声明。这是错误的常见来源,在这种情况下,它可能会使服务器面临危险,因为即使您的浏览器在收到位置标题后不显示内容,您的服务器实际上仍在发送应该是用户生成的,如果他已经登录

TL; DR:如果你有一个脚本,不应该发送任何数据,如果客户没有登录,header("Location: ...");后不添加return;声明将使服务器仍然发送数据,但正常的浏览器不会显示出来(因为它重定向),但如果有一个人谁试图查看发送的数据(使用作为curl作为简单的方法,不添加-L选项)会很容易地看到他们。

+0

是cookie可以被其他网站设置? – NaveenDA

+0

@NaveenDA如果你不想让它发生,理论上不会。实际上,如果您正确发送cookie(默认操作),则它们甚至不会发送到其他网站。 – SOFe

+1

试想一下,如果每个网站的cookie都被你访问的每个网站看到,假设你访问了1000个使用cookies的网站,每次访问你的网站都会不必要地发送1000个cookies,这是非常不合理的。除非浏览器存在漏洞,否则来自不同网站的Cookie不应拦截所有网站。 – SOFe

相关问题