php - session ID 散列是否比普通存储更安全?

标签 php mysql security session hash

我有一个 PHP/MySQL 应用程序,我将 session 数据存储在我的数据库中。下面是相关处理程序的一些伪代码:

function session_read($sessionId) {
    $result = query('select session_data from sessions where id = ?', $sessionId);
    if(!$result) $result = array('session_data' => '');
    return $result['session_data'];
}

function session_write($sessionId, $data) {
    query('replace into session_data set data = ? where id = ?', $data, $sessionId);
    return true;
}

我突然想到,在 session 期间, session ID 可能与用户密码一样敏感。我想知道在评估之前对 session ID 进行哈希处理是否会提供额外的安全性?

function session_read($sessionId) {
    $sessionId = hash('sha512', $sessionId);
    $result = query('select session_data from sessions where id = ?', $sessionId);
    if(!$result) $result = array('session_data' => '');
    return $result['session_data'];
}

function session_write($sessionId, $data) {
    $sessionId = hash('sha512', $sessionId);
    query('replace into session_data set data = ? where id = ?', $data, $sessionId);
    return true;
}

这样,即使攻击者设法检索 session 表的转储,他们也无法轻易制作 cookie 来劫持任何用户 session 。

这是有用的做法吗?

编辑:网站通过 HTTPS 提供服务,cookie 是 HTTPONLY。

最佳答案

I am wondering if hashing the session ID before evaluating it would afford additional security?

是的,确实如此。但仅针对攻击者只能从数据库中读取任意数据的情况,例如。 g.,通过 SQL 注入(inject),并想劫持一个事件 session 。在这种情况下,找到散列函数输出值(即存储的 session ID)的输入值(即传输的 session ID)将构成 pre-image attack。 .还有一个major goal of cryptographic hash functions is pre-image resistance .

关于php - session ID 散列是否比普通存储更安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22846420/

相关文章:

JavaScript 变量保护

php - SimpleXMLElement-> xpath()显示不在对象中的数据

android - 我们不能知道其他 Android 应用程序的私有(private)数据库文件在哪里吗?

php - 如何使用 Volley Android Studio 将数组插入 MySQL

mysql - 使文本列不为空的正确方法是什么

c# - 一般来说,如何修复禁用的 ASP.NET 控件的不安全性?

java - 在 Java 小程序中获取页面 URL 的 2 种方法,每种方法有什么区别和/或好处?

php - SQL/PHP - 将 2 个表与其他表中的数据连接起来

php - Ubuntu 奇怪的编码问题使用 sublime text 2

php - MySQL,在循环(40次)中使用LIMIT 0,1800到LIMIT 72000,18000来创建平面文件,一定是一种对数据库更友好的方式吗?