Skip to content

Commit d438059

Browse files
authored
Merge pull request #234 from JaredCE/update-default-owasp
Update default owasp
2 parents e545faa + 2329ac8 commit d438059

File tree

9 files changed

+459
-311
lines changed

9 files changed

+459
-311
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -928,7 +928,7 @@ The generator will interpret your settings for CORS and automatically add the re
928928

929929
You can make use of the [OWASP Secure Headers](https://owasp.org/www-project-secure-headers/#x-permitted-cross-domain-policies) to generate response headers. These are a selection of response headers with default values that OWASP recommends returning with your response to help secure your application.
930930

931-
The OWASP Secure Headers Project contains a set of recommended headers to return with recommended values, when generating the documentation, the generator will attempt to get the latest version of this document and apply the latest recommendations. If you do not allow outside connections, it will default to a version of recommendations from **2023-05-26 12:22:30 UTC**.
931+
The OWASP Secure Headers Project contains a set of recommended headers to return with recommended values, when generating the documentation, the generator will attempt to get the latest version of this document and apply the latest recommendations. If you do not allow outside connections, it will default to a version of recommendations from **2024-09-19 21:29:28 UTC**.
932932

933933
Like CORS, if you have already set any of the OWASP Secure headers via `responseHeaders`, it will not overwrite them.
934934

@@ -973,13 +973,14 @@ The full list of OWASP Secure Headers you can set are:
973973
- crossOriginOpenerPolicy - Cross-Origin-Opener-Policy,
974974
- crossOriginResourcePolicy - Cross-Origin-Resource-Policy,
975975
- permissionsPolicy - Permissions-Policy,
976-
- pragma - Pragma,
977976
- referrerPolicy - Referrer-Policy,
978977
- strictTransportSecurity - Strict-Transport-Security,
979978
- xContentTypeOptions - X-Content-Type-Options,
980979
- xFrameOptions - X-Frame-Options,
981980
- xPermittedCrossDomainPolicies - X-Permitted-Cross-Domain-Policies
982981

982+
You should note that `Pragma` has been [deprecated by owasp](https://owasp.org/www-project-secure-headers/#pragma), this plugin will issue a warning when you are still using Pragma and might drop support.
983+
983984
###### Subset of OWASP Secure Headers with user defined values
984985

985986
If you wish to override the OWASP Secure Headers, you can write your `methodResponse` like:

json/owasp.json

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,53 @@
11
{
2-
"last_update_utc": "2023-05-26 12:22:30",
3-
"headers": [
4-
{
5-
"name": "Cache-Control",
6-
"value": "no-store, max-age=0"
7-
},
8-
{
9-
"name": "Clear-Site-Data",
10-
"value": "\"cache\",\"cookies\",\"storage\""
11-
},
12-
{
13-
"name": "Content-Security-Policy",
14-
"value": "default-src 'self'; form-action 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content"
15-
},
16-
{
17-
"name": "Cross-Origin-Embedder-Policy",
18-
"value": "require-corp"
19-
},
20-
{
21-
"name": "Cross-Origin-Opener-Policy",
22-
"value": "same-origin"
23-
},
24-
{
25-
"name": "Cross-Origin-Resource-Policy",
26-
"value": "same-origin"
27-
},
28-
{
29-
"name": "Permissions-Policy",
30-
"value": "accelerometer=(),ambient-light-sensor=(),autoplay=(),battery=(),camera=(),display-capture=(),document-domain=(),encrypted-media=(),fullscreen=(),gamepad=(),geolocation=(),gyroscope=(),layout-animations=(self),legacy-image-formats=(self),magnetometer=(),microphone=(),midi=(),oversized-images=(self),payment=(),picture-in-picture=(),publickey-credentials-get=(),speaker-selection=(),sync-xhr=(self),unoptimized-images=(self),unsized-media=(self),usb=(),screen-wake-lock=(),web-share=(),xr-spatial-tracking=()"
31-
},
32-
{
33-
"name": "Pragma",
34-
"value": "no-cache"
35-
},
36-
{
37-
"name": "Referrer-Policy",
38-
"value": "no-referrer"
39-
},
40-
{
41-
"name": "Strict-Transport-Security",
42-
"value": "max-age=31536000 ; includeSubDomains"
43-
},
44-
{
45-
"name": "X-Content-Type-Options",
46-
"value": "nosniff"
47-
},
48-
{
49-
"name": "X-Frame-Options",
50-
"value": "deny"
51-
},
52-
{
53-
"name": "X-Permitted-Cross-Domain-Policies",
54-
"value": "none"
55-
}
56-
]
57-
}
2+
"last_update_utc": "2024-09-19 21:29:28",
3+
"headers": [
4+
{
5+
"name": "Cache-Control",
6+
"value": "no-store, max-age=0"
7+
},
8+
{
9+
"name": "Clear-Site-Data",
10+
"value": "\"cache\",\"cookies\",\"storage\""
11+
},
12+
{
13+
"name": "Content-Security-Policy",
14+
"value": "default-src 'self'; form-action 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content"
15+
},
16+
{
17+
"name": "Cross-Origin-Embedder-Policy",
18+
"value": "require-corp"
19+
},
20+
{
21+
"name": "Cross-Origin-Opener-Policy",
22+
"value": "same-origin"
23+
},
24+
{
25+
"name": "Cross-Origin-Resource-Policy",
26+
"value": "same-origin"
27+
},
28+
{
29+
"name": "Permissions-Policy",
30+
"value": "accelerometer=(), autoplay=(), camera=(), cross-origin-isolated=(), display-capture=(), encrypted-media=(), fullscreen=(), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(self), usb=(), web-share=(), xr-spatial-tracking=(), clipboard-read=(), clipboard-write=(), gamepad=(), hid=(), idle-detection=(), interest-cohort=(), serial=(), unload=()"
31+
},
32+
{
33+
"name": "Referrer-Policy",
34+
"value": "no-referrer"
35+
},
36+
{
37+
"name": "Strict-Transport-Security",
38+
"value": "max-age=31536000; includeSubDomains"
39+
},
40+
{
41+
"name": "X-Content-Type-Options",
42+
"value": "nosniff"
43+
},
44+
{
45+
"name": "X-Frame-Options",
46+
"value": "deny"
47+
},
48+
{
49+
"name": "X-Permitted-Cross-Domain-Policies",
50+
"value": "none"
51+
}
52+
]
53+
}

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "serverless-openapi-documenter",
3-
"version": "0.0.108",
3+
"version": "0.0.109",
44
"description": "Generate OpenAPI v3 documentation and Postman Collections from your Serverless Config",
55
"main": "index.js",
66
"keywords": [

src/definitionGenerator.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,12 @@ class DefinitionGenerator {
553553
throw err;
554554
});
555555
} else {
556+
if (Object.keys(response.owasp).includes("pragma")) {
557+
this.logger.warn(
558+
"Pragma has been deprecated by owasp (https://owasp.org/www-project-secure-headers/#pragma) and support for defaults will be dropped by this plugin."
559+
);
560+
}
561+
556562
owaspHeaders = await this.createResponseHeaders(
557563
oWASP.getHeaders(response.owasp)
558564
).catch((err) => {
@@ -603,7 +609,7 @@ class DefinitionGenerator {
603609
).catch((err) => {
604610
throw err;
605611
});
606-
} else if (this.currentEvent.cors) {
612+
} else if (this.currentEvent?.cors) {
607613
const newHeaders = {};
608614
for (const key of Object.keys(this.DEFAULT_CORS_HEADERS)) {
609615
if (

src/owasp.js

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,6 @@ class OWASP {
4747
description:
4848
"The HTTP Permissions-Policy header provides a mechanism to allow and deny the use of browser features in a document or within any [<iframe>](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) elements in the document. - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy)",
4949
},
50-
Pragma: {
51-
description:
52-
"The Pragma HTTP/1.0 general header is an implementation-specific header that may have various effects along the request-response chain. This header serves for backwards compatibility with the HTTP/1.0 caches that do not have a [Cache-Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) HTTP/1.1 header. - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Pragma)",
53-
deprecated: true,
54-
},
5550
"Referrer-Policy": {
5651
description:
5752
"The Referrer-Policy [HTTP header](https://developer.mozilla.org/en-US/docs/Glossary/HTTP_header) controls how much [referrer information](https://developer.mozilla.org/en-US/docs/Web/Security/Referer_header:_privacy_and_security_concerns) (sent with the [Referer](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer) header) should be included with requests. Aside from the HTTP header, you can [set this policy in HTML](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#integration_with_html). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy)",
@@ -153,13 +148,44 @@ class OWASP {
153148
getHeaders(headerList) {
154149
const obj = {};
155150
for (const headerName of Object.keys(headerList)) {
156-
const defaultHeader =
157-
this.DEFAULT_OWASP_HEADERS[this.headerMap[headerName]];
158-
Object.assign(obj, { [this.headerMap[headerName]]: defaultHeader });
151+
if (headerName === "pragma") {
152+
const pragma = {
153+
Pragma: {
154+
description:
155+
"The Pragma HTTP/1.0 general header is an implementation-specific header that may have various effects along the request-response chain. This header serves for backwards compatibility with the HTTP/1.0 caches that do not have a [Cache-Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) HTTP/1.1 header. - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Pragma)",
156+
deprecated: true,
157+
},
158+
};
159+
160+
if (typeof headerList["pragma"] !== "boolean") {
161+
Object.assign(pragma["Pragma"], {
162+
schema: {
163+
type: "string",
164+
default: headerList["pragma"].value,
165+
example: headerList["pragma"].value,
166+
},
167+
});
168+
} else {
169+
Object.assign(pragma["Pragma"], {
170+
schema: {
171+
default: "no-cache",
172+
type: "string",
173+
example: "no-cache",
174+
},
175+
});
176+
}
177+
178+
Object.assign(obj, pragma);
179+
} else {
180+
const defaultHeader =
181+
this.DEFAULT_OWASP_HEADERS[this.headerMap[headerName]];
182+
183+
Object.assign(obj, { [this.headerMap[headerName]]: defaultHeader });
159184

160-
if (typeof headerList[headerName] !== "boolean") {
161-
obj[this.headerMap[headerName]].schema.default =
162-
headerList[headerName].value;
185+
if (typeof headerList[headerName] !== "boolean") {
186+
obj[this.headerMap[headerName]].schema.default =
187+
headerList[headerName].value;
188+
}
163189
}
164190
}
165191

test/json/newOWASP.json

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,53 @@
11
{
2-
"last_update_utc": "2023-05-26 12:22:30",
3-
"headers": [
4-
{
5-
"name": "Cache-Control",
6-
"value": "no-store, max-age=0"
7-
},
8-
{
9-
"name": "Clear-Site-Data",
10-
"value": "\"cache\",\"cookies\",\"storage\""
11-
},
12-
{
13-
"name": "Content-Security-Policy",
14-
"value": "default-src 'self'; form-action 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content"
15-
},
16-
{
17-
"name": "Cross-Origin-Embedder-Policy",
18-
"value": "credentialless"
19-
},
20-
{
21-
"name": "Cross-Origin-Opener-Policy",
22-
"value": "same-origin"
23-
},
24-
{
25-
"name": "Cross-Origin-Resource-Policy",
26-
"value": "same-origin"
27-
},
28-
{
29-
"name": "Permissions-Policy",
30-
"value": "accelerometer=(),ambient-light-sensor=(),autoplay=(),battery=(),camera=(),display-capture=(),document-domain=(),encrypted-media=(),fullscreen=(),gamepad=(),geolocation=(),gyroscope=(),layout-animations=(self),legacy-image-formats=(self),magnetometer=(),microphone=(),midi=(),oversized-images=(self),payment=(),picture-in-picture=(),publickey-credentials-get=(),speaker-selection=(),sync-xhr=(self),unoptimized-images=(self),unsized-media=(self),usb=(),screen-wake-lock=(),web-share=(),xr-spatial-tracking=()"
31-
},
32-
{
33-
"name": "Pragma",
34-
"value": "no-cache"
35-
},
36-
{
37-
"name": "Referrer-Policy",
38-
"value": "no-referrer"
39-
},
40-
{
41-
"name": "Strict-Transport-Security",
42-
"value": "max-age=31536000 ; includeSubDomains"
43-
},
44-
{
45-
"name": "X-Content-Type-Options",
46-
"value": "nosniff"
47-
},
48-
{
49-
"name": "X-Frame-Options",
50-
"value": "deny"
51-
},
52-
{
53-
"name": "X-Permitted-Cross-Domain-Policies",
54-
"value": "none"
55-
}
56-
]
57-
}
2+
"last_update_utc": "2024-09-19 21:29:28",
3+
"headers": [
4+
{
5+
"name": "Cache-Control",
6+
"value": "no-store, max-age=0"
7+
},
8+
{
9+
"name": "Clear-Site-Data",
10+
"value": "\"cache\",\"cookies\",\"storage\""
11+
},
12+
{
13+
"name": "Content-Security-Policy",
14+
"value": "default-src 'self'; form-action 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content"
15+
},
16+
{
17+
"name": "Cross-Origin-Embedder-Policy",
18+
"value": "require-corp"
19+
},
20+
{
21+
"name": "Cross-Origin-Opener-Policy",
22+
"value": "same-origin"
23+
},
24+
{
25+
"name": "Cross-Origin-Resource-Policy",
26+
"value": "same-origin"
27+
},
28+
{
29+
"name": "Permissions-Policy",
30+
"value": "accelerometer=(), autoplay=(), camera=(), cross-origin-isolated=(), display-capture=(), encrypted-media=(), fullscreen=(), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(self), usb=(), web-share=(), xr-spatial-tracking=(), clipboard-read=(), clipboard-write=(), gamepad=(), hid=(), idle-detection=(), interest-cohort=(), serial=(), unload=()"
31+
},
32+
{
33+
"name": "Referrer-Policy",
34+
"value": "no-referrer"
35+
},
36+
{
37+
"name": "Strict-Transport-Security",
38+
"value": "max-age=31536000; includeSubDomains"
39+
},
40+
{
41+
"name": "X-Content-Type-Options",
42+
"value": "nosniff"
43+
},
44+
{
45+
"name": "X-Frame-Options",
46+
"value": "deny"
47+
},
48+
{
49+
"name": "X-Permitted-Cross-Domain-Policies",
50+
"value": "none"
51+
}
52+
]
53+
}

0 commit comments

Comments
 (0)