网络安全:阻止用户连续发送验证码 #260
Replies: 9 comments
-
记录:为了防止用户连续发送验证码,需要将用户的上一次请求发送验证码的时间存储在一个字典(或者其它可以存储键值对的数据结构)里,这个字典应当是一个全局变量,防止在一次请求之后消失 |
Beta Was this translation helpful? Give feedback.
-
定义全局变量的话据我所知现有的代码里面有类似的做法(可能不是现有,是很久之前,现在没了)。在一个文件里面定义了,其他地方要用就 import 一下就行。当然也别真的局限于 全局变量 了,例如你可以进一步地定义一个类啊,或者是几个方法来操作这个全局变量啊(包括添加 key/value 的逻辑、字典里 key/value 过期的逻辑之类),然后在其他地方 import 之后去调用这个方法,思想类似的。 至于你说的要中间件,你指 Redis 是吧(或者是 Python 有什么缓存库)?这个也是可以的,也是业界大型项目的常见做法。但是我们这个毕竟是个小东西,杀鸡用牛刀了。当然,你也可以说这是为了把这个项目做得有 前瞻性 。 至于全局变量还是中间件,这两者你二选一就可以,完全看你想实现哪个,都没问题。你想当下完成这个功能,还是说想做的很有前瞻性,同时也考虑一下你自己的学习成本和需要付出的精力。 |
Beta Was this translation helpful? Give feedback.
-
有一个问题,似乎在调用发送验证码这个模块并没有区分应用场景,导致无法记录不同应用场景下的发送验证码的时间 |
Beta Was this translation helpful? Give feedback.
-
那就暂时只做不区分应用场景下的发送验证码 |
Beta Was this translation helpful? Give feedback.
-
比如?举例描述一下,区分什么场景,记录什么,记录的目的是什么 你想做什么写代码的时候把这个逻辑实现一下就行了 |
Beta Was this translation helpful? Give feedback.
-
比如说我在忘记密码的时候需要用到验证码,在新建用户的时候也需要用到验证码。如果是同一个场景的话,用户可能在新建用户之后进行忘记密码操作,如果时间没有超过30秒,可能会出现系统组织验证码的申请,但是实际上我的想法是系统不应该阻止这样的申请 |
Beta Was this translation helpful? Give feedback.
-
系统应该阻止的是在30秒内进行两次的忘记密码请求发送验证码的操作 |
Beta Was this translation helpful? Give feedback.
-
这个代码上不难实现,给每个记录做一下区分。既然你都实现了验证码限流了,再加这个功能我觉得代码都不用改几行。 具体要不要做看你,也有不少网站不做区分。 |
Beta Was this translation helpful? Give feedback.
-
简单起见别区分了 很多接口需要调整 |
Beta Was this translation helpful? Give feedback.
-
需要在同一功能页面下防止用户连续发送验证码,但是不同功能页面下不受影响
推荐网站测试鸭:https://ce.mianshiya.com/
Beta Was this translation helpful? Give feedback.
All reactions