我在 PHP 中遇到了一个会话管理类,它加密会话存储文件夹(即/tmp)中的会话数据,并且可以稍后在您的脚本中使用密钥进行解密。我想知道它是否真的需要?如果您已经像这样(简化)示例进行了一些会话劫持预防:
session_start();
if (isset($_SESSION['fingerprint']))
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'].'SECRETSALT'))
exit; // prompt for password
else
$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'].'SECRETSALT');
你还需要加密你的会话数据吗?或者仅当您通过会话存储敏感信息(例如,个人信息、抄送号码、凭据)时才需要加密?
此外,如果您以如下简单的方式验证用户是否已登录:
// 登录.php
if ($_POST['password'] == $db_password)
{
$_SESSION['logged_in'] = true;
redirect_to_protected_area();
}
else
// show login again
// protected_area.php
if (!isset($_SESSION['logged_in']) OR !$_SESSION['logged_in'])
exit; // prompt for password
else
// show protected area
如果会话数据未加密并且黑客一目了然地看到数据(即指纹的 md5 哈希值和logged_in = true. 他真的可以自己登录还是必须先“破解”md5?
注意:md5 用于简化示例,现实生活中使用了更好的哈希算法。