在用户输入时调用json_decode是否安全?
我在 cookie 中存储一个 JSON 编码的整数索引数组 = >整数值。
显然,Cookie可以像任何其他用户输入一样轻松操作,因此这是我的cookie获取器验证:
if ($_COOKIE['myCookie']) { //if cookie exists
$myCookie = json_decode($_COOKIE['myCookie'], true);
if (!is_array($myCookie)) { //in case decoding fails or bad cookie
$myCookie = array(); //sets it as empty array
}
} else { //if cookie doesn't exist, uses an empty array instead
$myCookie = array();
}
然后,在使用任何值之前,我会检查数组中是否存在它,并根据白名单值列表进行测试 - 这部分看起来很安全,但我发布它,因为它是验证的一部分:
if (!empty($myCookie[$index])) { //checks if index exists and is truthy
if ($myCookie[$index] !== 1 && $myCookie[$index] !== 2) { //values whitelist
die('Hacking attempt through cookies exploit.');
}
//use the cookie data now
}
回到问题,直接在饼干上呼叫json_decode
是否安全?用户能否操纵 Cookie 来运行任意代码?
到目前为止,我一直在阅读有关SO的许多主题,我发现它是变暗的不安全的,因为它调用构造函数,但在技术上是安全的。我已经通读了他们的 php.net 页面,但这些页面没有直接解决安全问题。unserialize()
json_decode
我的插件很快就会达到实时测试版,所以我想知道直接在cookie上调用是否足够安全,或者我是否应该在调用之前运行某种类型的验证。我也可以运行一个,但是由于我在使用它们之前正在针对值的白名单进行测试,因此除非以某种方式运行任意代码,否则应该没有问题,不是吗?json_decode
json_decode
preg_match
json_decode
我知道如果它不是有效的JSON,则会返回,但我想知道这是否是正确的方法,或者我应该在调用json_decode
之前添加某种验证?json_encode
NULL