【发布时间】:2012-01-15 04:50:01
【问题描述】:
我知道这个话题已经讨论了很多,但是我还有一些具体的问题没有得到解答。例如:
// **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是否提供足够的安全性? - 是否可以保存用户的IP和导航器然后查看 每次加载页面时检测会话劫持?这会不会有任何问题?
-
session_regenerate_id()的用法正确吗? -
session_id()的用法正确吗?
【问题讨论】:
-
所有夸大的随机性可能是安全性中最不相关的部分,因为最广泛的安全漏洞通常完全在其他地方。你也只需要在登录成功时重新生成会话ID。
-
嗯,不会有伤害的。另外,我这样做的一个主要原因是因为我的网站上没有帐户,只有匿名导航。因此,没有登录之类的东西。 不每次都重新生成会话ID会更好吗?
-
没有唯一的答案。首先是在登录时重新生成。除此之外有点矫枉过正。不知何故,会话再生在某些情况下可能会有所帮助。示例:如果您管理某种事务(保存帖子、上传文件、在应用程序后面更改数据),这会有所帮助,因为您可以跟踪用户是否执行了历史记录 (-1) 并再次发送了旧请求。
-
关于重新生成:在用户的权限更改时任何重新生成。虽然这包括跨越登录/注销障碍时的重新生成,但它还应该包括任何时候授予或撤销用户任何类型的应用程序权限或角色更改。
-
不要认为它是完整的,但你可能会发现它作为一个勾选列表很有用stackoverflow.com/questions/8318944/…
标签: php security session sessionid session-hijacking