Laravel documentation说
Laravel的所有加密值均使用消息身份验证代码(MAC)签名,因此一旦加密就无法修改其基础值。
在实践中,这意味着有效负载带有少量哈希值。由于Laravel是开源产品,因此如何生成此值并不是秘密。源代码说:
// Once we get the encrypted value we'll go ahead and base64_encode the input
// vector and create the MAC for the encrypted value so we can then verify
// its authenticity. Then, we'll JSON the data into the "payload" array.
$mac = $this->hash($iv = base64_encode($iv), $value);
我个人没有看到此MAC对Laravel的好处。为什么在那儿?
我的意思是,如果我们已经有与消息一起发布的公钥和隐藏在某处的私钥,并且openssl_encrypt
作为处理器。 MAC如何为安全做出贡献?还是有助于其他事情?
答案 0 :(得分:1)
Laravel 3中存在一个安全问题,您可以通过身份验证的用户获得访问权限。尽管这似乎与cookie有关(您可以通过某种方式伪造它们),但是将MAC添加到了cookie中。
http://joncave.co.uk/2012/10/lying-to-laravel/
TLDR将来,很高兴看到Laravel的Crypter类内置了MAC,以便在解密之前验证所有加密消息。在Zend Framework 2和Ruby on Rails中可以看到这种行为的例子。
https://laravel3.veliovgroup.com/docs/changes#3.2.8
这是因为,解密可以用蛮力完成,添加MAC意味着如果它与应有的不匹配,您将什么也不做。 Laravel的确切实现方式,我不知道可以增加多少安全性,但至少会使攻击者更难。
答案 1 :(得分:0)
如詹姆士·K·波尔克所说
MAC使用密钥,因此攻击者除非拥有密钥,否则无法生成正确的密钥。
需要MAC来防止故意的密文修改。