Laravel 5.5.42中的Cookie(非序列化)

时间:2018-08-24 14:38:53

标签: php laravel laravel-5 laravel-5.4

安全版本5.5.42“禁用cookie值的所有序列化/反序列化”-https://laravel-news.com/laravel-5-6-30 但是我仍然将我的值序列化,只是未序列化。当我这样做

Cookie::get('key')

我得到类似

"s:5:"value";"

在App \ Http \ Middleware \ EncryptCookies中设置protected static $serialize = true;会有所帮助,

unserialize(Cookie::get('key'))

但是,据我所知,unserialize()本身是此安全发行版问题的根源,而不是我稍后对未序列化的值所进行的处理,因此,这超出了更新的目的。 为什么我的Cookie在这里被序列化以及如何解决?

2 个答案:

答案 0 :(得分:0)

这实际上是一个值得回答的问题,因为问题本身很有趣。

从Laravel的角度来看,这不是cookie问题,而是结合序列化/反序列化的vulnerabilities inherent to PHP object serialization / unserialization配置密钥问题。

文档中的相关报价:

  

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

相关的部分是这个Warning Do not pass untrusted user input to unserialize()

通常,explot的形式是对象注入(至少最常见)。

OWASP有一个很好的例子here

即使php.net也有红色警告for it's unserliaze function

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...

Cookie来自用户,并且用户不受信任。

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

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

在此示例中,攻击者可能能够通过路径Traversal attack删除任意文件,例如请求以下网址:

{{1}}

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

如果您使用的是适当的框架,通常,如果您不竭力引入一些漏洞并遵守框架的标准,那么大多数安全事项都将得到照顾。

答案 1 :(得分:0)

效率较低,但对于结构化数据,我将序列化/反序列化替换为 json_encode/json_decode。