CodeQL 文档

缺少速率限制

ID: js/missing-rate-limiting
Kind: problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
   - security
   - external/cwe/cwe-770
   - external/cwe/cwe-307
   - external/cwe/cwe-400
Query suites:
   - javascript-code-scanning.qls
   - javascript-security-extended.qls
   - javascript-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

HTTP 请求处理程序不应执行代价高昂的操作,例如访问文件系统、执行操作系统命令或与数据库交互,而不对接受请求的速率进行限制。否则,应用程序将容易受到拒绝服务攻击,攻击者可以通过同时发出大量请求来使应用程序崩溃或无响应。

建议

应使用速率限制中间件来防止此类攻击。

示例

以下示例显示了一个无需速率限制即可提供静态文件的 Express 应用程序

var express = require('express');
var app = express();

app.get('/:path', function(req, res) {
  let path = req.params.path;
  if (isValidPath(path))
    res.sendFile(path);
});

为了防止拒绝服务攻击,可以使用 express-rate-limit

var express = require('express');
var app = express();

// set up rate limiter: maximum of five requests per minute
var RateLimit = require('express-rate-limit');
var limiter = RateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100, // max 100 requests per windowMs
});

// apply rate limiter to all requests
app.use(limiter);

app.get('/:path', function(req, res) {
  let path = req.params.path;
  if (isValidPath(path))
    res.sendFile(path);
});

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私