我有两个差异。我的XAMPP
上的项目是Project1
和Project2
当我使用Project1
登录时,我检查身份验证,如果成功,则存储会话。会话名称为$_SESSION['username']
上述过程与Project2
相同。
现在,为了防止直接访问,我使用此代码(在两个项目中):
if($_SESSION['username']=="")
{
header("location:index.php");
}
因此,当我使用Project1
登录时,我也可以访问Project2
(无需登录)
为了防止这种情况,我知道如果我创建差异。两个项目的会话名称然后它被解决。
上面的内容是在我的本地服务器上。所以我可以创造差异。我所有项目的会话名称。
但是假设我的网站在线,如果我的会话名称与diff匹配会发生什么。网站?
有数百万个网站,我的会话名称有可能与其他网站的会话名称相匹配。然后,有些用户可能会使用其他网站(在同一浏览器中)访问我的网站,而他可能无法访问我的网站登录。
那么如果两个差异的会话相同会发生什么。网站?用户无需登录即可访问我的网站吗? 如果是,那么我应该怎么做才能防止它呢?
提前致谢。
更新
根据@Let me see
的回答,如果两个站点在同一台服务器上运行,则可能会共享数据。
所以假设服务器正在共享那么我应该怎么做以防止它呢?
答案 0 :(得分:9)
会话(通常)使用Cookie存储,而Cookie是特定于域的。因此,google.com或evilhackerdomain.ru使用与您的应用相同的会话名称无关紧要;您的cookie只能由您指定的域读取/使用。即使在以其他方式管理会话的特殊情况下,它也将是特定于域的。
答案 1 :(得分:5)
假设服务器正在共享那么我应该怎么做以防止它?
回答您的跟进问题。您只需在session_name()
session_start().
在特定网站上为会话命名
session_name('PROJECT1');
session_start();
这个单行应该这样做。
答案 2 :(得分:3)
通常会话的 sessionID存储在cookie 中,它与主机名相关,并且可以由具有相同域的多个主机名共享。并且很明显会话存储在服务器上。
因此,如果两个站点在同一台服务器上运行,那么它们可能会共享数据。因此,您应始终在服务器上更改存储会话的路径不同的网站
答案 3 :(得分:1)
PHP会话存储在服务器中。因此,当您上线时,相同的会话名称之间不会发生任何冲突。请记住,您仍然可以选择将会话存储在数据库中,这可以帮助您进行更多的安全。
答案 4 :(得分:0)
什么都不会发生。因为其他站点使用自己的数据库(具有自己的会话和用户表)。只有两个站点共享相同的数据库,相同的表和相同的会话处理才有意义。
答案 5 :(得分:0)
由于以下原因,用户无法登录而无法访问
会话数据存储在server上。如果两个应用程序在同一服务器上运行且具有相同的域名,则可能存在共享会话数据的可能性。如果域不同,则不会与会话值冲突。
答案 6 :(得分:0)
我认为如果我们使用像MD5
这样的安全算法来加密您将用于登录的会话。这将毫无问题地工作。例如:
$name_session='username';
$name_session=md5(md5(md5($name_session));
$_SESSION[$name_session]="username_logged";