如何在 Express.js 服务器上过滤机器人

How to filter bots on Express.js server

我创建了一个 express node.js API,并将其部署到 AWS(带有 2 个 EC2 实例的 Elasticbeanstalk)。 我正在使用 morgan-body 包在我的端点上记录请求和响应,但似乎有大量机器人正在“攻击”我的 API,这导致每个月产生数百万条日志,这让我付出了代价与datadog的财富。 我已经使用 morgan-boday 的内置“跳过”功能来过滤基于用户代理的请求,但新的请求似乎每天都会出现。 有没有一种方法可以跳过对各种机器人的日志记录,而不用一一检查它们? 这是我的代码,非常感谢您的帮助! :)

morganBody(app, {
skip: (req, res) => {
    if(req.get('user-agent')){
        if (req.get('user-agent').startsWith('ELB-HealthChecker') ||
        req.get('user-agent').startsWith('Mozilla') ||
        req.get('user-agent').startsWith('Mozlila')||
        req.get('user-agent').startsWith('Python')||
        req.get('user-agent').startsWith('python')||
        req.get('user-agent').startsWith('l9explore')||
        req.get('user-agent').startsWith('Go-http-client')
        
        ) {
            return true
        }
    }
    return false},
    logRequestBody:false,
    logResponseBody: false
});``` 

我通过简单地跳过所有 GET 请求找到了部分答案:

if (req.method === "GET") {
    return true
}

但我仍然收到一些 POST 机器人请求,这些请求增加了我的日志量,但我仍然不知道如何过滤它们... 如果您有答案,谢谢!

欢迎使用互联网。 Bot/Spam 检测是需要解决的最琐碎的问题之一。您添加的每个逻辑都可以在客户端被反向逻辑否定。

A​​WS 本身就有一个工具。 https://aws.amazon.com/waf/features/bot-control/

过滤流量的好策略将基于用例。

一些建议。

  1. 引入 login/session 只允许经过身份验证 session
  2. 请求headers过滤
  3. IP 范围过滤器
  4. 单个 i.p.
  5. 的流量
  6. 来自不同IP等的请求率
  7. 不需要时使服务离线。

互联网上应该有更多material。