Skip to content

Commit bb146a1

Browse files
author
Max Schaefer
committed
JavaScript: Add support for rateLimit export from express-rate-limit package.
1 parent 28bedda commit bb146a1

File tree

4 files changed

+32
-1
lines changed

4 files changed

+32
-1
lines changed

javascript/ql/lib/semmle/javascript/security/dataflow/MissingRateLimiting.qll

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,14 @@ abstract class RateLimitingMiddleware extends DataFlow::SourceNode {
114114
* A rate limiter constructed using the `express-rate-limit` package.
115115
*/
116116
class ExpressRateLimit extends RateLimitingMiddleware {
117-
ExpressRateLimit() { this = API::moduleImport("express-rate-limit").getReturn().asSource() }
117+
ExpressRateLimit() {
118+
exists(API::Node rateLimitImport, API::Node rateLimit |
119+
rateLimitImport = API::moduleImport("express-rate-limit") and
120+
rateLimit in [rateLimitImport, rateLimitImport.getMember("rateLimit")]
121+
|
122+
this = rateLimit.getReturn().asSource()
123+
)
124+
}
118125
}
119126

120127
/**
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Added modeling for importing `express-rate-limit` using a named import.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import express from "express";
2+
import { rateLimit } from "express-rate-limit";
3+
4+
const app = express();
5+
6+
const limiter = rateLimit();
7+
app.use(limiter)
8+
9+
function expensiveHandler(req, res) { login(); }
10+
app.get('/:path', expensiveHandler); // OK
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import express from "express";
2+
import rateLimit from "express-rate-limit";
3+
4+
const app = express();
5+
6+
const limiter = rateLimit();
7+
app.use(limiter)
8+
9+
function expensiveHandler(req, res) { login(); }
10+
app.get('/:path', expensiveHandler); // OK

0 commit comments

Comments
 (0)