php cookie防篡改

时间:2014-11-30 15:59:23

标签: php security cookies hash

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

<?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过期的时间。这是一种安全的方式吗?

1 个答案:

答案 0 :(得分:0)

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

  

使用此方法对我的Cookie进行防篡改是否安全?我在散列中包括了使cookie过期的时间。这是一种安全的方法吗?

否,您使用的是SHA256散列值,而该值在很大程度上可以由攻击者提供,而不是HMAC-SHA256。没有HMAC,SHA256容易受到length-extension attacks的攻击。<​​/ p>

请考虑(按优先顺序):

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