缺少速率限制¶
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
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);
});