如何在PHP中加密并稍后解密cookie的值(加密的安全性如何)
答案 0 :(得分:8)
有多种不同的方法可以加密cookie和其他地方的信息。加密的强度因您选择进行实际加密的方法而异。 mycrypt
是一个很好的起点。 See this answer有关使用mcrypt的示例。
我不建议在cookie中放入任何敏感内容,即使它是加密的。对某人来说太诱人了。如果可以,请尝试坚持会议。
答案 1 :(得分:0)
我完全同意其他答案:如果数据真的很敏感,那么它应该存储在会话中的服务器端,而不是cookie中。
就加密cookie内容的方式而言,Suhosin PHP扩展提供了transparently encrypt all cookies的功能。如果您能够安装PHp扩展,这可能比编写自己的加密方案更容易,也可能不容易。
答案 2 :(得分:0)
我可以想到合理使用它。假设您有一个大型服务器场,您将在数据库和/或memcached服务器上遇到瓶颈以处理会话请求。“这个用户是否已登录?”
如果您要将用户会话数据存储为cookie中的加密值,那么您可以防止必须执行相当多的读/写操作并允许无限大小的Cookie存储,因为对您的其他方面有0个影响而不是CPU绑定加密/解密cookie数据。
默认情况下,Ruby on Rails会这样做 - 尽管它只签署数据并且不对其进行加密。还有一种替代实现方法,使用自己的密钥和签名对数据进行加密,这样用户就无法看到您在会话中存储的数据。答案 3 :(得分:-1)
如果cookie被安全加密(例如,服务器存储的秘密会定期更改),我认为在cookie中存储有用数据没有问题。为什么要将它存储在服务器上?让客户做一些改变工作 - 特别是如果它是偏好。为什么服务器必须不断地存储和检索会话文件中的数据?如果您有数十万用户在捣乱您的网站怎么办?现在你必须维护数十万个会话文件。
答案 4 :(得分:-2)
我不能简单地想到加密cookie中的数据是有用的情况。如果您想保留有关用户或其偏好,信息等的秘密数据,则将其存储在服务器上的文件,会话或数据库中,而不是存储在客户端的计算机中。
另一方面,如果您创建身份验证,则应使用会话而不是创建秘密加密的cookie值。会议没有实现,他们是要走的路。