我的问题是关于会话固定本摘要:
问题:
Q1 - 有没有办法明确阻止的网站从接受任何会话标识符?
Q2 - 我不使用$ _GET变量在我的网站,所以有没有办法阻止查询字符串接受会话标识符?
- 注:我使用的是PHP 5.4.3 SSL也将使用session_regenerate_id ..
您可以设置在他的回答martinstoeckli提到的选项,但是这不会阻止会话固定。 它使会话固定有点难以攻击,但它不会阻止它。
作为ServerBloke提到的,可以防止会话固定使用session_regenerate_id()验证用户的登录信息后,你表明需要身份验证的第一页之前立即。
使它更难攻击者利用固定会话不会阻止会话固定。 您必须生成一个新的会话ID。
越来越多的人正在使用公共不安全不可靠的Wi-Fi热点。 会话可以从空气嗅探。 在一个物理网络,它们可以闻断丝。 他们还可以迫使你通过采用中间人攻击访问任何URL。 因此,会话固定仍然是一个问题,即使攻击者不能发送你的网址。
明知会议(和密码),可闻,有可能是为了防止会话劫持的又一步骤。 这是HTTPS(TLS / SSL)。
需要身份验证的所有受保护的页面应该只通过HTTPS访问。 所以,在登录页面(就是用户发送他们的用户名和密码)必须通过HTTPS访问。 在同一脚本,你必须重新生成一个新的会话ID。 在会议余下所有的页面必须然后通过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;
如果你使用session_regenerate_id()
每次你在用户登录将防止会话固定。 当用户登录时,他们迷恋的会话ID将被再生,从而停止了攻击。
问题1)如果你的应用需要一个会话,你将不得不派出某种会话ID。 如果您的应用程序不使用会话,那么就没有必要再调用session_start()
和IDS(无论是通过URL或Cookie发送)根本不使用。
问题2)你可以配置PHP,从饼干完全接受会话ID,而忽略从URL标识(见session.use_only_cookies )。 如果你这样做,你也应该检查,该选项session.use_trans_sid指定设置为0(这是默认值)。
我不完全理解,这确实是一个问题吗?
Q1。 我认为你需要检查的还有来自于你会话存储COOKIE的GET已经收到了SID(例如数据库)。 如果是 - its'okay,如果没有,创建于服务器端的一个新的和做的HTTP与新的SID重定向。
Q2。 我不使用的PHP 5.4,但我认为下面的代码将有所帮助:
unset($_GET['sid'])
更新:我认为普通补丁比仅后端服务器可以生成SID标识。 没有用户posibilites此!