You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku部署的MERN应用遭同IP高频自动化请求攻击,如何拦截?

拦截Heroku上MERN应用的恶意自动化请求

1. 自定义Express中间件拦截异常请求

后端基于Express的话,写个前置中间件直接挡掉带非法内容的请求:

  • 拦截请求路径或参数里的.php这类不属于你应用的后缀
  • 拦截格式异常的key参数(比如示例里以if开头的内容)

示例代码:

// 放在所有路由注册之前执行
app.use((req, res, next) => {
  // 拦截含.php的请求路径或key参数
  if (req.path.includes('.php') || req.query.key?.includes('.php')) {
    return res.status(403).send('Forbidden');
  }
  // 拦截以if开头的异常key
  if (req.query.key?.startsWith('if')) {
    return res.status(403).send('Forbidden');
  }
  next();
});

2. 给请求加频率限制

用express-rate-limit包限制同一IP的请求次数,防止短时间内的批量攻击:

  1. 安装依赖:npm install express-rate-limit
  2. 配置并应用到所有路由:
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15分钟统计周期
  max: 100, // 每个IP最多允许100次请求
  message: '请求太频繁,请稍后再试'
});

// 关键:Heroku用转发IP,开启信任代理才能拿到真实客户端IP
app.set('trust proxy', true);
app.use(limiter);

3. 直接在Heroku后台拉黑恶意IP

如果所有恶意请求都来自同一个IP,直接在Heroku后台拉黑:

  • 进入对应应用的Heroku Dashboard,找到Settings -> Security
  • 在IP Blocklist里添加目标IP,彻底阻止该IP的所有请求

4. 严格校验接口参数合法性

针对受攻击的/get-spot-by-type-key接口,明确校验参数的合法性:

  • 限制type只能是你应用预设的合法值
  • 用正则校验key的格式(比如字符范围、长度)

示例代码:

app.get('/get-spot-by-type-key', (req, res) => {
  // 预设合法的type值
  const validTypes = ['business', 'residential'];
  if (!validTypes.includes(req.query.type)) {
    return res.status(400).send('无效的类型参数');
  }
  // 校验key的格式(示例:仅允许字母数字,长度12-20)
  const validKeyRegex = /^[a-zA-Z0-9]{12,20}$/;
  if (!validKeyRegex.test(req.query.key)) {
    return res.status(403).send('无效的密钥参数');
  }
  // 执行正常业务逻辑
});

内容的提问来源于stack exchange,提问作者Noa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:20:20