21、数据安全存储与密码保护指南

数据安全存储与密码保护指南

1. 字典存储的问题

字典是一种实用的数据结构,在 .NET 中甚至有线程安全的 ConcurrentDictionary ,这使得它成为手动实现缓存的一个有吸引力的选择。然而,框架中包含的常规字典通常不是为基于用户输入的键而设计的。如果攻击者知道你使用的运行时,他们可以发起哈希碰撞攻击。他们可以发送许多不同的键,但这些键对应相同的哈希码,从而导致碰撞。这会使查找操作的时间复杂度从 O(1) 接近 O(N),严重影响应用程序的性能。

为面向 Web 的组件开发的自定义字典,如 SipHash,通常使用具有更好分布特性的不同哈希码算法,因此碰撞概率更低。这些算法平均而言可能比常规哈希函数稍慢,但由于它们对碰撞攻击的抗性,在最坏情况下表现更好。

此外,字典默认没有淘汰机制,会无限增长。在本地测试时可能看起来没问题,但在生产环境中可能会导致严重问题。理想情况下,缓存数据结构应该能够淘汰旧条目以控制内存使用。

2. 秘密存储的重要性

秘密(如密码、私钥和 API 令牌)是访问系统的关键。尽管它们只是小数据片段,但能提供不成比例的访问权限。例如,拥有生产数据库的密码就可以访问所有数据;拥有 API 令牌就可以执行该 API 允许的任何操作。因此,秘密必须成为威胁模型的一部分。

2.1 避免将秘密存储在源代码中

程序员倾向于走捷径,将密码放在源代码中是常见的做法。但从长远来看,所有源代码都会被托管在 GitHub 等平台上。源代码的敏感性不如生产数据库,但却包含访问数据库的密钥。客户可能出于合同目的请求源代码,开发人员可能保留本地副本,而他们的计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值