【发布时间】:2020-07-23 16:02:32
【问题描述】:
我制作了一个基本的游戏应用程序,在游戏结束时,游戏会发出一个 POST 请求并将用户名和分数发送到服务器。但这让我很容易受到游戏之外的 POST 请求的攻击,假设有人通过 Postman 发送它。
我可以有多种方法来解决这个问题吗?我是否需要开始学习会话/令牌,以便仅从浏览器窗口发出 POST 请求?
我是编码新手,我不完全确定我有哪些选择可以防御外部攻击。
【问题讨论】:
我制作了一个基本的游戏应用程序,在游戏结束时,游戏会发出一个 POST 请求并将用户名和分数发送到服务器。但这让我很容易受到游戏之外的 POST 请求的攻击,假设有人通过 Postman 发送它。
我可以有多种方法来解决这个问题吗?我是否需要开始学习会话/令牌,以便仅从浏览器窗口发出 POST 请求?
我是编码新手,我不完全确定我有哪些选择可以防御外部攻击。
【问题讨论】:
您可以考虑使用 CSRF 令牌。
通常使用这些令牌,以便必须从特定站点生成请求,而不能从另一个站点完成。
https://developer.mozilla.org/en-US/docs/Glossary/CSRF
What is a CSRF token ? What is its importance and how does it work?
【讨论】:
阻止过多帖子到您的服务器的最佳方法是安装 fail2ban 并将其配置为读取您的访问日志以禁止在 x 秒范围内发布超过 x 次的 ip(例如,禁止 ip 3 分钟内发帖超过 4 次)。
failban 的作用是读取您的日志,并根据过滤器中的正则表达式来禁止 ip。
不会发布如何安装它(周围有大量教程),但会在下面提供您需要的发布文件和配置:
后过滤器文件。在我的示例中,它被命名为 post-ban.conf 并放置在 filter.d 文件夹中:
[Definition]
failregex = ^<HOST> -.*"POST .*".*$
ignoreregex =
jail.local 配置(在 fail2ban 的根文件夹中)您可以将其添加到现有过滤器数组中
[post-ban]
enabled = true
port = http,https
filter = post-ban
logpath = %(nginx_access_log)s
maxretry = 4
findtime = 180
bantime = 60000
这里的配置设置为180秒内第4个帖子封禁ip 60000秒。如果您没有运行 nginx,则必须更改日志路径
【讨论】: