Skip to content

Commit abef848

Browse files
authored
Merge pull request github#14600 from github/max-schaefer/express-rate-limit
JavaScript: Add support for importing `express-rate-limit` using a named import.
2 parents dbb4167 + aff848b commit abef848

File tree

7 files changed

+39
-1
lines changed

7 files changed

+39
-1
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,13 @@ 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+
this =
119+
[
120+
API::moduleImport("express-rate-limit"),
121+
API::moduleImport("express-rate-limit").getMember("rateLimit")
122+
].getReturn().asSource()
123+
}
118124
}
119125

120126
/**
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: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
| MissingRateLimiting.js:4:19:8:1 | functio ... ath);\\n} | This route handler performs $@, but is not rate-limited. | MissingRateLimiting.js:7:5:7:22 | res.sendFile(path) | a file system access |
22
| MissingRateLimiting.js:25:19:25:20 | f1 | This route handler performs $@, but is not rate-limited. | MissingRateLimiting.js:13:5:13:22 | res.sendFile(path) | a file system access |
33
| MissingRateLimiting.js:25:27:25:28 | f3 | This route handler performs $@, but is not rate-limited. | MissingRateLimiting.js:22:5:22:22 | res.sendFile(path) | a file system access |
4+
| tst.js:22:24:22:40 | expensiveHandler1 | This route handler performs $@, but is not rate-limited. | tst.js:14:40:14:46 | login() | authorization |
5+
| tst.js:35:20:35:36 | expensiveHandler1 | This route handler performs $@, but is not rate-limited. | tst.js:14:40:14:46 | login() | authorization |
6+
| tst.js:36:20:36:36 | expensiveHandler2 | This route handler performs $@, but is not rate-limited. | tst.js:15:40:15:73 | fs.writ ... quest") | a file system access |
7+
| tst.js:37:20:37:36 | expensiveHandler3 | This route handler performs $@, but is not rate-limited. | tst.js:16:40:16:70 | child_p ... /true") | a system command |
8+
| tst.js:38:20:38:36 | expensiveHandler4 | This route handler performs $@, but is not rate-limited. | tst.js:17:40:17:83 | connect ... ution') | a database access |
9+
| tst.js:64:25:64:63 | functio ... req); } | This route handler performs $@, but is not rate-limited. | tst.js:64:46:64:60 | verifyUser(req) | authorization |
10+
| tst.js:76:25:76:53 | catchAs ... ndler1) | This route handler performs $@, but is not rate-limited. | tst.js:14:40:14:46 | login() | authorization |
11+
| tst.js:88:24:88:40 | expensiveHandler1 | This route handler performs $@, but is not rate-limited. | tst.js:14:40:14:46 | login() | authorization |
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)