2017-02-26 133 views
1

我使用会话变量进行登录。如果登录成功,则设置$_SESSION['userName']。在一些页面有代码,如if(isset($_SESSION['userName'])) echo $_SESSION['userName]; 我不知道如果$_SESSION['userName']已被其他网站设置在某人的浏览器,这将导致一个巨大的问题。我该如何克服这个问题,请建议。安全登录按会话在php

+0

问你如何解决问题之前,你有没有问自己如何可以复制吗?你可能会意识到这个问题毕竟不存在...... – rlanvin

回答

2

会话值通过HTTP cookie在浏览器和服务器之间传递。 HTTP cookie只与(* .stackoverflow.com)相同的主机名共享 因此,我认为另一个网站无法获得其他网站的会话值。

+0

我没有意识到这些东西。谢谢,我从你的回答中得到了我的解决方案。 – Harshanil

1

这就是PHP会话的工作原理。

PHP为特定用户生成会话ID。然后它将该ID进行散列并将散列作为cookie传递给用户。

在每个后续请求中,用户都将该cookie发送回PHP,并查找该会话散列的会话数据。然后它可以启动与该用户相关的会话。在这种意义上,没有其他用户能够在不知道会话散列的情况下访问第一个用户的会话。

但是,最终用户很容易受到会话劫持的情况,以防其他人窃取他们的cookie,并且可能会发生多种方式。

  1. 会话固定您的网站的用户使用它的人的技巧,有人为他们提供了一个会话ID(有没有什么可以做这个)。

  2. 中间人攻击,其中有人位于用户和您的网站之间,并拦截所有传递的数据。这通常可以通过在HTTPS下提供页面来保护,但并不总是如此,但有人窃取通过HTTPS传输的数据要困难得多。

  3. 跨站点脚本(XSS),当有人使用客户端代码(可以访问cookie)来模拟该用户时。您可以通过实施CORS限制并发送一个"nonce"以防止用户在发送下一个请求时返回的每个响应。

  4. 利用浏览器漏洞将用户的Cookie暴露给其他网站。浏览器制造商通常需要阻止网站访问他们未设置的cookie,但有时会出现一些可以阻止这种情况的错误。如果用户使浏览器保持最新(通常不是因为漏洞利用不存在,而是因为大多数人还没有找到它们),通常需要处理这些问题。

  5. 有人闯入用户家中并使用用户的浏览器(对此无法做任何事情)。

很可能有更多的方式