【问题标题】:php cookie tamper-proofingphp cookie 防篡改
【发布时间】:2015-01-28 16:12:05
【问题描述】:

我在我的网站上使用此代码:

<?php
$pass = "61e7680d2ac47e5b9e3c82118fae6e3cfcddff285ac75bb82872bb01f24ac657";
function valCookie(){
    if (isset($_COOKIE['session'])){
        $cookie = json_decode(hex2bin($_COOKIE['session']), true);
        global $pass;
        $hash = hash('sha256', $_SERVER['REMOTE_ADDR'] . $cookie['uid'] . 
        $cookie['expiry'] . $pass);
        $uid = $cookie['uid'];
        if ((hash_unique($hash, $cookie['hash'])) && ($cookie['expiry'] > time())){
            return $uid; //return user id.
            }
        }
    }
function hashCookie($uid, $expiry){
    global $pass;
    $cookie['uid'] = $uid;
    $cookie['expiry'] = $expiry;
    $cookie['hash'] = hash('sha256', $_SERVER['REMOTE_ADDR'] . $cookie['uid'] . 
    $cookie['expiry'] . $pass);
    $hexCookie = bin2hex(json_encode($cookie));
    setcookie("session", $hexCookie, $expiry);
    if(strlen($uid)){
        return true;
        }
    }
?>

使用它来防篡改我的 cookie 是否安全?我在散列中包含使 cookie 过期的时间。这是一种安全的方式吗?

【问题讨论】:

    标签: php security cookies hash


    【解决方案1】:

    roll your own crypto 通常是个坏主意。

    使用它来防篡改我的 cookie 是否安全?我在散列中包含使 cookie 过期的时间。这是一种安全的方式吗?

    不,您使用的值是 SHA256 哈希值,这些哈希值主要由攻击者提供,而不是 HMAC-SHA256。如果没有 HMAC,SHA256 容易受到length-extension attacks 的攻击。

    相反,考虑(按优先顺序):

    1. PASETO,提供具有高安全边际的防篡改代币。唯一的缺点是它们不能免于重放攻击。
    2. JWT,带 HS256。链接库将允许您安全地只允许 HS256,从而避开 99.9% 的 JWT security fails
    3. Halite's Cookie class。 Halite 是 libsodium 的可用性包装器,它是一个现代密码库,现在随 PHP 7.2 一起提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2011-06-13
      • 2011-10-06
      • 1970-01-01
      相关资源
      最近更新 更多