公理“如果你要推出自己的安全,你已经失败了”,在这里适用。
对于您的 5 个字符 [0-9, AZ, az] 引脚,您生成的熵少于 8.27 位(64 310 = 2^n)。[固定的]
攻击者只需不到一天的时间(1,000 次猜测/秒,这非常慢)就可以破坏您的系统。这可以接受吗?也许对于绕过安全性影响很小的微不足道的系统。
我是否应该编写一个锁定机制来“禁止”来自具有大量失败尝试的 IP 的流量?
IP可以被欺骗。
我应该编写一个错误检查系统(类似于 Luhn 的信用卡号码算法)吗?
这实际上会减少熵中的位数,从而更容易闯入您的系统。
我应该使用验证码系统吗?
如果你觉得你需要锻炼。验证码已被破坏,除了作为减速带外,其他任何东西都没有用。
更新
不幸的是,对于计算机安全没有一刀切的解决方案,因为它仍然是一个不成熟的(不成熟的?)领域。任何说“哦,做这个,你会没事的”的人都在跳过有关安全性的最基本问题之一。
安全始终是一种权衡
最终安全的系统无法访问。另一方面,最终可访问的系统没有进入障碍。显然,这两个极端都是不可接受的。
作为软件开发人员,您的工作是找到两者之间的最佳平衡点。这将取决于几个因素:
- 用户的技术专长
- 您的用户愿意忍受安全性
- 实施和维护的成本(时间和金钱)(即,更复杂的系统将产生更多的支持电话)
- 后膛对您的用户和公司的影响
- 臀位的可能性:你是美国国防部吗?签证?你现在可能受到攻击了。位于加利福尼亚州奥海的 Bob's Bicycle Shop 位于另一端。
根据您的问题,我认为您正在有效地为他们生成“密码”。如果你把它翻转过来怎么办?将 pin 作为他们的帐户,当他们第一次登录您的系统时,他们必须创建一个密码*,从那时起就需要该密码。
*是的,如果这是一家银行,那么这不是一个好主意。