gpt4 book ai didi

python - 限制来自任何给定 IP 地址的请求数量

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:36 25 4
gpt4 key购买 nike

我正在从事 Google App Engine 项目 (python/webapp2),我有点担心有人滥用/向我创建的服务发送大量请求的垃圾邮件。为了克服这种可能性,我的想法是限制应用程序某些部分在任何给定时间内每个 IP 地址允许的请求数。我目前的计划如下:

对于每个请求,我将:

  1. 从header中获取ip地址
  2. 将此 ip 地址与时间戳一起存储在 dataStore 中
  3. 删除超过一个小时的所有 IP 地址实体
  4. 计算具有该 IP 地址的数据存储实体的数量
  5. 如果超过给定的限制则不允许访问

我的问题是:
这是最好的方法吗?我只是这里的初学者,我想这样做会有相当多的开销,而且这可能是一项可能有更好解决方案的常见任务。有没有资源密集度较低的更好方法来做到这一点?

最佳答案

在过去,我用 memcache 做到了这一点,它要快得多,特别是因为你只真正关心近似限制(近似是因为 memcache 可以被系统刷新,可能不会被所有实例共享,等等。 ).您甚至可以使用它为您使 key 过期。像这样的东西(假设 self 是一个 webapp2 请求处理程序,并且您已经导入了 GAE 的内存缓存库):

memcache_key = 'request-count-' + self.request.remote_addr

count = memcache.get(memcache_key)

if count is not None and count > MAX_REQUESTS:
logging.warning("Remote user has %d requests; rejecting." % (count))
self.error(429)
return

count = memcache.incr(memcache_key)
if count is None:
# key didn't exist yet
memcache.add(memcache_key, 1, time=WINDOW_IN_SECONDS)

这将创建一个 key ,该 key 在 WINDOW_IN_SECONDS 时间内大约 MAX_REQUESTS 次后拒绝用户,并在每个 WINDOW_IN_SECONDS 时将计数重新归零。 (即它不是滑动窗口;它在每个时间段重置为零。)

关于python - 限制来自任何给定 IP 地址的请求数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14370717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com