哪些PHP $ _SERVER变量可以可靠地用于会话指纹?

时间:2016-11-07 10:37:31

标签: php security session

我想为更安全的会话创建一个会话指纹。我看到了一个使用

的例子
$fingerpring = $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'];

这似乎是合理的,除了对会话期间IP地址可能会发生变化的用户造成的不便。

我浏览了php.net并看到了一些可以使用的东西。我想增加安全性,但也减少了对用户的不便。我想出的是什么问题?

$fingerprint = sha1(
    $_SERVER['HTTP_ACCEPT_LANGUAGE'].
    $_SERVER['HTTP_CONNECTION'].
    substr($_SERVER['REMOTE_ADDR'], 0, 5).
    $_SERVER['HTTP_USER_AGENT']
);

这些$ _SERVER变量中的任何一个会在会话期间发生变化并导致用户被“踢掉”(除了罕见的IP地址更改)吗?我还可以在列表中添加其他任何内容吗?

编辑:我已经使用了https和Slim的Csrf Guard。

1 个答案:

答案 0 :(得分:0)

如果您已经在使用HTTPS,那么您可以采取的一项基本原则安全改进是在PHP.ini文件中添加/设置此行:

 session.cookie_secure=1

当Deceze纠正时 - 这会在cookie上设置安全标志,以防止浏览器通过不安全的连接提交cookie。 Cookie仍然是纯文本(通过加密的HTTPS)。

您还可以使用其他一些PHP.ini设置来提高会话安全性:

session.cookie_httponly=1
session.save_path=/setyourownpathhere/
session.use_only_cookies=1
session.entropy_file=/dev/urandom
session.hash_function=whirlpool

这些值将进一步降低会话ID值被劫持的可能性。会话的id值本身就是会话用户的“指纹”。