我知道这个话题已经讨论了很多,但我还有几个具体的问题没有得到回答。例如:
// **PREVENTING SESSION HIJACKING**
// Prevents javascript XSS attacks aimed to steal the session ID
ini_set('session.cookie_httponly', 1);
// Adds entropy into the randomization of the session ID, as PHP's random number
// generator has some known flaws
ini_set('session.entropy_file', '/dev/urandom');
// Uses a strong hash
ini_set('session.hash_function', 'whirlpool');
// **PREVENTING SESSION FIXATION**
// Session ID cannot be passed through URLs
ini_set('session.use_only_cookies', 1);
// Uses a secure connection (HTTPS) if possible
ini_set('session.cookie_secure', 1);
session_start();
// If the user is already logged
if (isset($_SESSION['uid'])) {
// If the IP or the navigator doesn't match with the one stored in the session
// there's probably a session hijacking going on
if ($_SESSION['ip'] !== getIp() || $_SESSION['user_agent_id'] !== getUserAgentId()) {
// Then it destroys the session
session_unset();
session_destroy();
// Creates a new one
session_regenerate_id(true); // Prevent's session fixation
session_id(sha1(uniqid(microtime())); // Sets a random ID for the session
}
} else {
session_regenerate_id(true); // Prevent's session fixation
session_id(sha1(uniqid(microtime())); // Sets a random ID for the session
// Set the default values for the session
setSessionDefaults();
$_SESSION['ip'] = getIp(); // Saves the user's IP
$_SESSION['user_agent_id'] = getUserAgentId(); // Saves the user's navigator
}
所以,我的问题是
ini_set
是否提供了足够的安全性?session_regenerate_id()
是否正确?<代码>H112使用<代码>D13是否正确?<代码>H214<代码>F215
发布于 2011-12-08 01:38:51
你的配置太棒了。你肯定读过关于如何锁定php会话的文章。然而,这一行代码否定了由php配置提供的很多保护:session_id(sha1(uniqid(microtime()));
这是一个生成会话id的特别糟糕的方法。根据您的配置,您将从/dev/urandom
生成会话id,这是一个令人敬畏的熵池。这将比uniqid()更具随机性,因为uniqid()基本上已经是一个时间戳了,在其中添加另一个时间戳根本没有任何帮助。尽快删除这行代码。
检查IP地址是有问题的,ip地址的更改是出于合法原因,例如,如果用户位于负载均衡器或TOR之后。用户代理检查是没有意义的,就像有一个像?is_hacker=False
一样的GET变量,如果攻击者有会话id,他们可能就有用户代理,如果没有,这个值很容易被暴力破解。
https://stackoverflow.com/questions/8419332
复制相似问题