首页 > 编程语言 >滑动窗口算法以及应用

滑动窗口算法以及应用

时间:2024-09-25 16:21:16浏览次数:11  
标签:窗口 登录 self attempts 算法 失败 滑动 锁定

主要涉及以下几个关键参数和概念:

  1. 窗口大小(Window Size):这是滑动窗口的宽度,决定了窗口中包含的数据点数量。例如,如果你在处理时间序列数据,窗口大小可能定义为秒、分钟或小时的数量。
  2. 窗口位置(Window Position):由左右边界(通常是两个指针)定义的窗口在数据序列中的当前位置。左指针标志着窗口的起始位置,右指针则是结束位置。
  3. 滑动步长(Slide Step/Stride):每次移动窗口时跨越的数据单位数量。步长可以等于窗口大小,导致窗口逐个数据单位移动,也可以小于窗口大小,实现重叠窗口,或者大于窗口大小,但通常步长不会大于窗口大小,否则窗口内的数据会不连续。
  4. 数据序列(Data Sequence):滑动窗口在其上进行操作的一系列数据,可以是数组、字符串、时间序列数据等。
  5. 目标函数(Objective Function):滑动窗口内的数据会被用来计算或评估某个特定的值或条件,比如寻找最大值、最小值、平均值、特定模式等。
  6. 初始化(Initialization):窗口如何开始其第一次滑动,通常是将左右指针设置在数据序列的起始位置。
  7. 更新策略(Update Strategy):随着窗口向右滑动,如何添加新数据到窗口以及移除旧数据,保持窗口内数据的实时性。

通过调整这些参数,滑动窗口算法可以应用于诸如流量控制、速率限制、趋势分析、数据平滑、模式匹配等多种场景。

应用

要实现一个登录失败后的账户锁定功能,并设置锁定时间,可以根据不同的编程语言和平台采用不同的策略。以下是一个基于Web应用(以PHP为例)的简单实现思路,以及一个针对Linux服务器(使用PAM模块)的配置方法。

PHP实现

  1. 数据库设计:首先确保用户表中有记录登录失败次数和最后一次失败时间的字段,如login_attemptslast_failed_attempt
  2. 登录验证逻辑
  • 在用户登录验证的逻辑中,首先检查login_attempts是否超过了设定的阈值,比如5次。
  • 如果未超过,验证用户名和密码。如果验证失败,增加login_attempts计数,并记录last_failed_attempt时间。
  • 如果超过,比较当前时间和last_failed_attempt,判断是否已达到锁定时间。如果未达到锁定时间,拒绝登录并提示账户已被锁定。如果已超过锁定时间,重置login_attempts为0,允许尝试登录。
  1. 锁定时间计算:可以在验证逻辑中加入根据失败次数动态调整锁定时间的代码,例如首次锁定30分钟,之后每次失败延长锁定时间。

结合滑动窗口的概念来实现登录失败后的账户锁定机制,我们可以将滑动窗口算法应用于记录和管理用户登录失败的尝试。这种情况下,滑动窗口可以用来跟踪一段时间内(而非累计次数)的登录失败情况,提供一种更灵活的账户保护策略,避免因历史失败尝试长期累积导致的账户长期被锁。

设计思路

  1. 窗口定义:定义一个时间窗口,比如过去15分钟内。在这个时间窗口内,记录用户的登录失败次数。
  2. 窗口滑动与更新:每当有新的登录尝试时,检查此次尝试的时间戳。如果这次尝试使得最早的失败尝试超出了窗口范围(比如尝试发生在15分钟以前),则从失败计数中移除这一条记录,保证窗口始终保持最新15分钟内的数据。
  3. 锁定逻辑:当窗口内的失败尝试次数达到预设阈值(如5次)时,触发账户锁定。锁定时间可以是固定的(如30分钟),或者动态根据窗口内失败次数调整。
  4. 解锁机制:一旦锁定时间到期,账户自动解锁,或者允许用户通过额外的身份验证(如邮箱验证码)手动请求解锁。

实现示例(伪代码)

class LoginSecurity:
    def __init__(self):
        self.failed_attempts = []  # 存储失败登录的timestamp
        self.threshold = 5         # 失败尝试阈值
        self.lock_duration = 1800  # 锁定时长,单位秒
        self.window_size = 900     # 窗口大小,单位秒

    def login_attempt(self, timestamp):
        self._prune_attempts(timestamp)  # 移除窗口外的旧尝试
        if len(self.failed_attempts) >= self.threshold:  # 达到阈值
            lock_until = timestamp + self.lock_duration
            print(f"Account locked until {lock_until}")
            return True  # 表示账户应被锁定
        else:
            self.failed_attempts.append(timestamp)
            return False  # 尝试未达阈值,继续处理登录逻辑

    def _prune_attempts(self, current_timestamp):
        """移除窗口外的旧登录失败记录"""
        while self.failed_attempts and (current_timestamp - self.failed_attempts[0]) > self.window_size:
            self.failed_attempts.pop(0)

# 使用示例
security = LoginSecurity()
current_time = time.time()  # 假设是当前时间戳
if security.login_attempt(current_time):
    # 执行账户锁定逻辑
else:
    # 继续验证登录信息

我们使用滑动窗口管理登录失败尝试,并根据最近的失败频率,而不是累积次数来决定是否锁定账户,提供了更加动态和用户友好的安全策略。



欢迎关注公-众-号【TaonyDaily】、留言、评论,一起学习。

Don’t reinvent the wheel, library code is there to help.

标签:窗口,登录,self,attempts,算法,失败,滑动,锁定
From: https://blog.51cto.com/love/12110625

相关文章

  • 算法设计与分析(数字塔问题
    目录题目——动态规划求解数字塔问题问题描述代码实现输出结果注意事项小结:题目——动态规划求解数字塔问题在这篇博客中,我们将探讨一个经典的动态规划问题:在一个金字塔形状的数字矩阵中,如何找到从顶部到底部的最大路径和。每次只能向下移动到相邻的数字,最终我们需要计算出这一最......
  • 工地扬尘自动监测识别算法、扬尘检测算法、扬尘检测算法样本标注
    在现代城市的发展过程中,环境问题日益凸显,尤其是空气质量问题。其中,扬尘作为影响空气质量的重要因素之一,其治理和监测显得尤为重要。一、应用场景1.环境保护-空气质量监测:在城市主要道路、工业园区等区域安装扬尘检测系统,实时监测空气质量,及时采取措施减少污染。-生态恢复:在生......
  • 2024 年面向算法交易者的十大开源 Python 库
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:    本文介绍2024年面向算法交易者/量化交易者/数据驱动交易者的十大Python库,文中详细描述了每个库优缺点、用途和特点,同时提供了外部链接供用户进一步学习。​​​​​​​    如果您对......
  • 投票算法 Boyer-Moore
    投票算法Boyer-Moore算法描述Boyer-Moore投票算法是一种用来在线性时间内找到数组中出现次数超过一半(即多数元素)的算法。这个算法非常高效,因为它只需要一次遍历数组,并且使用常数级别的额外空间。leetcode169题:多数元素算法思路维护一个候选元素和一个计数器来实现投票算......
  • 时序预测 | Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数
    时序预测|Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数据(单输入单输出)目录时序预测|Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数据(单输入单输出)预测效果基本介绍程序设计参考资料预测效果基本介绍1.Matlab实现SSA-TCN......
  • 算法备案主体审核被驳回?如何保证材料真实性?
    近日,很多朋友在算法备案申请流程主体审核环节遇到了「材料真实性存疑」的问题,具体驳回理由为:“《落实算法安全主体责任基本情况》真实性存疑,需根据企业真实情况描述制度建设内容”,本文将对此情况进行讲解。很多企业在主体信息审核意见的反馈是,「提交材料还需修改完善」,即信息......
  • 算法题之图论 [NOIP2001 提高组] Car的旅行路线详细题解
    P1027[NOIP2001提高组]Car的旅行路线这道题的思路呢,就是建个图,然后跑一遍Floyd,比较最小值就可以解决了。but!它每个城市只给三个点(共四个),所以还得计算出第四个点坐标。这里根据矩形的中点公式来表示未知点的坐标:(这个思路源于大佬 _jimmywang_       ......
  • 基于异步通讯事件触发的二阶离散系统同步算法设计
    精确计时在时间敏感的工业物联网(IIoT)中起着关键作用。然而,精确的时间同步需要更频繁的数据包交换,这会消耗更多的通信带宽和能量。这在电池供电的无线节点中是一个特别的挑战,低通信成本已成为时钟同步的重要因素。为了应对分布式无线传感器网络中实现低通信成本时钟同步的挑......
  • 工装识别算法 工服穿戴检测系统 CNN
    工装识别算法工服穿戴检测系统特点包括:工装识别算法工服穿戴检测系统利用图像识别技术,系统可以准确地识别工人是否穿戴了正确的工装,包括工作服、安全帽等。一旦检测到未穿戴的情况,系统将立即发出警报,并提示相关人员进行整改。工装识别算法工服穿戴检测系统对于电力作业场景,系统......
  • 算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升
    CodeGeeX在升级到第三代模型时,就引入了RAG检索增强生成的能力。即模型会根据检索到的相关背景知识生成回答,大幅减轻生成内容的幻觉性。在CodeGeeX插件中,是通过侧边栏对话框中输入“@repo”触发RAG技术。用户可以对开源代码仓库进行提问,更准确地获得指定开源代码库相关的内容......