簡體   English   中英

PHP Cookie防篡改

[英]php cookie tamper-proofing

我在我的網站上使用此代碼:

<?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過期的時間。 這是一種安全的方法嗎?

推出自己的加密貨幣通常是一個壞主意。

使用它來篡改我的cookie是否安全? 我在散列中包括了使cookie過期的時間。 這是一種安全的方法嗎?

不,您使用的是SHA256哈希值,而不是HMAC-SHA256,哈希值在很大程度上可以由攻擊者提供。 沒有HMAC,SHA256容易受到長度擴展攻擊

相反,請考慮(按優先順序):

  1. PASETO ,它提供具有高安全裕度的防篡改令牌。 唯一的缺點是他們不能不受重放攻擊的影響。
  2. JWT和HS256。 鏈接庫將僅允許您安全地僅允許HS256,從而回避了99.9%的JWT安全性失敗
  3. Halite的Cookie Halite是libsodium的可用性包裝,libsodium是一個現代加密庫,現已隨PHP 7.2一起提供。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM