我的问题是关于会话固定的总结:
1. Mallory has determined that [http://unsafe.com/](http://unsafe.com/) accepts any session identifier, accepts session identifiers from query strings and has no security validation. [http://unsafe.com/](http://unsafe.com/) is thus not secure.
2. Mallory sends Alice an e-mail: "Hey, check this out, there is a cool new account summary feature on our bank,http://unsafe.com/?SID=I\_WILL\_KNOW\_THE\_SID". Mallory is trying to fixate the SID to I\_WILL\_KNOW\_THE\_SID.
3. Alice is interested and visits [http://unsafe.com/?SID=I\_WILL\_KNOW\_THE\_SID](http://unsafe.com/?SID=I_WILL_KNOW_THE_SID). The usual log-on screen pops up, and Alice logs on.
4. Mallory visits [http://unsafe.com/?SID=I\_WILL\_KNOW\_THE\_SID](http://unsafe.com/?SID=I_WILL_KNOW_THE_SID) and now has unlimited access to Alice's account. (credit: RichieHindle)
问题:
Q1 -是否有一种方法显式地阻止站点接受任何会话标识符?
Q2 -我没有在我的站点上使用$_GET变量,那么是否有一种方法可以防止从查询字符串接受会话标识符?
发布于 2012-05-23 14:15:11
您可以设置martinstoeckli在他的回答中提到的选项,但这不会阻止会话固定。它使会话固定更难攻击,但并不能阻止它。
正如ServerBloke所提到的,在验证用户的登录信息之后,在显示需要身份验证的第一个页面之前,立即使用session_regenerate_id()来防止会话固定。
使攻击者更难利用会话固定,并不会阻止会话固定。您必须生成一个新的会话ID。
越来越多的人使用公众不安全、不可信的wi热点。会议可以从空气中嗅出。在物理网络上,它们可以被监听。他们还可以通过使用中间人攻击来强迫你访问任何URL。因此,会话固定仍然是一个问题,即使攻击者无法发送您的URL。
知道会话(和密码)可以被嗅探,还有另一个步骤需要防止会话被劫持。这就是HTTPS (TLS/SSL)。
所有需要身份验证的受保护页面只能通过HTTPS访问。因此,应该通过HTTPs访问登录页面(用户发送用户名和密码的页面)。在同一脚本中,您必须重新生成一个新的sessionID。然后,必须通过HTTPs访问会话其余部分的所有页面,以保护新的会话ID。
下面是一个伪代码login.php脚本示例:
// Force SSL
if($_SERVER["HTTPS"] != "on") {
die('Must login via HTTPS');
}
// Load the current sessionID
session_start();
// Validate the login information, being sure to escape the input
...
if (! $valid) {
die('Invalid login');
}
// Start the new session ID to prevent session fixation
session_regenerate_id();
// Clear the old session
$_SESSION=array();
// Log them in
$_SESSION['user_id'] = $userID;发布于 2012-05-23 07:44:26
如果每次用户登录时都使用session_regenerate_id(),则会防止会话固定。当用户登录时,他们固定的会话ID将被重新生成,从而停止攻击。
发布于 2012-05-23 07:36:27
问题1)如果您的应用程序需要一个会话,那么将不得不发送某种会话id。如果您的应用程序不使用会话,那么就没有必要调用session_start(),并且根本不使用If (无论是由URL还是cookie发送的)。
问题2)您可以配置PHP,只接受cookie中的会话ids,并忽略来自URL的ids (请参见曲奇饼)。如果这样做,还应该检查选项侧边是否设置为0(这是默认的)。
https://stackoverflow.com/questions/10715002
复制相似问题