Skip to content

Commit 561c8d0

Browse files
authored
Merge pull request github#6033 from erik-krogh/serverlessLib
Approved by asgerf
2 parents 95b591d + 7f09edc commit 561c8d0

File tree

7 files changed

+70
-2
lines changed

7 files changed

+70
-2
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lgtm,codescanning
2+
* Events from the [`serverless`](https://npmjs.com/package/serverless) package are recognized a source of remote user input.
3+
Affected packages are
4+
[serverless](https://npmjs.com/package/serverless)

javascript/ql/src/semmle/javascript/frameworks/ServerLess.qll

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/**
22
* Provides classes and predicates for working with serverless handlers.
3-
* E.g. AWS: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html
3+
* E.g. [AWS](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html) or [serverless](https://npmjs.com/package/serverless)
44
*/
55

66
import javascript
77

88
/**
99
* Provides classes and predicates for working with serverless handlers.
10-
* In particular a `RemoteFlowSource` is added for AWS and Alibaba serverless.
10+
* In particular a `RemoteFlowSource` is added for AWS, Alibaba, and serverless.
1111
*/
1212
private module ServerLess {
1313
/**
@@ -24,6 +24,14 @@ private module ServerLess {
2424
then codeURI = properties.lookup("CodeUri").(YAMLScalar).getValue()
2525
else codeURI = ""
2626
)
27+
or
28+
// The `serverless` library, which specifies a top-level `functions` property
29+
exists(YAMLMapping functions |
30+
functions = resource.lookup("functions") and
31+
not exists(resource.getParentNode()) and
32+
handler = functions.getValue(_).(YAMLMapping).lookup("handler").(YAMLScalar).getValue() and
33+
codeURI = ""
34+
)
2735
)
2836
}
2937

javascript/ql/test/library-tests/frameworks/ServerLess/test.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@
33
| tst3/function/index.js:1:36:1:40 | event |
44
| tst4/app.js:1:36:1:40 | event |
55
| tst5/app.js:1:36:1:40 | event |
6+
| tst6/handler.js:6:23:6:36 | req.query.name |
7+
| tst7/handler.js:1:34:1:38 | event |
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const serverless = require("serverless-http");
2+
const express = require("express");
3+
const app = express();
4+
5+
app.get("/", (req, res, next) => {
6+
res.send("Hello " + req.query.name);
7+
});
8+
9+
module.exports.handler = serverless(app);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
service: aws-node-express-api
2+
3+
frameworkVersion: '2'
4+
5+
provider:
6+
name: aws
7+
runtime: nodejs12.x
8+
lambdaHashingVersion: '20201221'
9+
10+
functions:
11+
api:
12+
handler: handler.handler
13+
events:
14+
- http:
15+
path: /
16+
method: ANY
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export async function myFunction(event, context, callback) {
2+
const body = JSON.parse(event.body);
3+
// do something
4+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
service: serverless-myChecker
3+
4+
plugins:
5+
- serverless-webpack
6+
- serverless-offline
7+
8+
custom:
9+
webpack:
10+
webpackConfig: ./webpack.config.js
11+
includeModules: true
12+
13+
provider:
14+
name: aws
15+
runtime: nodejs12.x
16+
profile: personal
17+
region: eu-west-1
18+
19+
functions:
20+
myChecker:
21+
handler: handler.myFunction
22+
events:
23+
- http:
24+
path: webhook
25+
method: post

0 commit comments

Comments
 (0)