我在我的网站上使用以下代码:
<?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;
}
}
?>
用它来防篡改我的cookies安全吗?我在散列中包含了使cookie过期的时间。这是一种安全的方式吗?
发布于 2018-10-04 13:43:01
对于roll your own crypto来说,这通常不是一个好主意。
用它来防篡改我的cookies安全吗?我在散列中包含了使cookie过期的时间。这是一种安全的方式吗?
不,你使用的是一个SHA256散列值,攻击者可以很大程度上提供它,而不是HMAC-SHA256。没有HMAC,SHA256很容易受到length-extension attacks的攻击。
相反,请考虑(按优先顺序):
Cookie
class.Halite是library的易用性包装器,library是一个现代密码库,现在随PHP7.2一起提供。https://stackoverflow.com/questions/27215121
复制相似问题