@eggjs/security 5.0.0-beta.19 → 5.0.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/agent.d.ts +5 -9
  2. package/dist/agent.js +10 -14
  3. package/dist/app/extend/agent.d.ts +4 -8
  4. package/dist/app/extend/agent.js +8 -12
  5. package/dist/app/extend/application.d.ts +7 -11
  6. package/dist/app/extend/application.js +32 -32
  7. package/dist/app/extend/context.d.ts +52 -55
  8. package/dist/app/extend/context.js +241 -188
  9. package/dist/app/extend/helper.d.ts +10 -22
  10. package/dist/app/extend/helper.js +5 -7
  11. package/dist/app/extend/response.d.ts +34 -38
  12. package/dist/app/extend/response.js +82 -69
  13. package/dist/app/middleware/securities.d.ts +4 -8
  14. package/dist/app/middleware/securities.js +52 -38
  15. package/dist/app.d.ts +5 -9
  16. package/dist/app.js +24 -22
  17. package/dist/config/config.default.d.ts +784 -787
  18. package/dist/config/config.default.js +356 -156
  19. package/dist/config/config.local.d.ts +2 -5
  20. package/dist/config/config.local.js +8 -5
  21. package/dist/index.d.ts +4 -1
  22. package/dist/index.js +2 -2
  23. package/dist/lib/extend/safe_curl.d.ts +9 -13
  24. package/dist/lib/extend/safe_curl.js +23 -17
  25. package/dist/lib/helper/cliFilter.d.ts +1 -4
  26. package/dist/lib/helper/cliFilter.js +15 -16
  27. package/dist/lib/helper/escape.d.ts +2 -2
  28. package/dist/lib/helper/escape.js +3 -7
  29. package/dist/lib/helper/escapeShellArg.d.ts +1 -4
  30. package/dist/lib/helper/escapeShellArg.js +4 -6
  31. package/dist/lib/helper/escapeShellCmd.d.ts +1 -4
  32. package/dist/lib/helper/escapeShellCmd.js +13 -14
  33. package/dist/lib/helper/index.d.ts +19 -22
  34. package/dist/lib/helper/index.js +15 -19
  35. package/dist/lib/helper/shtml.d.ts +2 -6
  36. package/dist/lib/helper/shtml.js +68 -52
  37. package/dist/lib/helper/sjs.d.ts +1 -4
  38. package/dist/lib/helper/sjs.js +44 -31
  39. package/dist/lib/helper/sjson.d.ts +1 -4
  40. package/dist/lib/helper/sjson.js +35 -28
  41. package/dist/lib/helper/spath.d.ts +5 -7
  42. package/dist/lib/helper/spath.js +24 -15
  43. package/dist/lib/helper/surl.d.ts +2 -6
  44. package/dist/lib/helper/surl.js +27 -22
  45. package/dist/lib/middlewares/csp.d.ts +3 -6
  46. package/dist/lib/middlewares/csp.js +54 -43
  47. package/dist/lib/middlewares/csrf.d.ts +3 -6
  48. package/dist/lib/middlewares/csrf.js +35 -31
  49. package/dist/lib/middlewares/dta.d.ts +2 -5
  50. package/dist/lib/middlewares/dta.js +10 -11
  51. package/dist/lib/middlewares/hsts.d.ts +3 -6
  52. package/dist/lib/middlewares/hsts.js +19 -17
  53. package/dist/lib/middlewares/index.d.ts +11 -16
  54. package/dist/lib/middlewares/index.js +22 -26
  55. package/dist/lib/middlewares/methodnoallow.d.ts +2 -5
  56. package/dist/lib/middlewares/methodnoallow.js +18 -13
  57. package/dist/lib/middlewares/noopen.d.ts +3 -6
  58. package/dist/lib/middlewares/noopen.js +13 -15
  59. package/dist/lib/middlewares/nosniff.d.ts +3 -6
  60. package/dist/lib/middlewares/nosniff.js +24 -23
  61. package/dist/lib/middlewares/referrerPolicy.d.ts +3 -6
  62. package/dist/lib/middlewares/referrerPolicy.js +31 -27
  63. package/dist/lib/middlewares/xframe.d.ts +3 -6
  64. package/dist/lib/middlewares/xframe.js +15 -16
  65. package/dist/lib/middlewares/xssProtection.d.ts +3 -6
  66. package/dist/lib/middlewares/xssProtection.js +12 -15
  67. package/dist/lib/utils.d.ts +12 -17
  68. package/dist/lib/utils.js +177 -112
  69. package/dist/types.d.ts +35 -37
  70. package/dist/types.js +2 -1
  71. package/package.json +6 -6
@@ -1,25 +1,30 @@
1
- //#region src/lib/helper/surl.ts
2
1
  const escapeMap = {
3
- "\"": """,
4
- "<": "&lt;",
5
- ">": "&gt;",
6
- "'": "&#x27;"
2
+ '"': '&quot;',
3
+ '<': '&lt;',
4
+ '>': '&gt;',
5
+ "'": '&#x27;',
7
6
  };
8
- function surl(val) {
9
- const protocolWhiteListSet = this.app.config.security.__protocolWhiteListSet;
10
- if (typeof val !== "string") return val;
11
- if (val[0] !== "/") {
12
- const arr = val.split("://", 2);
13
- const protocol = arr.length > 1 ? arr[0].toLowerCase() : "";
14
- if (protocol === "" || !protocolWhiteListSet.has(protocol)) {
15
- if (this.app.config.env === "local") this.ctx.coreLogger.warn("[@eggjs/security/surl] url: %j, protocol: %j, protocol is empty or not in white list, convert to empty string", val, protocol);
16
- return "";
17
- }
18
- }
19
- return val.replace(/["'<>]/g, (ch) => {
20
- return escapeMap[ch];
21
- });
7
+ export default function surl(val) {
8
+ // Just get the converted the protocolWhiteList in `Set` mode,
9
+ // Avoid conversions in `foreach`
10
+ const protocolWhiteListSet = this.app.config.security.__protocolWhiteListSet;
11
+ if (typeof val !== 'string') {
12
+ return val;
13
+ }
14
+ // only test on absolute path
15
+ if (val[0] !== '/') {
16
+ const arr = val.split('://', 2);
17
+ const protocol = arr.length > 1 ? arr[0].toLowerCase() : '';
18
+ if (protocol === '' || !protocolWhiteListSet.has(protocol)) {
19
+ if (this.app.config.env === 'local') {
20
+ this.ctx.coreLogger.warn('[@eggjs/security/surl] url: %j, protocol: %j, ' +
21
+ 'protocol is empty or not in white list, convert to empty string', val, protocol);
22
+ }
23
+ return '';
24
+ }
25
+ }
26
+ return val.replace(/["'<>]/g, ch => {
27
+ return escapeMap[ch];
28
+ });
22
29
  }
23
-
24
- //#endregion
25
- export { surl as default };
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VybC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaGVscGVyL3N1cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxTQUFTLEdBQTJCO0lBQ3hDLEdBQUcsRUFBRSxRQUFRO0lBQ2IsR0FBRyxFQUFFLE1BQU07SUFDWCxHQUFHLEVBQUUsTUFBTTtJQUNYLEdBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxPQUFPLFVBQVUsSUFBSSxDQUF5QixHQUFXO0lBQzlELDhEQUE4RDtJQUM5RCxpQ0FBaUM7SUFDakMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXVCLENBQUM7SUFFOUUsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCw2QkFBNkI7SUFDN0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVELElBQUksUUFBUSxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3RCLGdEQUFnRDtvQkFDOUMsaUVBQWlFLEVBQ25FLEdBQUcsRUFDSCxRQUFRLENBQ1QsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNqQyxPQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
@@ -1,7 +1,4 @@
1
- import { SecurityConfig } from "../../config/config.default.js";
2
- import { MiddlewareFunc } from "egg";
3
-
4
- //#region src/lib/middlewares/csp.d.ts
1
+ import type { MiddlewareFunc } from 'egg';
2
+ import type { SecurityConfig } from '../../config/config.default.ts';
5
3
  declare const _default: (options: SecurityConfig["csp"]) => MiddlewareFunc;
6
- //#endregion
7
- export { _default as default };
4
+ export default _default;
@@ -1,46 +1,57 @@
1
+ import extend from 'extend';
1
2
  import { checkIfIgnore } from "../utils.js";
2
- import extend from "extend";
3
-
4
- //#region src/lib/middlewares/csp.ts
5
- const HEADER = ["x-content-security-policy", "content-security-policy"];
6
- const REPORT_ONLY_HEADER = ["x-content-security-policy-report-only", "content-security-policy-report-only"];
3
+ const HEADER = ['x-content-security-policy', 'content-security-policy'];
4
+ const REPORT_ONLY_HEADER = ['x-content-security-policy-report-only', 'content-security-policy-report-only'];
5
+ // Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
7
6
  const MSIE_REGEXP = / MSIE /i;
8
- var csp_default = (options) => {
9
- return async function csp(ctx, next) {
10
- await next();
11
- const opts = {
12
- ...options,
13
- ...ctx.securityOptions.csp
14
- };
15
- if (checkIfIgnore(opts, ctx)) return;
16
- let finalHeader;
17
- const matchedOption = extend(true, {}, opts.policy);
18
- const bufArray = [];
19
- const headers = opts.reportOnly ? REPORT_ONLY_HEADER : HEADER;
20
- if (opts.supportIE && MSIE_REGEXP.test(ctx.get("user-agent"))) finalHeader = headers[0];
21
- else finalHeader = headers[1];
22
- for (const key in matchedOption) {
23
- const value = matchedOption[key];
24
- if (key === "sandbox" && value === true) bufArray.push(key);
25
- else {
26
- let values = Array.isArray(value) ? value : [value];
27
- if (key === "script-src") {
28
- if (!values.some(function(val) {
29
- return val.indexOf("nonce-") !== -1;
30
- })) values.push("'nonce-" + ctx.nonce + "'");
31
- }
32
- values = values.map(function(d) {
33
- if (d.startsWith(".")) d = "*" + d;
34
- return d;
35
- });
36
- bufArray.push(key + " " + values.join(" "));
37
- }
38
- }
39
- const headerString = bufArray.join(";");
40
- ctx.set(finalHeader, headerString);
41
- ctx.set("x-csp-nonce", ctx.nonce);
42
- };
7
+ export default (options) => {
8
+ return async function csp(ctx, next) {
9
+ await next();
10
+ const opts = {
11
+ ...options,
12
+ ...ctx.securityOptions.csp,
13
+ };
14
+ if (checkIfIgnore(opts, ctx))
15
+ return;
16
+ let finalHeader;
17
+ const matchedOption = extend(true, {}, opts.policy);
18
+ const bufArray = [];
19
+ const headers = opts.reportOnly ? REPORT_ONLY_HEADER : HEADER;
20
+ if (opts.supportIE && MSIE_REGEXP.test(ctx.get('user-agent'))) {
21
+ finalHeader = headers[0];
22
+ }
23
+ else {
24
+ finalHeader = headers[1];
25
+ }
26
+ for (const key in matchedOption) {
27
+ const value = matchedOption[key];
28
+ // Other arrays are splitted into strings EXCEPT `sandbox`
29
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/sandbox
30
+ if (key === 'sandbox' && value === true) {
31
+ bufArray.push(key);
32
+ }
33
+ else {
34
+ let values = (Array.isArray(value) ? value : [value]);
35
+ if (key === 'script-src') {
36
+ const hasNonce = values.some(function (val) {
37
+ return val.indexOf('nonce-') !== -1;
38
+ });
39
+ if (!hasNonce) {
40
+ values.push("'nonce-" + ctx.nonce + "'");
41
+ }
42
+ }
43
+ values = values.map(function (d) {
44
+ if (d.startsWith('.')) {
45
+ d = '*' + d;
46
+ }
47
+ return d;
48
+ });
49
+ bufArray.push(key + ' ' + values.join(' '));
50
+ }
51
+ }
52
+ const headerString = bufArray.join(';');
53
+ ctx.set(finalHeader, headerString);
54
+ ctx.set('x-csp-nonce', ctx.nonce);
55
+ };
43
56
  };
44
-
45
- //#endregion
46
- export { csp_default as default };
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9taWRkbGV3YXJlcy9jc3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHNUMsTUFBTSxNQUFNLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3hFLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyx1Q0FBdUMsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO0FBRTVHLHFEQUFxRDtBQUNyRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFFOUIsZUFBZSxDQUFDLE9BQThCLEVBQWtCLEVBQUU7SUFDaEUsT0FBTyxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ2pDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFYixNQUFNLElBQUksR0FBRztZQUNYLEdBQUcsT0FBTztZQUNWLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHO1NBQzNCLENBQUM7UUFDRixJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUVyQyxJQUFJLFdBQVcsQ0FBQztRQUNoQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRXBCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUQsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO2FBQU0sQ0FBQztZQUNOLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLDBEQUEwRDtZQUMxRCw0RkFBNEY7WUFDNUYsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQWEsQ0FBQztnQkFDbEUsSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFLENBQUM7b0JBQ3pCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHO3dCQUN4QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLENBQUMsQ0FBQyxDQUFDO29CQUVILElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUMzQyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO29CQUM3QixJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEIsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQztnQkFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuQyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -1,7 +1,4 @@
1
- import { SecurityConfig } from "../../config/config.default.js";
2
- import { MiddlewareFunc } from "egg";
3
-
4
- //#region src/lib/middlewares/csrf.d.ts
1
+ import type { MiddlewareFunc } from 'egg';
2
+ import type { SecurityConfig } from '../../config/config.default.ts';
5
3
  declare const _default: (options: SecurityConfig["csrf"]) => MiddlewareFunc;
6
- //#endregion
7
- export { _default as default };
4
+ export default _default;
@@ -1,33 +1,37 @@
1
+ import { debuglog } from 'node:util';
2
+ import typeis from 'type-is';
1
3
  import { checkIfIgnore } from "../utils.js";
2
- import { debuglog } from "node:util";
3
- import typeis from "type-is";
4
-
5
- //#region src/lib/middlewares/csrf.ts
6
- const debug = debuglog("egg/security/lib/middlewares/csrf");
7
- var csrf_default = (options) => {
8
- return function csrf(ctx, next) {
9
- if (checkIfIgnore(options, ctx)) return next();
10
- if ([
11
- "any",
12
- "all",
13
- "ctoken"
14
- ].includes(options.type)) ctx.ensureCsrfSecret();
15
- const method = ctx.method;
16
- let isSupported = false;
17
- for (const eachRule of options.supportedRequests) if (eachRule.path.test(ctx.path)) {
18
- if (eachRule.methods.includes(method)) {
19
- isSupported = true;
20
- break;
21
- }
22
- }
23
- if (!isSupported) return next();
24
- if (options.ignoreJSON && typeis.is(ctx.get("content-type"), "json")) return next();
25
- const body = ctx.request.body;
26
- debug("%s %s, got %j", ctx.method, ctx.url, body);
27
- ctx.assertCsrf();
28
- return next();
29
- };
4
+ const debug = debuglog('egg/security/lib/middlewares/csrf');
5
+ export default (options) => {
6
+ return function csrf(ctx, next) {
7
+ if (checkIfIgnore(options, ctx)) {
8
+ return next();
9
+ }
10
+ // ensure csrf token exists
11
+ if (['any', 'all', 'ctoken'].includes(options.type)) {
12
+ ctx.ensureCsrfSecret();
13
+ }
14
+ // supported requests
15
+ const method = ctx.method;
16
+ let isSupported = false;
17
+ for (const eachRule of options.supportedRequests) {
18
+ if (eachRule.path.test(ctx.path)) {
19
+ if (eachRule.methods.includes(method)) {
20
+ isSupported = true;
21
+ break;
22
+ }
23
+ }
24
+ }
25
+ if (!isSupported) {
26
+ return next();
27
+ }
28
+ if (options.ignoreJSON && typeis.is(ctx.get('content-type'), 'json')) {
29
+ return next();
30
+ }
31
+ const body = ctx.request.body;
32
+ debug('%s %s, got %j', ctx.method, ctx.url, body);
33
+ ctx.assertCsrf();
34
+ return next();
35
+ };
30
36
  };
31
-
32
- //#endregion
33
- export { csrf_default as default };
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NyZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMvY3NyZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3JDLE9BQU8sTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUU3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBRTVELGVBQWUsQ0FBQyxPQUErQixFQUFrQixFQUFFO0lBQ2pFLE9BQU8sU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDNUIsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLEtBQUssTUFBTSxRQUFRLElBQUksT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDakQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUN0QyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUNuQixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDOUIsS0FBSyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -1,6 +1,3 @@
1
- import { MiddlewareFunc } from "egg";
2
-
3
- //#region src/lib/middlewares/dta.d.ts
1
+ import type { MiddlewareFunc } from 'egg';
4
2
  declare const _default: () => MiddlewareFunc;
5
- //#endregion
6
- export { _default as default };
3
+ export default _default;
@@ -1,13 +1,12 @@
1
1
  import { isSafePath } from "../utils.js";
2
-
3
- //#region src/lib/middlewares/dta.ts
4
- var dta_default = () => {
5
- return function dta(ctx, next) {
6
- const path = ctx.path;
7
- if (!isSafePath(path, ctx)) ctx.throw(400);
8
- return next();
9
- };
2
+ // https://en.wikipedia.org/wiki/Directory_traversal_attack
3
+ export default () => {
4
+ return function dta(ctx, next) {
5
+ const path = ctx.path;
6
+ if (!isSafePath(path, ctx)) {
7
+ ctx.throw(400);
8
+ }
9
+ return next();
10
+ };
10
11
  };
11
-
12
- //#endregion
13
- export { dta_default as default };
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9taWRkbGV3YXJlcy9kdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV6QywyREFBMkQ7QUFDM0QsZUFBZSxHQUFtQixFQUFFO0lBQ2xDLE9BQU8sU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDM0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -1,7 +1,4 @@
1
- import { SecurityConfig } from "../../config/config.default.js";
2
- import { MiddlewareFunc } from "egg";
3
-
4
- //#region src/lib/middlewares/hsts.d.ts
1
+ import type { MiddlewareFunc } from 'egg';
2
+ import type { SecurityConfig } from '../../config/config.default.ts';
5
3
  declare const _default: (options: SecurityConfig["hsts"]) => MiddlewareFunc;
6
- //#endregion
7
- export { _default as default };
4
+ export default _default;
@@ -1,19 +1,21 @@
1
1
  import { checkIfIgnore } from "../utils.js";
2
-
3
- //#region src/lib/middlewares/hsts.ts
4
- var hsts_default = (options) => {
5
- return async function hsts(ctx, next) {
6
- await next();
7
- const opts = {
8
- ...options,
9
- ...ctx.securityOptions.hsts
10
- };
11
- if (checkIfIgnore(opts, ctx)) return;
12
- let val = `max-age=${opts.maxAge}`;
13
- if (opts.includeSubdomains) val = `${val}; includeSubdomains`;
14
- ctx.set("strict-transport-security", val);
15
- };
2
+ // Set Strict-Transport-Security header
3
+ export default (options) => {
4
+ return async function hsts(ctx, next) {
5
+ await next();
6
+ const opts = {
7
+ ...options,
8
+ ...ctx.securityOptions.hsts,
9
+ };
10
+ if (checkIfIgnore(opts, ctx))
11
+ return;
12
+ let val = `max-age=${opts.maxAge}`;
13
+ // If opts.includeSubdomains is defined,
14
+ // the rule is also valid for all the sub domains of the website
15
+ if (opts.includeSubdomains) {
16
+ val = `${val}; includeSubdomains`;
17
+ }
18
+ ctx.set('strict-transport-security', val);
19
+ };
16
20
  };
17
-
18
- //#endregion
19
- export { hsts_default as default };
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMvaHN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLHVDQUF1QztBQUN2QyxlQUFlLENBQUMsT0FBK0IsRUFBa0IsRUFBRTtJQUNqRSxPQUFPLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDbEMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUViLE1BQU0sSUFBSSxHQUFHO1lBQ1gsR0FBRyxPQUFPO1lBQ1YsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUk7U0FDNUIsQ0FBQztRQUNGLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXJDLElBQUksR0FBRyxHQUFHLFdBQVcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLHdDQUF3QztRQUN4QyxnRUFBZ0U7UUFDaEUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLHFCQUFxQixDQUFDO1FBQ3BDLENBQUM7UUFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
@@ -1,18 +1,13 @@
1
- import { SecurityConfig } from "../../config/config.default.js";
2
- import * as egg0 from "egg";
3
-
4
- //#region src/lib/middlewares/index.d.ts
5
1
  declare const _default: {
6
- csp: (options: SecurityConfig["csp"]) => egg0.MiddlewareFunc;
7
- csrf: (options: SecurityConfig["csrf"]) => egg0.MiddlewareFunc;
8
- dta: () => egg0.MiddlewareFunc;
9
- hsts: (options: SecurityConfig["hsts"]) => egg0.MiddlewareFunc;
10
- methodnoallow: () => egg0.MiddlewareFunc;
11
- noopen: (options: SecurityConfig["noopen"]) => egg0.MiddlewareFunc;
12
- nosniff: (options: SecurityConfig["nosniff"]) => egg0.MiddlewareFunc;
13
- referrerPolicy: (options: SecurityConfig["referrerPolicy"]) => egg0.MiddlewareFunc;
14
- xframe: (options: SecurityConfig["xframe"]) => egg0.MiddlewareFunc;
15
- xssProtection: (options: SecurityConfig["xssProtection"]) => egg0.MiddlewareFunc;
2
+ csp: (options: import("../../config/config.default.ts").SecurityConfig["csp"]) => import("egg").MiddlewareFunc;
3
+ csrf: (options: import("../../config/config.default.ts").SecurityConfig["csrf"]) => import("egg").MiddlewareFunc;
4
+ dta: () => import("egg").MiddlewareFunc;
5
+ hsts: (options: import("../../config/config.default.ts").SecurityConfig["hsts"]) => import("egg").MiddlewareFunc;
6
+ methodnoallow: () => import("egg").MiddlewareFunc;
7
+ noopen: (options: import("../../config/config.default.ts").SecurityConfig["noopen"]) => import("egg").MiddlewareFunc;
8
+ nosniff: (options: import("../../config/config.default.ts").SecurityConfig["nosniff"]) => import("egg").MiddlewareFunc;
9
+ referrerPolicy: (options: import("../../config/config.default.ts").SecurityConfig["referrerPolicy"]) => import("egg").MiddlewareFunc;
10
+ xframe: (options: import("../../config/config.default.ts").SecurityConfig["xframe"]) => import("egg").MiddlewareFunc;
11
+ xssProtection: (options: import("../../config/config.default.ts").SecurityConfig["xssProtection"]) => import("egg").MiddlewareFunc;
16
12
  };
17
- //#endregion
18
- export { _default as default };
13
+ export default _default;
@@ -1,27 +1,23 @@
1
- import csp_default from "./csp.js";
2
- import csrf_default from "./csrf.js";
3
- import dta_default from "./dta.js";
4
- import hsts_default from "./hsts.js";
5
- import methodnoallow_default from "./methodnoallow.js";
6
- import noopen_default from "./noopen.js";
7
- import nosniff_default from "./nosniff.js";
8
- import referrerPolicy_default from "./referrerPolicy.js";
9
- import xframe_default from "./xframe.js";
10
- import xssProtection_default from "./xssProtection.js";
11
-
12
- //#region src/lib/middlewares/index.ts
13
- var middlewares_default = {
14
- csp: csp_default,
15
- csrf: csrf_default,
16
- dta: dta_default,
17
- hsts: hsts_default,
18
- methodnoallow: methodnoallow_default,
19
- noopen: noopen_default,
20
- nosniff: nosniff_default,
21
- referrerPolicy: referrerPolicy_default,
22
- xframe: xframe_default,
23
- xssProtection: xssProtection_default
1
+ import csp from "./csp.js";
2
+ import csrf from "./csrf.js";
3
+ import dta from "./dta.js";
4
+ import hsts from "./hsts.js";
5
+ import methodnoallow from "./methodnoallow.js";
6
+ import noopen from "./noopen.js";
7
+ import nosniff from "./nosniff.js";
8
+ import referrerPolicy from "./referrerPolicy.js";
9
+ import xframe from "./xframe.js";
10
+ import xssProtection from "./xssProtection.js";
11
+ export default {
12
+ csp,
13
+ csrf,
14
+ dta,
15
+ hsts,
16
+ methodnoallow,
17
+ noopen,
18
+ nosniff,
19
+ referrerPolicy,
20
+ xframe,
21
+ xssProtection,
24
22
  };
25
-
26
- //#endregion
27
- export { middlewares_default as default };
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21pZGRsZXdhcmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUMzQixPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBQzNCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sY0FBYyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUUvQyxlQUFlO0lBQ2IsR0FBRztJQUNILElBQUk7SUFDSixHQUFHO0lBQ0gsSUFBSTtJQUNKLGFBQWE7SUFDYixNQUFNO0lBQ04sT0FBTztJQUNQLGNBQWM7SUFDZCxNQUFNO0lBQ04sYUFBYTtDQUNkLENBQUMifQ==
@@ -1,6 +1,3 @@
1
- import { MiddlewareFunc } from "egg";
2
-
3
- //#region src/lib/middlewares/methodnoallow.d.ts
1
+ import type { MiddlewareFunc } from 'egg';
4
2
  declare const _default: () => MiddlewareFunc;
5
- //#endregion
6
- export { _default as default };
3
+ export default _default;
@@ -1,15 +1,20 @@
1
- import { METHODS } from "node:http";
2
-
3
- //#region src/lib/middlewares/methodnoallow.ts
4
- const METHODS_NOT_ALLOWED = ["TRACE", "TRACK"];
1
+ import { METHODS } from 'node:http';
2
+ const METHODS_NOT_ALLOWED = ['TRACE', 'TRACK'];
5
3
  const safeHttpMethodsMap = {};
6
- for (const method of METHODS) if (!METHODS_NOT_ALLOWED.includes(method)) safeHttpMethodsMap[method.toUpperCase()] = true;
7
- var methodnoallow_default = () => {
8
- return function notAllow(ctx, next) {
9
- if (!safeHttpMethodsMap[ctx.method]) ctx.throw(405);
10
- return next();
11
- };
4
+ for (const method of METHODS) {
5
+ if (!METHODS_NOT_ALLOWED.includes(method)) {
6
+ safeHttpMethodsMap[method.toUpperCase()] = true;
7
+ }
8
+ }
9
+ // https://www.owasp.org/index.php/Cross_Site_Tracing
10
+ // http://jsperf.com/find-by-map-with-find-by-array
11
+ export default () => {
12
+ return function notAllow(ctx, next) {
13
+ // ctx.method is upper case
14
+ if (!safeHttpMethodsMap[ctx.method]) {
15
+ ctx.throw(405);
16
+ }
17
+ return next();
18
+ };
12
19
  };
13
-
14
- //#endregion
15
- export { methodnoallow_default as default };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kbm9hbGxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMvbWV0aG9kbm9hbGxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXBDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0MsTUFBTSxrQkFBa0IsR0FBNEIsRUFBRSxDQUFDO0FBRXZELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7SUFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNsRCxDQUFDO0FBQ0gsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxtREFBbUQ7QUFDbkQsZUFBZSxHQUFtQixFQUFFO0lBQ2xDLE9BQU8sU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDaEMsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
@@ -1,7 +1,4 @@
1
- import { SecurityConfig } from "../../config/config.default.js";
2
- import { MiddlewareFunc } from "egg";
3
-
4
- //#region src/lib/middlewares/noopen.d.ts
1
+ import type { MiddlewareFunc } from 'egg';
2
+ import type { SecurityConfig } from '../../config/config.default.ts';
5
3
  declare const _default: (options: SecurityConfig["noopen"]) => MiddlewareFunc;
6
- //#endregion
7
- export { _default as default };
4
+ export default _default;
@@ -1,17 +1,15 @@
1
1
  import { checkIfIgnore } from "../utils.js";
2
-
3
- //#region src/lib/middlewares/noopen.ts
4
- var noopen_default = (options) => {
5
- return async function noopen(ctx, next) {
6
- await next();
7
- const opts = {
8
- ...options,
9
- ...ctx.securityOptions.noopen
10
- };
11
- if (checkIfIgnore(opts, ctx)) return;
12
- ctx.set("x-download-options", "noopen");
13
- };
2
+ // @see http://blogs.msdn.com/b/ieinternals/archive/2009/06/30/internet-explorer-custom-http-headers.aspx
3
+ export default (options) => {
4
+ return async function noopen(ctx, next) {
5
+ await next();
6
+ const opts = {
7
+ ...options,
8
+ ...ctx.securityOptions.noopen,
9
+ };
10
+ if (checkIfIgnore(opts, ctx))
11
+ return;
12
+ ctx.set('x-download-options', 'noopen');
13
+ };
14
14
  };
15
-
16
- //#endregion
17
- export { noopen_default as default };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcGVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9taWRkbGV3YXJlcy9ub29wZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc1Qyx5R0FBeUc7QUFDekcsZUFBZSxDQUFDLE9BQWlDLEVBQWtCLEVBQUU7SUFDbkUsT0FBTyxLQUFLLFVBQVUsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJO1FBQ3BDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFYixNQUFNLElBQUksR0FBRztZQUNYLEdBQUcsT0FBTztZQUNWLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNO1NBQzlCLENBQUM7UUFDRixJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUVyQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
@@ -1,7 +1,4 @@
1
- import { SecurityConfig } from "../../config/config.default.js";
2
- import { MiddlewareFunc } from "egg";
3
-
4
- //#region src/lib/middlewares/nosniff.d.ts
1
+ import type { MiddlewareFunc } from 'egg';
2
+ import type { SecurityConfig } from '../../config/config.default.ts';
5
3
  declare const _default: (options: SecurityConfig["nosniff"]) => MiddlewareFunc;
6
- //#endregion
7
- export { _default as default };
4
+ export default _default;
@@ -1,27 +1,28 @@
1
1
  import { checkIfIgnore } from "../utils.js";
2
-
3
- //#region src/lib/middlewares/nosniff.ts
2
+ // status codes for redirects
3
+ // @see https://github.com/jshttp/statuses/blob/master/index.js#L33
4
4
  const RedirectStatus = {
5
- 300: true,
6
- 301: true,
7
- 302: true,
8
- 303: true,
9
- 305: true,
10
- 307: true,
11
- 308: true
5
+ 300: true,
6
+ 301: true,
7
+ 302: true,
8
+ 303: true,
9
+ 305: true,
10
+ 307: true,
11
+ 308: true,
12
12
  };
13
- var nosniff_default = (options) => {
14
- return async function nosniff(ctx, next) {
15
- await next();
16
- if (RedirectStatus[ctx.status]) return;
17
- const opts = {
18
- ...options,
19
- ...ctx.securityOptions.nosniff
20
- };
21
- if (checkIfIgnore(opts, ctx)) return;
22
- ctx.set("x-content-type-options", "nosniff");
23
- };
13
+ export default (options) => {
14
+ return async function nosniff(ctx, next) {
15
+ await next();
16
+ // ignore redirect response
17
+ if (RedirectStatus[ctx.status])
18
+ return;
19
+ const opts = {
20
+ ...options,
21
+ ...ctx.securityOptions.nosniff,
22
+ };
23
+ if (checkIfIgnore(opts, ctx))
24
+ return;
25
+ ctx.set('x-content-type-options', 'nosniff');
26
+ };
24
27
  };
25
-
26
- //#endregion
27
- export { nosniff_default as default };
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9zbmlmZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMvbm9zbmlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLDZCQUE2QjtBQUM3QixtRUFBbUU7QUFDbkUsTUFBTSxjQUFjLEdBQTRCO0lBQzlDLEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0NBQ1YsQ0FBQztBQUVGLGVBQWUsQ0FBQyxPQUFrQyxFQUFrQixFQUFFO0lBQ3BFLE9BQU8sS0FBSyxVQUFVLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUNyQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRWIsMkJBQTJCO1FBQzNCLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPO1FBRXZDLE1BQU0sSUFBSSxHQUFHO1lBQ1gsR0FBRyxPQUFPO1lBQ1YsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU87U0FDL0IsQ0FBQztRQUNGLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXJDLEdBQUcsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -1,7 +1,4 @@
1
- import { SecurityConfig } from "../../config/config.default.js";
2
- import { MiddlewareFunc } from "egg";
3
-
4
- //#region src/lib/middlewares/referrerPolicy.d.ts
1
+ import type { MiddlewareFunc } from 'egg';
2
+ import type { SecurityConfig } from '../../config/config.default.ts';
5
3
  declare const _default: (options: SecurityConfig["referrerPolicy"]) => MiddlewareFunc;
6
- //#endregion
7
- export { _default as default };
4
+ export default _default;