Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.5.42中的Cookie(未)序列化_Php_Laravel_Laravel 5_Laravel 5.4 - Fatal编程技术网

Php Laravel 5.5.42中的Cookie(未)序列化

Php Laravel 5.5.42中的Cookie(未)序列化,php,laravel,laravel-5,laravel-5.4,Php,Laravel,Laravel 5,Laravel 5.4,安全版本5.5.42“禁用cookie值的所有序列化/非序列化”—— 但我的值仍然序列化,只是没有序列化。而我呢 Cookie::get('key') 我得到的是 "s:5:"value";" 设置protectedstatic$serialize=truein-App\Http\Middleware\EncryptCookies有帮助,也有帮助 unserialize(Cookie::get('key')) 但据我所知,这个安全版本的问题源于unserialize()本身,而不是我稍后对

安全版本5.5.42“禁用cookie值的所有序列化/非序列化”—— 但我的值仍然序列化,只是没有序列化。而我呢

Cookie::get('key')
我得到的是

"s:5:"value";"
设置
protectedstatic$serialize=true
in-App\Http\Middleware\EncryptCookies有帮助,也有帮助

unserialize(Cookie::get('key'))
但据我所知,这个安全版本的问题源于unserialize()本身,而不是我稍后对unserialize值所做的,所以这有点超出了更新的目的。
为什么我的cookies在这里被序列化,以及如何解决这个问题?

这实际上是值得一提的,因为这个问题本身非常有趣

从Laravel的角度来看,这不是一个cookie问题,而是一个
APP_键
config键与序列化/非序列化相结合的问题

文件中的相关报价:

但是,如果应用程序的加密密钥在 恶意方,该方可以使用 加密密钥和利用PHP对象固有的漏洞 序列化/非序列化,例如调用任意类 方法

相关部分是PHP对象序列化/非序列化固有的
漏洞

通常爆炸的形式是物体注入(至少是最常见的)

OWASP有一个很好的例子

甚至php.net也有一个红色警告

警告
不要将不受信任的用户输入传递到unserialize()

Cookie来自用户,用户不可信

因为有一个例子,所以我也将OWASP放在这里:

class Example1
{
   public $cache_file;

   function __construct()
   {
      // some PHP code...
   }

   function __destruct()
   {
      $file = "/var/www/cache/tmp/{$this->cache_file}";
      if (file_exists($file)) @unlink($file);
   }
}

// some PHP code...

$user_data = unserialize($_GET['data']);

// some PHP code...
在此示例中,攻击者可能能够通过路径删除任意文件,例如请求以下URL:

http://testsite.com/vuln.php?data=O:8:"Example1":1:{s:10:"cache_file";s:15:"../../index.php";}

话虽如此,我强烈建议阅读(甚至简短地)有关序列化/非序列化漏洞的内容


如果您使用的是一个合适的框架,通常情况下,如果您不刻意引入一些漏洞,并且坚持框架的标准,那么您将得到大多数安全问题的解决。

效率较低,但在结构化数据的情况下,我将serialize/unserialize替换为json_encode/json_decode。

Cookie是加密的,因此如果您只是重新生成
APP_密钥
,则所有旧Cookie将无效,新Cookie将不会序列化。是,这意味着您生成的所有加密值也将无效,因此您可能需要使用新密钥重新加密这些值。重新生成应用程序密钥没有帮助。在我的测试中也会发生这种情况,包括本地测试和Bitbucket管道测试,每次都会生成密钥,并且没有cookie持久性。谢谢你的回答。这就是为什么我不想使用我提到的两种方法中的任何一种(手动调用unserialize或设置标志)。但是cookie中的值仍然是序列化的。我应该自己分析吗?只要试试你的
应用程序密钥
,你就没事了。我的测试管道在每次运行中都有php artisan密钥:generate。我也在当地试过。没用。