防止登录请求泛滥的简单方法?

2024-02-26

如果我的网站使用 POST 表单进行登录,有什么快速、简单的方法可以防止恶意客户端向我的 Web 服务器发送大量 POST 请求,试图暴力破解我的用户帐户?

PHP/MySQL/Apache。


防止暴力破解比乍看起来要棘手。解决方案是组合控制——单一控制并不能满足要求。请记住目标:您希望减缓暴力攻击的速度,使其要么无效,要么您可以检测到它并采取行动。第二种选择通常比第一种更有效。

您可以使用验证码(这是目前流行的技术),但验证码通常可以自动读取,当计算机无法读取验证码时,可以通过支付低工资工人或使用验证码来获得人口农场保护“免费”色情内容(两种技术都已使用)。

其他人关于在表单中使用秘密值的建议并没有真正的帮助;攻击者只需解析 HTML 即可找到秘密值,并将其包含在他们的帖子中。这很容易自动化,所以这并不是一个很好的防御。哦,如果结果证明该值很容易预测(使用糟糕或损坏的 PRNG 或坏种子),那么您又陷入了困境。

跟踪 IP 地址是可以的,但前提是您不支持 NAT。使用 NAT,有效用户将看起来是重复的。请记住,攻击者可以冒充其他系统;单个攻击系统可以使用其他 IP 地址,甚至拦截到该系统的流量(ARP 中毒是一种很好的机制)。

您可以在给定时间段内使用最大失败超时次数​​(例如 1 小时内 3 次)。这会减慢攻击者的速度,但不一定能阻止他们。您可能会包含自动解锁,但您需要做一些数学计算,并确保解锁时间确实有用。

指数退避是另一种有用的机制。这可能会将会话(攻击者不必返回到服务器)绑定到 IP 地址(与 NAT 中断)或帐户(不考虑跨多个帐户的暴力破解) 。

为了使其他防御措施发挥作用,您必须拥有强密码。如果您的密码很容易被猜到(它们在字典中吗?它们很短吗?它们很复杂吗?),攻击就会成功。实现最低密码强度要求和“非法密码”字典(与该字典的常见字符替换相结合)是一个好主意。或者,您可以使用 OATH、证书登录或硬件令牌(如 RSA 的 SecurID)等系统。

我认为是伯特·卡利斯基讨论了客户的难题。基本上,你给客户端一个对服务器来说很容易但对客户端来说很困难的挑战;客户端通过浪费自己的资源试图解决这个难题来自我解决。这里的困难在于确定谜题的正确复杂性。例如,它可能需要对一个大数进行因式分解。无论它是什么,您都必须假设最有效的算法,并且您必须能够处理不同机器上不同浏览器的不同性能(可能很慢),同时减慢浏览器外部的自动攻击(可能比你的 JavaScript)。我是否提到过您必须用 JavaScript 实现解决方案?

但您仍然受到跨多个帐户的攻击的困扰。我不知道有任何公开使用的控件可以很好地解决此问题,除非您可以跟踪 IP 地址。

然后,您需要保护用户名。不知道用户名的攻击者(需要一个不指示用户名何时有效的系统)将必须学习用户名和密码,而不是轻松确认用户名,然后只攻击密码。

并且您需要小心错误消息和服务器计时也不会泄露有效密码。

当您处理错误消息时,请确保密码恢复机制不会泄露任何信息。即使在其他方面良好的系统中,密码恢复也会毁掉整个事情。

但是,尽管如此,攻击最终取决于服务器的性能。您可能只是实现一个非常慢的身份验证机制(对于有效和无效的身份验证都必须很慢)。在线攻击的速度保证不会超过服务器处理请求的速度。

然后,您需要检测暴力攻击,因此您的系统需要良好的审计跟踪。但您需要小心,不要记录太多日志消息,否则您将通过填满磁盘空间来开辟一种简单的方法来管理服务器。像 syslog 的“上一条消息已被接收 1000 次”这样的消息就很好了。

一旦你完成了所有的设计,并再次完成了实现,你将需要检查整个系统以及系统的所有功能,在给定当前设置和服务器性能的情况下对其进行数学建模,并确定攻击者暴力破解 (a) 单个帐户和 (b) 任何帐户(跨帐户暴力破解以避免特定于帐户的控制)所需的平均时间。

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

防止登录请求泛滥的简单方法? 的相关文章

  • Web 应用程序架构:1 个或 n 个 API

    背景 我正在考虑网络应用程序组织 我将前端 浏览器网站 与后端 API 分开 2 个应用程序 2 个存储库 2 个托管 Front 几乎会调用 API 来完成所有事情 因此 如果我的 API 有两个独立的域服务 例如 学习上下文和预订上下文
  • 如何在 Android 中从网络浏览器 (Chrome) 打开任何应用程序?我与 A Href 链接有什么关系?

    我想从我的网络浏览器打开第三方应用程序 所以 我没有任何清单文件或任何东西 我有一个网页 我想要一个可以打开第三方应用程序的链接 例如 Twitter 或 Opera 如何构建锚链接来打开该应用程序 谢谢 基于意图的 URI 的基本语法如下
  • 如何定义状态?

    有谁有一个好的定义state在网络应用程序的上下文中 更具体地说 什么是state在 React 的上下文中意味着 这与第一个定义有什么不同吗 我看到 状态 这个术语在 React 开发中被大量使用 但我一直无法找到一个可靠 简洁的定义 两
  • JavaScript 支持的网站的自动导航

    我需要在 Python 中自动导航 JavaScript 支持的网站 以便我可以抓取一些内容 我碰到鸡足 http groups csail mit edu uid chickenfoot quickstart html 这是一个 Fire
  • `http://localhost` 上的安全 Cookie

    我正在尝试设置安全 cookiehttp localhost 3000 设置 Cookie loggedUser brillout 最大年龄 315360000 路径 仅 Http 安全的 但 Chrome 抱怨道 此 Set Cookie
  • FastAPI 中的返回值[重复]

    这个问题在这里已经有答案了 我试图在 FastAPI 中返回 matplotlib figure Figure 如果我像图像一样保存它 它就可以工作 代码在这里 router get graph id file name Return th
  • 如何制作基于Web的Python交互式shell

    网站如何喜欢https www pythonanywhere com try ipython https www pythonanywhere com try ipython work 他们可能会做几个exec命令 或与 ipython 交
  • 客户端语言

    我不是网络程序员 所以请原谅我的无知 当谈到服务器端编程时 我们有很多可用的技术 例如 PHP ASP net JSP 等 然而 说到客户端脚本 我只听说过 JavaScript 和 AJAX 也许您还可以包含 Java Applet 因为
  • Facebook 好友对话框无法在移动设备上运行

    序幕 我遇到了与之前提出的问题中描述的相同的问题 FB 在移动设备上添加好友对话框不起作用 https stackoverflow com questions 17230231 fb add friend dialog on mobile
  • 如何使用Python获取请求中响应的原始内容?

    尝试获取HTTP响应内容的原始数据requests在Python中 我有兴趣通过另一个渠道转发响应 这意味着理想情况下内容应该尽可能原始 这样做的好方法是什么 After requests get 您可以使用r content提取原始字节类
  • 将 >100K 页面链接在一起而不会受到 SEO 惩罚

    我正在创建一个网站 该网站将审查互联网上数十万个其他网站的隐私政策 它的最初内容是基于我的运行普通爬行 http commoncrawl org 50 亿页网络转储和分析所有隐私政策 https stackoverflow com ques
  • 如何检测访问者使用的是HTTP/2还是SPDY?

    我正在寻找一个可以检测访问者的浏览器是否启用了 SPDY 或 HTTP 2 的脚本 就像是this https www ist http2 aktiviert de 理论上 一次nextHopProtocol降落在资源计时 https w3
  • 允许获取请求但仅在我的域中?

    在我的网站上 我可以使用 GET 请求触发某些操作 例如隐藏或删除评论的功能 我不是很担心 但如果有人使用 img src url 设计攻击来删除评论或电子邮件 那会很烦人 有办法防止这种情况吗 我使用 httponlycookies 作为
  • 根据 $_POST 值填充字段

    我正在寻求有关我试图填写的表格的帮助 我通常会使用 onChange 函数 但我认为这不是一个选择 基本上我有一个
  • 如何判断是哪个控件导致ViewState加载失败?

    我的页面面临 Viewstate 加载问题 页面有一个登录工具来登录管理员和非管理员用户 当非管理员用户登录页面并单击启用了自动回发的复选框时 会出现奇怪的行为 错误详情如下 后来我发现 在左侧的导航面板中 承载链接 侧边栏如下图所示 Se
  • 引导程序中导航和巨型屏幕之间的差距

    对于我的一生 我无法确定我的导航和大屏幕之间的空白来自哪里 我已经玩过很多变量 但无法让它消失 我在这里做了一个cssdeckhttp cssdeck com labs u6ws0ozl http cssdeck com labs u6ws
  • 执行预检请求时是否需要 Access-Control-Allow-Origin CORS 标头?

    我们在我们的网站上看到了著名的 CORS 错误 XMLHttpRequest 无法加载https my site com api https my site com api 请求的资源上不存在 Access Control Allow Or
  • IIS 6 网站根目录与应用程序?解决Url()?

    IIS 6 ASP NET 3 5 C NET 我们遇到一个问题 即同一组文件的行为会有所不同 具体取决于它是根 IIS 网站还是 IIS 网站下的应用程序 使用生成的网址解析网址 http msdn microsoft com en us
  • URL中的gs_upl是什么意思?

    在任何谷歌搜索 URL 中 gs upl 是什么意思 例如 那么 gs upl 1045l1663l0l3648l4l4l0l0l0l0l258l682l0 3 1l4l0 在这里意味着什么 从构建的脚本gs upl j 我找到 funct
  • 如何将 html 输入到 Flask 中?

    我有这个 html 位

随机推荐

  • 解析不带引号的键的 JSON

    据我所知 在 JSON 中 键应该用双引号引起来 但是 我使用的数据源没有引用它们 这导致 Ruby JSON 解析器引发错误 有没有办法执行 非严格 解析 Example gt gt JSON parse name hello age 2
  • 如何将带有 unsigned char* 的结构从 C# 传递到 C++?

    我有一些C dll带有结构描述和一些方法 struct MSG STRUCT unsigned long dataSize unsigned char data 和功能例如 unsigned long ReadMsg unsigned lo
  • Vue js动态添加属性不响应

    我有一个组件显示有一个名为obj obj有两个属性 obj title and obj body 每个都绑定到一个文本字段 以便具有反应性和可编辑性 div div
  • 如何在 C# 中截取 Winforms 控件/表单的屏幕截图?

    我有一个listviewwinforms 窗体上的控件 它填满了整个屏幕 但其中的项目超出了屏幕可以显示的范围 如何截取整个控件的屏幕截图 就好像我可以显示控件的全部内容一样listview在屏幕上 所以如果整个listview需要 100
  • 在 MySQL2 gem 中使用准备好的语句?

    如何创建准备好的语句insert and selectMySQL 中的查询 我正在使用 MySQL2 gem 我的连接对象如下所示 con Mysql2 Client new host gt ENV DB HOST port gt 3306
  • 如何从 Repeater 获取更新的 Textbox 值?

    我有一个repeater控制如下所列 它有一个textbox控制 当一个save button单击后 我需要从文本框中获取更新的文本 我有以下代码 但当我获取文本框文本时 它给了我旧值 我们怎样才能得到更新后的文本呢 代码隐藏 protec
  • R:使用ggplot2和lapply生成多个条形图:如何根据列表插入字幕?

    我的目标是生成并保存几个条形图lapply and ggplot2 为此 我根据我的数据创建了一个列表 现在 除了字幕之外 一切都正常 我想将列表元素的名称插入到图表中 到目前为止 我只能插入第一个元素的名称 我找到了另一篇文章 这对我到目
  • ASP.NET MVC 自定义路由类 - 无法获取路由数据

    我正在尝试实现我自己的路由类 继承默认路由 这就是我的自定义路由类的样子 public class FriendlyRoute Route public FriendlyRoute string url RouteValueDictiona
  • R Plotly 默认取消选择迹线

    我正在使用 R Plotly 并有一行以下形式的行 add trace y meanRank x DateOnly data timeSeriesDF name Daily Value text hoverText hoverinfo te
  • 可以使用 Angular 依赖注入代替 RequireJS 吗?

    我从 Angular 开始 如何将一个应用程序的所有代码分解为多个文件 我观看了 60 多分钟的介绍 他们提到我可以在没有 requirejs 或任何其他框架的情况下做到这一点 假设我有这样的东西 效果很好 var app angular
  • ROracle SELECT 语句中的绑定参数

    使用时ROracle in R 我想将一些参数绑定到数据 所以我这样做 gt dbh lt dbConnect Oracle user email protected cdn cgi l email protection port sid
  • SomeType' 是什么意思? [复制]' aria-label='Scala - ' => SomeType' 是什么意思? [复制]'> Scala - ' => SomeType' 是什么意思? [复制]

    这个问题在这里已经有答案了 今天我想问一下什么是 gt SomeType意思是 我发现它用在本文 http www codecommit com blog scala the magic behind parser combinators
  • 使用自签名证书进行代码签名软件

    目前 我们公司使用 Verisign Symantec 的数字证书对我们的软件进行代码签名 我们公司有人试图说服我们使用自签名证书 而不是从 Verisign Symantec 购买的证书 部分是作为 降低成本 的过程 尽管它们对于 2 3
  • 在运行时突出显示 WebDriver 中的元素

    有人可以帮忙吗 在 WebDriver 中执行测试期间 如何突出显示以下类中的所有 Web 元素 使用 Selenium RC 时 一切都非常简单 但使用 WebDriver 时我却遇到了困难 如果有人能为我提供一些我可以尝试的代码 以及该
  • .NET 集合类的渐近复杂度

    是否有任何关于 NET 集合类方法的渐近复杂性 big O 和其他 的资源 Dictionary
  • 为什么 Asp.Net Core 身份验证方案是强制性的

    我对 Asp Net Core 中似乎强制使用身份验证方案这一事实感到非常沮丧 我的目标是构建一个 API 我不想了解有关客户端的任何信息 我已经构建了自定义身份验证和授权 效果很好 我没有使用身份或cookie 但是 如果没有有效的身份验
  • 如何使用 Angular 过滤器对数据进行分组?

    我有一份球员名单 每个球员都属于一个组 如何使用过滤器列出每个组的用户 name Gene team team alpha name George team team beta name Steve team team gamma name
  • jdk1.6内存布局

    我使用的是jdk1 6 我配置了 Xmx 2G Xms 2G 新尺寸 最大新尺寸 660m 我启用了详细GC 我看到了这一点 但我不明白 PSYoungGen total 608256K used 32440K eden space 540
  • 我应该有多少个 DBContext

    使用实体 我目前拥有 dbcontext 其中包含每个表 我想知道是否每个人都这样做 或者例如每个模块都有一个上下文 对我来说 dbcontext 是一种将模型映射到数据库的连接 并且由于只有一个数据库 所以我只需要一个 在我深入讨论之前
  • 防止登录请求泛滥的简单方法?

    如果我的网站使用 POST 表单进行登录 有什么快速 简单的方法可以防止恶意客户端向我的 Web 服务器发送大量 POST 请求 试图暴力破解我的用户帐户 PHP MySQL Apache 防止暴力破解比乍看起来要棘手 解决方案是组合控制