
数据安全是用于将纯文本转换为密文的加密类。这通过使用 160 位密钥加密纯文本块来确保数据机密性。密钥的强度非常高,要破坏密钥,需要 ~2^160 次尝试,这是长度为 17 个数字的数字,而今天的处理器不够强大,无法在短时间内破坏此密钥。
加密算法由此脚本的作者 Arlind Nushi 设计和发现,名为 ANCrypt。
安全饼干
SafeCookie 是在 ANCrypt 算法下实现的,并确保:
- 数据保密
- 数据完整性
数据机密性 – 确保数据对拥有密钥和加密/解密算法的所有人隐藏。
数据完整性 – 保证保存在 cookie 上的数据不会被其他用户更改或修改。如果数据被修改,您可以通过使用测试 cookie 完整性的方法来了解这一点。Cookie 中的数据完整性非常重要,因为我们知道每个用户都有可能在自己的浏览器上更改 Cookie,并且这些 Cookie 会由您的网站读取。
也就是说,例如,如果您有一个 cookie 来检查用户是否已登录,并且 cookie 上保存了以下形式的用户访问权限:user_logged=false、user_privileges=normal_user。任何人都可以对这些 cookie 进行修改,因为它们易于理解,并且是网站上功能的含义。然后用户尝试可以更改 user_logged=true、user_privileges=admin,这就是未受保护的 cookie 是您网站弱点的原因。
但是使用 SafeCookie,cookie 是这样保存的:
Cookie 名称的哈希值是使用 MD5 算法生成并以该名称保存的
Cookie 的价值
值的哈希值是使用 MD5 生成的 – 用于数据完整性检查
然后将该 cookie 的哈希值和数据连接起来
串联数据使用特定密钥与 ANCrypt 加密
为了测试 cookie 数据完整性,这是如何验证任何 cookie 是否被更改(修改)并且它不是您之前保存的 cookie 的流程。
- 首先,要检索 cookie,您需要指定一个 cookie 名称,该名称将被哈希处理以搜索该 cookie 是否存在。
- 如果存在 cookie,它会使用与加密时相同的密钥解密该 cookie 的内容
- Cookie 分为两部分
- 包含保存的哈希值和 cookie 内容的部分
- 为Cookie的内容生成一个哈希值,并将与Cookie的保存哈希值进行比较
如果值相同,这意味着 cookie 不会被更改,否则它将返回 false 值,这意味着 cookie 内容已被更改,并且由您来处理该 cookie。
从 SafeCookie 处理并保存相同的 user_logged=true 形式的相同 cookie,它具有以下形式:
cookie(名称:d688c4ccd7e20183b67f80d8816a2126,值:i1leWo1XUV1VgFCIS39UWEdKTlVLSEhBTUNEQHZyP0F7fntv)
很难弄清楚这个 cookie 的用途,但拥有密钥的用户确切地知道这个 cookie 的含义。
要求
建议使用 PHP 4.3 或更高版本
评论0