尝试暴力破解平均密码/非侵入性但有意义的限制的次数?

2024-04-01

关于通过应用限制来防止暴力破解 Web 服务的密码,SO 有几个有用的答案。但我找不到任何好的数字,而且我在这方面缺乏专业知识,所以问题是:

通常需要多少次尝试才能暴力破解 6 个或更多字符的平均密码(没有可能有帮助的其他知识,但考虑到密码可能容易受到字典攻击),并基于此,有意义的限制是什么在不影响用户体验的情况下应用节流算法?

这是我目前的计划:

  • 登录表单使用随机数,因此攻击者必须等待完整的请求周期完成才能获取登录尝试的结果并检索新令牌。
  • I allow the login form to be retrieved 50 times per IP with less than a minute between requests, after that the IP will be blocked for 1 minute. Any new attempts within this one minute will restart the timeout.
  • There's a sleep applied for each fetching of the login page of # of attempts / 5, so after 5 requests with less than a minute between requests it'll take > 1 second to fetch the form, after 10 requests > 2 seconds, etc.
  • Additionally, I'm only allowing 100 failed login attempts per user account with 2 hours between attempts, after that the account is blocked for 2 hours.
  • 为了避免频繁对帐户进行 DoS'ing,可以将 IP 列入白名单(无限制)或黑名单(完全忽略任何登录尝试)。

根据到目前为止的答案,我已将其调整为如下工作:

  • 检索登录表单的速度会根据每个 IP 逐渐变慢。每个新请求都会被休眠# of requests / 2秒。 10 分钟无登录活动后,计数器将重置。
  • 我为每个 IP 保留登录尝试的 FIFO 堆栈。如果一个IP在2小时内登录失败30次,则该IP被暂停。我还保留了每个 IP 的暂停次数列表,暂停时间的计算方式为2 ^ (# of suspensions + 1) hours。这应该会导致不断违规的 IP 迅速被列入事实上的黑名单。
  • 此外,如果一个帐户在一天内登录失败 20 次,该帐户将被暂停 2 小时。我还不太确定这项措施,因为这意味着帐户很容易受到 DoS 攻击。不过,如果没有大规模的分布式僵尸网络,违规 IP 被列入事实上的黑名单的速度应该比帐户被永久拒绝服务的速度还要快。这也是保护帐户的一种非常有效的措施。

我认为这些限制不应伤害普通用户,即使是那些经常忘记密码并尝试多次登录的用户。考虑到服务的平均大小,IP 限制也应该适用于经过大量 NAT 处理的用户。有人可以通过一些扎实的数学来证明这是有效还是低效吗? :)


你有一些很好的控制,但你真的应该加强它。普通用户登录失败的次数不应超过五次。如果他这样做,请向他显示验证码。

请记住,在任何情况下都不应锁定帐户。这称为帐户锁定漏洞。这允许任意用户从服务中注销其他用户(DOS,拒绝服务)。

我已经多次解决过登录限制问题,我喜欢的是在数据库中创建一个包含失败尝试和上次失败尝试日期的字段。每当某人(任何人)无法登录帐户 X 时,您就会增加 X 失败尝试的值并更新上次失败尝试的日期。如果失败的尝试计数超过 Y(例如,五次),则显示特定用户的验证码。因此,您不会有一个巨大的被禁止 IP 数据库来限制登录表单,而是每个用户只有两个字段。由于僵尸网络和代理(合法和非法)的存在,基于 IP 的禁止/限制也没有什么意义。当 IPv6 流行起来时,我想你会更加失败。根据目标帐户进行限制更有意义。因此,当您的帐户 X 成为僵尸网络的目标时,登录表单将受到验证码的限制。这里明显的缺点是,如果您的验证码失败……您的登录限制也会失败。

所以,本质上它是这样的:

  • 有人未能登录帐户 X - 增加失败尝试字段。
  • 如果失败尝试超过5次,并且最后一次失败尝试发生在一小时前,则该帐户似乎受到攻击,请显示验证码。
  • 另一方面,如果最后一次失败的尝试发生在一天多前,则攻击似乎已经结束,降低您的护盾并且不需要验证码。

它基本上是一个盾牌,当针对特定帐户的大规模有针对性的攻击时,它就会打开。这种方法的好处是,即使我在世界各地拥有一个 PC 群也没关系 - 我无法暴力破解单个帐户,因为它是基于帐户的。

这样做的两个坏处是,如果验证码失败,您将一无所有。当然,您也可以通过设置其他保护措施来改善这种情况。第二个问题是,如果我有一个僵尸网络,我可以为每个帐户使用一台电脑,然后很可能在一百万台计算机网络中我至少破解了一个帐户,但这种方法仅适用于非目标攻击。

我希望这能给你一些想法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试暴力破解平均密码/非侵入性但有意义的限制的次数? 的相关文章

  • 如何找到最长的回文子序列(不是它的长度)

    我想找出字符串中最长的回文子序列 我到处都找到了找出子序列长度的算法 并声明该算法也可以扩展以返回子序列 但我没有找到如何实现的 有人能解释一下我怎样才能得到序列吗 既然你提到了链接最长回文子序列 http www geeksforgeek
  • 检查数独字段的很酷的算法?

    有谁知道一个简单的算法来检查数独配置是否有效 我想出的最简单的算法是 对于大小为 n 的板 伪代码 for each row for each number k in 1 n if k is not in the row using ano
  • 为无向无权图实现推重标签算法 s-t 最小割边

    我正在寻找一个好的解决方案来在无向和未加权图中找到 s t 最小切割边 我想使用推送重新标记算法 但我不确定如何实现它以在无向和未加权图上找到最小割 在每对顶点之间有两条反向边 并在所有边上赋予相同的权重 并应用推送重新标记算法 我可以用这
  • 如何使用KDTrees实现最近邻搜索?

    所以 我正在实施一个KD Tree http en wikipedia org wiki Kd tree进行最近邻搜索 我已经构建了树部分 但我认为我没有完全理解搜索部分 关于遍历树来搜索邻居 维基百科文章如下 Starting with
  • Lockfree 标准集合和教程或文章

    有人知道用于无锁常用数据类型的实现 即源代码 的好资源吗 我正在考虑列表 队列等 锁定实现非常容易找到 但我找不到无锁算法的示例以及 CAS 的工作原理以及如何使用它来实现这些结构 查看 Julian M Bucknall 的博客 他 详细
  • 如何计算两个ip之间的主机数量? C#

    我有两个ip 1 1 1 1 1 2 4 4 4 4 显然这只是一个例子 这是一个动态计算器 如果子网掩码不相关 我如何计算所述 ip 之间的主机数量 要计算 理论 IP 地址的数量 您需要将每个 IP 地址转换为其 32 位整数格式 这实
  • 如何在Scala中实现尾递归快速排序

    我写了一个递归版本 def quickSort T xs List T p T T gt Boolean List T xs match case Nil gt Nil case gt val x xs head val left righ
  • 合并字符数组中的最小重复次数

    假设我有两个数组 我想合并它们 以便合并后的数组具有最小重复次数 例如 x x 是重复 arr1 x d d m f m arr2 d d x f f m 唯一的条件是在合并数组中 元素来自arr1 and arr2必须出现在各自的订单中a
  • Android应用程序中的模式输入

    我想知道是否有其他替代方案可以替代 Android 上平庸的 EditText 密码输入 是否有 API 或开源代码可以集成到我的应用程序中 类似于锁屏图案解锁 Intent 可能会返回哈希值 数字 字符串或代表用户输入的模式的任何内容 我
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 需要帮助解决 Project Euler 问题 200 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试制定一个算法来解决 We
  • 使用FFT算法计算

    给定在平面上的点 1 0 2 0 n 0 上发现的一组 n 个粒子电荷载流子 在 i 0 点发现的粒子电荷记为 Qi 作用在粒子上的力由以下公式给出 C is a Coulomb s constant 给出一个算法来计算 Fi 对于总复杂度
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 如何列出静态链接的 python 版本中可用的所有 openssl 密码?

    在python 2 7 8到2 7 9升级中 ssl模块从使用更改为 DEFAULT CIPHERS DEFAULT aNULL eNULL LOW EXPORT SSLv2 to DEFAULT CIPHERS ECDH AESGCM D
  • 在 O(n) 时间内找到 n x n 矩阵中的局部最小值

    所以 这不是我的家庭作业问题 而是取自 coursera 算法和数据结构课程的未评分作业 现已完成 You are given an n by n grid of distinct numbers A number is a local m
  • 快速求解子集和

    考虑这种解决子集和问题的方法 def subset summing to zero activities subsets 0 for activity cost in activities iteritems old subsets sub
  • 如何检测CSRF漏洞[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定一个网站 如何检测潜在的 CSRF 漏洞 提前致谢 这是一个CSRF https www owasp org index php
  • Amazon Web Services:设置 S3 策略以允许 putObject 和 getObject 但拒绝 listBucket

    我在 Amazon S3 上使用 getObject 和 putObject 请求 并在创建访问存储桶的策略时发现 如果我不允许 listBucket 则会收到 访问被拒绝 错误 这样做的问题是 listBucket 意味着用户可以列出存储
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba

随机推荐

  • 如何设置依赖gradle任务的属性

    我想设置一个 通用 任务 它将为多个平台构建应用程序包 它使用 javafxpackager 该任务的机制适用于创建所有平台捆绑包 但区别在于任务使用的各种属性 我原以为我会为每个平台创建单独的更高级别的任务 在其中设置平台特定的属性 然后
  • 检测ajax请求

    我正在编写自己的 MVC 框架来练习 并且我有一个 Request 类 我想捕获请求的类型并相应地解析数据 无论是 AJAX JSON 调用还是 HTML XML 请求 我目前使用 SERVER HTTP ACCEPT 以及上面使用 var
  • 了解 SQL Profiler 中的读/写次数

    请参阅此 SQL Profiler 视图中指示的 SQL 语句 所有这些事件都来自一台客户端计算机 该计算机正忙于长时间运行的进程 处理数千行 每次处理一行大约需要 6 5 秒 这是 SQL Profiler 显示的注销之间的时间 尽管实际
  • 如何删除python中的文件夹? rmtree 错误

    我最近遇到了这个麻烦 我需要一个功能来删除 Windows 中的整个文件夹 所以我进行了搜索 这就是我得到的 如何使用 Python 删除 删除不为空的文件夹 https stackoverflow com questions 303200
  • 无法从 IEnumerable 转换为 ICollection

    我定义了以下内容 public ICollection
  • 如何将 unique_ptr 的向量声明为类数据成员?

    我想要一个 unique ptr 的向量作为我正在创建的类的成员 class Foo private vector
  • 曲线与分段函数拟合?

    正如标题所示 我正在尝试用分段函数进行曲线拟合 这是一个例子 import numpy as np import scipy optimize as sio x np array 0 1 2 3 4 5 y np array 2 3 4 1
  • 如何使用 mpl_toolkits.basemap.cm 中的颜色图创建离散颜色条?

    当我绘制 pcolormesh 图时使用颜色图from matplotlib cm like jet Set2 等 我可以使用 cMap plt cm get cmap jet lut 6 颜色条显示如下 但是如果我想从Basemap包 如
  • 以编程方式打开 Apple Health

    是否可以像使用 设置 应用程序一样以编程方式打开 健康 应用程序 如果无法直接打开应用程序的 Apple Health 权限屏幕 我们至少可以打开 Apple Health 主屏幕吗 Edit 我知道我无法再次请求权限 就像相机访问等其他操
  • Jetty mysql 连接池配置错误:javax.naming.NameNotFoundException;剩余名称'env/jdbc/---(mysql 5.0+jetty 7.0.1)

    我的配置文件 项目 WEB INF web xml
  • 如何在 ActionScript 3 中从缓冲区(ByteArray/Stream)播放 MP3 声音?

    所以 我有一个MP3 数据缓冲区 如果我保存此缓冲区并将其命名为 buffer mp3 它就会播放 但在这种情况下我不应该将其保存到文件系统 我必须玩 但我不能 我该怎么办 我尝试了下一个代码来播放该缓冲区 ByteArray Stream
  • PHP DOTNET 地狱

    我是 PHP 的新手 今天我发现DOTNET http php net manual en class dotnet php class 所以我学习了手册 上网寻找一些例子 最后编写了我的测试应用程序 使用 Framework 4 0 Cl
  • PHP 初学者之类继承

    class User public company name class Employer extends User public fname public sname 这是我创建的 test php 我已经包含了类文件 employer
  • autoreleasepool 未在此范围内声明错误

    我的项目是 XCode 4 2 该项目编译为常规调试版本 但是当我将构建类型更改为分析 我想分析内存使用情况 时 我从这个 Objective C C 类中收到错误 Volumes mchinen scm Voicer FilterAudi
  • PDO、Mysql 和本机准备好的语句

    到目前为止我对 PDO 的理解是 PDO 将在可以的地方使用真正的准备好的语句 在不能的地方模拟它们 我还了解到 就 mysql 而言 如果您正在与支持它们的 mysql 版本进行通信 则将使用真正准备好的语句 事实上 MySQL PDO
  • wget :在发送后数据之前获取字段信息

    我使用 wget 以及 post data 和 save cookies 选项成功地通过了网站的登录表单 现在我尝试填写网页的某些字段 然后提交 问题是 网页上有一个 图灵 隐藏字段 每次都有不同的值 我尝试的是打开网页 加载我的cooki
  • 在无形状 HMap 中添加或修改值

    有谁知道我如何在无形的 HMap 中添加或修改值 我在 HMap 定义中看到的唯一函数是 get 看起来它正在创建一个新地图并添加 k v tuple 同上 我怀疑我需要使用镜头吗 shapeless HMap是不可变的 它是一个包装器 具
  • ruby 中的简单解析[重复]

    这个问题在这里已经有答案了 可能的重复 Ruby 中解析 HTML 文档的方法 https stackoverflow com questions 2554909 method to parse html document in ruby
  • 给定一个邻接矩阵,如何使用 matplotlib 绘制图形?

    我有一个由其邻接矩阵 一个 numpy 数组 描述的无向图 我想绘制它 并将顶点放置在 n 正多边形中 这段代码的工作原理 n adyacency mathix shape 0 axis np linspace 0 2 np pi n en
  • 尝试暴力破解平均密码/非侵入性但有意义的限制的次数?

    关于通过应用限制来防止暴力破解 Web 服务的密码 SO 有几个有用的答案 但我找不到任何好的数字 而且我在这方面缺乏专业知识 所以问题是 通常需要多少次尝试才能暴力破解 6 个或更多字符的平均密码 没有可能有帮助的其他知识 但考虑到密码可