创建用户帐户时记录和记录暴力攻击的正确方法

时间:2016-07-11 17:18:37

标签: java algorithm security design-patterns application-security

我们有以下用例:

用户可以通过填写验证表单及其ID,名字,姓氏和DOB来自行注册企业帐户。 ID是只有用户提前知道的东西。用户有5次尝试匹配他们的所有信息

我们计划在数据库中维护几个表,我们在其中存储验证尝试

Table 1 columns: id, attempts
Table 2 columns: id, fname, lname, dob

表1和表2具有一对多的关系。以下是用户在锁定之前尝试猜测名字,姓氏和dob 5次时会发生什么的示例。应用程序检查表1的尝试列,如果特定ID为5或大于5,则将用户帐户(具有该特定ID)视为已锁定。

table 1
id   attempts
1234  5

table 2
id    fname   lname  dob
1234  john     doe   19900101
1234  jane     doe   19900101
1234  jason    doe   19900101
1234  john     dae   20010102
1234  roger    smith 19960101

上述方法的问题在于我们只跟踪id失败的尝试。如果用户试图更改ID和攻击怎么办?通过保留名字,姓氏和dob相同并猜测id?

也许我需要重新考虑验证表设计和我的方法来解决用户试图猜测id的问题?或者有更好的方法来考虑这个问题吗?

编辑:这是一个带有前端客户端的REST Api网址。所以Captcha可能无法保护API ??

1 个答案:

答案 0 :(得分:0)

你要纠正"秘密" ID增加了很少的安全值,因为它是可以强制执行的参数。如果攻击者知道第一个,最后一个,dob,那么他们可以迭代ID直到它验证。

更好:在来自地址的5次无效尝试后锁定IP地址。这可以防止来自单个(或几个)计算机的天真类型的暴力破坏。

最佳:为了防止bot-net或自动系统以脚本方式强制执行,然后使用一个CAPTCHA是传统的安全模式来强制进行人工注册。

如果ID是"秘密,"你还应该确保它足够长(例如,不仅仅是四位数)。也许八个字母数字会为你在这里容忍的风险水平提供足够的复杂性?取决于您的风险承受能力和系统/数据的敏感性。

编辑:解决保护REST API的问题...如果您只想允许从授权的GUI提交其余API,那么您可以使用GUI提交的随机数,然后由REST服务进行验证。 (类似于CSRF保护。)如果您想允许从其他程序准备好提交API,这基本上是一种促进暴力攻击的方法。大多数主要在线服务都不提供类似注册的API。但您仍然可以使用长/复杂ID和锁定IP地址。