@eggjs/security 5.0.0-beta.35 → 5.0.0-beta.36

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 +9 -5
  2. package/dist/agent.js +14 -10
  3. package/dist/app/extend/agent.d.ts +8 -4
  4. package/dist/app/extend/agent.js +12 -8
  5. package/dist/app/extend/application.d.ts +11 -7
  6. package/dist/app/extend/application.js +32 -32
  7. package/dist/app/extend/context.d.ts +55 -51
  8. package/dist/app/extend/context.js +185 -240
  9. package/dist/app/extend/helper.d.ts +5 -2
  10. package/dist/app/extend/helper.js +8 -6
  11. package/dist/app/extend/response.d.ts +38 -34
  12. package/dist/app/extend/response.js +69 -82
  13. package/dist/app/middleware/securities.d.ts +5 -2
  14. package/dist/app/middleware/securities.js +38 -52
  15. package/dist/app.d.ts +9 -5
  16. package/dist/app.js +23 -25
  17. package/dist/config/config.default.d.ts +34 -45
  18. package/dist/config/config.default.js +158 -362
  19. package/dist/config/config.local.d.ts +6 -3
  20. package/dist/config/config.local.js +6 -8
  21. package/dist/index.d.ts +20 -16
  22. package/dist/index.js +24 -21
  23. package/dist/lib/extend/safe_curl.d.ts +16 -13
  24. package/dist/lib/extend/safe_curl.js +17 -23
  25. package/dist/lib/helper/cliFilter.d.ts +4 -4
  26. package/dist/lib/helper/cliFilter.js +16 -15
  27. package/dist/lib/helper/escape.d.ts +2 -2
  28. package/dist/lib/helper/escape.js +7 -3
  29. package/dist/lib/helper/escapeShellArg.d.ts +4 -1
  30. package/dist/lib/helper/escapeShellArg.js +6 -4
  31. package/dist/lib/helper/escapeShellCmd.d.ts +4 -1
  32. package/dist/lib/helper/escapeShellCmd.js +14 -13
  33. package/dist/lib/helper/index.d.ts +22 -19
  34. package/dist/lib/helper/index.js +19 -15
  35. package/dist/lib/helper/shtml.d.ts +6 -2
  36. package/dist/lib/helper/shtml.js +52 -68
  37. package/dist/lib/helper/sjs.d.ts +4 -4
  38. package/dist/lib/helper/sjs.js +31 -44
  39. package/dist/lib/helper/sjson.d.ts +4 -1
  40. package/dist/lib/helper/sjson.js +28 -35
  41. package/dist/lib/helper/spath.d.ts +7 -5
  42. package/dist/lib/helper/spath.js +15 -24
  43. package/dist/lib/helper/surl.d.ts +6 -2
  44. package/dist/lib/helper/surl.js +22 -27
  45. package/dist/lib/middlewares/csp.d.ts +6 -3
  46. package/dist/lib/middlewares/csp.js +43 -54
  47. package/dist/lib/middlewares/csrf.d.ts +6 -3
  48. package/dist/lib/middlewares/csrf.js +31 -35
  49. package/dist/lib/middlewares/dta.d.ts +5 -2
  50. package/dist/lib/middlewares/dta.js +11 -10
  51. package/dist/lib/middlewares/hsts.d.ts +6 -3
  52. package/dist/lib/middlewares/hsts.js +17 -19
  53. package/dist/lib/middlewares/index.d.ts +24 -21
  54. package/dist/lib/middlewares/index.js +26 -22
  55. package/dist/lib/middlewares/methodnoallow.d.ts +5 -2
  56. package/dist/lib/middlewares/methodnoallow.js +13 -18
  57. package/dist/lib/middlewares/noopen.d.ts +6 -3
  58. package/dist/lib/middlewares/noopen.js +14 -13
  59. package/dist/lib/middlewares/nosniff.d.ts +6 -3
  60. package/dist/lib/middlewares/nosniff.js +22 -24
  61. package/dist/lib/middlewares/referrerPolicy.d.ts +6 -3
  62. package/dist/lib/middlewares/referrerPolicy.js +27 -30
  63. package/dist/lib/middlewares/xframe.d.ts +6 -3
  64. package/dist/lib/middlewares/xframe.js +16 -15
  65. package/dist/lib/middlewares/xssProtection.d.ts +6 -3
  66. package/dist/lib/middlewares/xssProtection.js +15 -12
  67. package/dist/lib/utils.d.ts +22 -17
  68. package/dist/lib/utils.js +112 -177
  69. package/dist/types.d.ts +38 -36
  70. package/dist/types.js +1 -2
  71. package/package.json +31 -37
@@ -1,28 +1,26 @@
1
1
  import { checkIfIgnore } from "../utils.js";
2
- // status codes for redirects
3
- // @see https://github.com/jshttp/statuses/blob/master/index.js#L33
2
+
3
+ //#region src/lib/middlewares/nosniff.ts
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
- 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
- };
13
+ var nosniff_default = (options) => {
14
+ return async function nosniff(ctx, next) {
15
+ await next();
16
+ if (RedirectStatus[ctx.status]) return;
17
+ if (checkIfIgnore({
18
+ ...options,
19
+ ...ctx.securityOptions.nosniff
20
+ }, ctx)) return;
21
+ ctx.set("x-content-type-options", "nosniff");
22
+ };
27
23
  };
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9zbmlmZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMvbm9zbmlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLDZCQUE2QjtBQUM3QixtRUFBbUU7QUFDbkUsTUFBTSxjQUFjLEdBQTRCO0lBQzlDLEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0NBQ1YsQ0FBQztBQUVGLGVBQWUsQ0FBQyxPQUFrQyxFQUFrQixFQUFFO0lBQ3BFLE9BQU8sS0FBSyxVQUFVLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUNyQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRWIsMkJBQTJCO1FBQzNCLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPO1FBRXZDLE1BQU0sSUFBSSxHQUFHO1lBQ1gsR0FBRyxPQUFPO1lBQ1YsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU87U0FDL0IsQ0FBQztRQUNGLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXJDLEdBQUcsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
24
+
25
+ //#endregion
26
+ export { nosniff_default as default };
@@ -1,4 +1,7 @@
1
- import type { MiddlewareFunc } from 'egg';
2
- import type { SecurityConfig } from '../../config/config.default.ts';
1
+ import { SecurityConfig } from "../../config/config.default.js";
2
+ import { MiddlewareFunc } from "egg";
3
+
4
+ //#region src/lib/middlewares/referrerPolicy.d.ts
3
5
  declare const _default: (options: SecurityConfig["referrerPolicy"]) => MiddlewareFunc;
4
- export default _default;
6
+ //#endregion
7
+ export { _default as default };
@@ -1,34 +1,31 @@
1
1
  import { checkIfIgnore } from "../utils.js";
2
- // https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy
2
+
3
+ //#region src/lib/middlewares/referrerPolicy.ts
3
4
  const ALLOWED_POLICIES_ENUM = [
4
- 'no-referrer',
5
- 'no-referrer-when-downgrade',
6
- 'origin',
7
- 'origin-when-cross-origin',
8
- 'same-origin',
9
- 'strict-origin',
10
- 'strict-origin-when-cross-origin',
11
- 'unsafe-url',
12
- '',
5
+ "no-referrer",
6
+ "no-referrer-when-downgrade",
7
+ "origin",
8
+ "origin-when-cross-origin",
9
+ "same-origin",
10
+ "strict-origin",
11
+ "strict-origin-when-cross-origin",
12
+ "unsafe-url",
13
+ ""
13
14
  ];
14
- export default (options) => {
15
- return async function referrerPolicy(ctx, next) {
16
- await next();
17
- const opts = {
18
- ...options,
19
- // check refererPolicy for backward compatibility
20
- // typo on the old version
21
- // @see https://github.com/eggjs/security/blob/e3408408adec5f8d009d37f75126ed082481d0ac/lib/middlewares/referrerPolicy.js#L21C59-L21C72
22
- ...ctx.securityOptions.refererPolicy,
23
- ...ctx.securityOptions.referrerPolicy,
24
- };
25
- if (checkIfIgnore(opts, ctx))
26
- return;
27
- const policy = opts.value;
28
- if (!ALLOWED_POLICIES_ENUM.includes(policy)) {
29
- throw new Error(`"${policy}" is not available.`);
30
- }
31
- ctx.set('referrer-policy', policy);
32
- };
15
+ var referrerPolicy_default = (options) => {
16
+ return async function referrerPolicy(ctx, next) {
17
+ await next();
18
+ const opts = {
19
+ ...options,
20
+ ...ctx.securityOptions.refererPolicy,
21
+ ...ctx.securityOptions.referrerPolicy
22
+ };
23
+ if (checkIfIgnore(opts, ctx)) return;
24
+ const policy = opts.value;
25
+ if (!ALLOWED_POLICIES_ENUM.includes(policy)) throw new Error(`"${policy}" is not available.`);
26
+ ctx.set("referrer-policy", policy);
27
+ };
33
28
  };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJyZXJQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21pZGRsZXdhcmVzL3JlZmVycmVyUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsNEVBQTRFO0FBQzVFLE1BQU0scUJBQXFCLEdBQUc7SUFDNUIsYUFBYTtJQUNiLDRCQUE0QjtJQUM1QixRQUFRO0lBQ1IsMEJBQTBCO0lBQzFCLGFBQWE7SUFDYixlQUFlO0lBQ2YsaUNBQWlDO0lBQ2pDLFlBQVk7SUFDWixFQUFFO0NBQ0gsQ0FBQztBQUVGLGVBQWUsQ0FBQyxPQUF5QyxFQUFrQixFQUFFO0lBQzNFLE9BQU8sS0FBSyxVQUFVLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUM1QyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRWIsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLE9BQU87WUFDVixpREFBaUQ7WUFDakQsMEJBQTBCO1lBQzFCLHVJQUF1STtZQUN2SSxHQUFJLEdBQUcsQ0FBQyxlQUF1QixDQUFDLGFBQWE7WUFDN0MsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLGNBQWM7U0FDdEMsQ0FBQztRQUNGLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXJDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxNQUFNLHFCQUFxQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
29
+
30
+ //#endregion
31
+ export { referrerPolicy_default as default };
@@ -1,4 +1,7 @@
1
- import type { MiddlewareFunc } from 'egg';
2
- import type { SecurityConfig } from '../../config/config.default.ts';
1
+ import { SecurityConfig } from "../../config/config.default.js";
2
+ import { MiddlewareFunc } from "egg";
3
+
4
+ //#region src/lib/middlewares/xframe.d.ts
3
5
  declare const _default: (options: SecurityConfig["xframe"]) => MiddlewareFunc;
4
- export default _default;
6
+ //#endregion
7
+ export { _default as default };
@@ -1,17 +1,18 @@
1
1
  import { checkIfIgnore } from "../utils.js";
2
- export default (options) => {
3
- return async function xframe(ctx, next) {
4
- await next();
5
- const opts = {
6
- ...options,
7
- ...ctx.securityOptions.xframe,
8
- };
9
- if (checkIfIgnore(opts, ctx))
10
- return;
11
- // DENY, SAMEORIGIN, ALLOW-FROM
12
- // https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options?redirectlocale=en-US&redirectslug=The_X-FRAME-OPTIONS_response_header
13
- const value = opts.value || 'SAMEORIGIN';
14
- ctx.set('x-frame-options', value);
15
- };
2
+
3
+ //#region src/lib/middlewares/xframe.ts
4
+ var xframe_default = (options) => {
5
+ return async function xframe(ctx, next) {
6
+ await next();
7
+ const opts = {
8
+ ...options,
9
+ ...ctx.securityOptions.xframe
10
+ };
11
+ if (checkIfIgnore(opts, ctx)) return;
12
+ const value = opts.value || "SAMEORIGIN";
13
+ ctx.set("x-frame-options", value);
14
+ };
16
15
  };
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGZyYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9taWRkbGV3YXJlcy94ZnJhbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1QyxlQUFlLENBQUMsT0FBaUMsRUFBa0IsRUFBRTtJQUNuRSxPQUFPLEtBQUssVUFBVSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUk7UUFDcEMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUViLE1BQU0sSUFBSSxHQUFHO1lBQ1gsR0FBRyxPQUFPO1lBQ1YsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU07U0FDOUIsQ0FBQztRQUNGLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXJDLCtCQUErQjtRQUMvQixzSUFBc0k7UUFDdEksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUM7UUFDekMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
16
+
17
+ //#endregion
18
+ export { xframe_default as default };
@@ -1,4 +1,7 @@
1
- import type { MiddlewareFunc } from 'egg';
2
- import type { SecurityConfig } from '../../config/config.default.ts';
1
+ import { SecurityConfig } from "../../config/config.default.js";
2
+ import { MiddlewareFunc } from "egg";
3
+
4
+ //#region src/lib/middlewares/xssProtection.d.ts
3
5
  declare const _default: (options: SecurityConfig["xssProtection"]) => MiddlewareFunc;
4
- export default _default;
6
+ //#endregion
7
+ export { _default as default };
@@ -1,14 +1,17 @@
1
1
  import { checkIfIgnore } from "../utils.js";
2
- export default (options) => {
3
- return async function xssProtection(ctx, next) {
4
- await next();
5
- const opts = {
6
- ...options,
7
- ...ctx.securityOptions.xssProtection,
8
- };
9
- if (checkIfIgnore(opts, ctx))
10
- return;
11
- ctx.set('x-xss-protection', opts.value);
12
- };
2
+
3
+ //#region src/lib/middlewares/xssProtection.ts
4
+ var xssProtection_default = (options) => {
5
+ return async function xssProtection(ctx, next) {
6
+ await next();
7
+ const opts = {
8
+ ...options,
9
+ ...ctx.securityOptions.xssProtection
10
+ };
11
+ if (checkIfIgnore(opts, ctx)) return;
12
+ ctx.set("x-xss-protection", opts.value);
13
+ };
13
14
  };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHNzUHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMveHNzUHJvdGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLGVBQWUsQ0FBQyxPQUF3QyxFQUFrQixFQUFFO0lBQzFFLE9BQU8sS0FBSyxVQUFVLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSTtRQUMzQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRWIsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLE9BQU87WUFDVixHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsYUFBYTtTQUNyQyxDQUFDO1FBQ0YsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFckMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
15
+
16
+ //#endregion
17
+ export { xssProtection_default as default };
@@ -1,19 +1,24 @@
1
- import type { PathMatchingFun } from '@eggjs/path-matching';
2
- import type { Context } from 'egg';
3
- import type { SecurityConfig } from '../config/config.default.ts';
1
+ import { SecurityConfig } from "../config/config.default.js";
2
+ import { Context } from "egg";
3
+ import { PathMatchingFun } from "@eggjs/path-matching";
4
+
5
+ //#region src/lib/utils.d.ts
6
+
4
7
  /**
5
- * Check whether a domain is in the safe domain white list or not.
6
- * @param {String} domain The inputted domain.
7
- * @param {Array<string>} whiteList The white list for domain.
8
- * @return {Boolean} If the `domain` is in the white list, return true; otherwise false.
9
- */
10
- export declare function isSafeDomain(domain: string, whiteList: string[]): boolean;
11
- export declare function isSafePath(path: string, ctx: Context): boolean;
12
- export declare function checkIfIgnore(opts: {
13
- enable: boolean;
14
- matching?: PathMatchingFun;
8
+ * Check whether a domain is in the safe domain white list or not.
9
+ * @param {String} domain The inputted domain.
10
+ * @param {Array<string>} whiteList The white list for domain.
11
+ * @return {Boolean} If the `domain` is in the white list, return true; otherwise false.
12
+ */
13
+ declare function isSafeDomain(domain: string, whiteList: string[]): boolean;
14
+ declare function isSafePath(path: string, ctx: Context): boolean;
15
+ declare function checkIfIgnore(opts: {
16
+ enable: boolean;
17
+ matching?: PathMatchingFun;
15
18
  }, ctx: Context): boolean;
16
- export declare function getCookieDomain(hostname: string): string;
17
- export declare function merge(origin: Record<string, any>, opts?: Record<string, any>): Record<string, any>;
18
- export declare function preprocessConfig(config: SecurityConfig): void;
19
- export declare function getFromUrl(url: string, prop: string): string | null;
19
+ declare function getCookieDomain(hostname: string): string;
20
+ declare function merge(origin: Record<string, any>, opts?: Record<string, any>): Record<string, any>;
21
+ declare function preprocessConfig(config: SecurityConfig): void;
22
+ declare function getFromUrl(url: string, prop: string): string | null;
23
+ //#endregion
24
+ export { checkIfIgnore, getCookieDomain, getFromUrl, isSafeDomain, isSafePath, merge, preprocessConfig };
package/dist/lib/utils.js CHANGED
@@ -1,192 +1,127 @@
1
- import { normalize } from 'node:path';
2
- import IP from '@eggjs/ip';
3
- import matcher from 'matcher';
1
+ import { normalize } from "node:path";
2
+ import IP from "@eggjs/ip";
3
+ import matcher from "matcher";
4
+
5
+ //#region src/lib/utils.ts
4
6
  /**
5
- * Check whether a domain is in the safe domain white list or not.
6
- * @param {String} domain The inputted domain.
7
- * @param {Array<string>} whiteList The white list for domain.
8
- * @return {Boolean} If the `domain` is in the white list, return true; otherwise false.
9
- */
10
- export function isSafeDomain(domain, whiteList) {
11
- // domain must be string, otherwise return false
12
- if (typeof domain !== 'string')
13
- return false;
14
- // Ignore case sensitive first
15
- domain = domain.toLowerCase();
16
- // add prefix `.`, because all domains in white list start with `.`
17
- const hostname = '.' + domain;
18
- return whiteList.some((rule) => {
19
- // Check whether we've got '*' as a wild character symbol
20
- if (rule.includes('*')) {
21
- return matcher.isMatch(domain, rule);
22
- }
23
- // If domain is an absolute path such as `http://...`
24
- // We can directly check whether it directly equals to `domain`
25
- // And we don't need to cope with `endWith`.
26
- if (domain === rule)
27
- return true;
28
- // ensure wwweggjs.com not match eggjs.com
29
- if (!rule.startsWith('.'))
30
- rule = `.${rule}`;
31
- return hostname.endsWith(rule);
32
- });
7
+ * Check whether a domain is in the safe domain white list or not.
8
+ * @param {String} domain The inputted domain.
9
+ * @param {Array<string>} whiteList The white list for domain.
10
+ * @return {Boolean} If the `domain` is in the white list, return true; otherwise false.
11
+ */
12
+ function isSafeDomain(domain, whiteList) {
13
+ if (typeof domain !== "string") return false;
14
+ domain = domain.toLowerCase();
15
+ const hostname = "." + domain;
16
+ return whiteList.some((rule) => {
17
+ if (rule.includes("*")) return matcher.isMatch(domain, rule);
18
+ if (domain === rule) return true;
19
+ if (!rule.startsWith(".")) rule = `.${rule}`;
20
+ return hostname.endsWith(rule);
21
+ });
33
22
  }
34
- export function isSafePath(path, ctx) {
35
- path = '.' + path;
36
- if (path.includes('%')) {
37
- try {
38
- path = decodeURIComponent(path);
39
- }
40
- catch {
41
- if (ctx.app.config.env === 'local' || ctx.app.config.env === 'unittest') {
42
- // not under production environment, output log
43
- ctx.coreLogger.warn('[@eggjs/security: dta global block] : decode file path %j failed.', path);
44
- }
45
- }
46
- }
47
- const normalizePath = normalize(path);
48
- return !(normalizePath.startsWith('../') || normalizePath.startsWith('..\\'));
23
+ function isSafePath(path, ctx) {
24
+ path = "." + path;
25
+ if (path.includes("%")) try {
26
+ path = decodeURIComponent(path);
27
+ } catch {
28
+ if (ctx.app.config.env === "local" || ctx.app.config.env === "unittest") ctx.coreLogger.warn("[@eggjs/security: dta global block] : decode file path %j failed.", path);
29
+ }
30
+ const normalizePath = normalize(path);
31
+ return !(normalizePath.startsWith("../") || normalizePath.startsWith("..\\"));
49
32
  }
50
- export function checkIfIgnore(opts, ctx) {
51
- // check opts.enable first
52
- if (!opts.enable)
53
- return true;
54
- return !opts.matching?.(ctx);
33
+ function checkIfIgnore(opts, ctx) {
34
+ if (!opts.enable) return true;
35
+ return !opts.matching?.(ctx);
55
36
  }
56
37
  const IP_RE = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
57
38
  const topDomains = {};
58
- ['.net.cn', '.gov.cn', '.org.cn', '.com.cn'].forEach((item) => {
59
- topDomains[item] = 2 - item.split('.').length;
39
+ [
40
+ ".net.cn",
41
+ ".gov.cn",
42
+ ".org.cn",
43
+ ".com.cn"
44
+ ].forEach((item) => {
45
+ topDomains[item] = 2 - item.split(".").length;
60
46
  });
61
- export function getCookieDomain(hostname) {
62
- // TODO(fengmk2): support ipv6
63
- if (IP_RE.test(hostname)) {
64
- return hostname;
65
- }
66
- // app.test.domain.com => .test.domain.com
67
- // app.stable.domain.com => .domain.com
68
- // app.domain.com => .domain.com
69
- // domain=.domain.com;
70
- const splits = hostname.split('.');
71
- let index = -2;
72
- // only when `*.test.*.com` set `.test.*.com`
73
- if (splits.length >= 4 && splits[splits.length - 3] === 'test') {
74
- index = -3;
75
- }
76
- let domain = getDomain(splits, index);
77
- if (topDomains[domain]) {
78
- // app.foo.org.cn => .foo.org.cn
79
- domain = getDomain(splits, index + topDomains[domain]);
80
- }
81
- return domain;
47
+ function getCookieDomain(hostname) {
48
+ if (IP_RE.test(hostname)) return hostname;
49
+ const splits = hostname.split(".");
50
+ let index = -2;
51
+ if (splits.length >= 4 && splits[splits.length - 3] === "test") index = -3;
52
+ let domain = getDomain(splits, index);
53
+ if (topDomains[domain]) domain = getDomain(splits, index + topDomains[domain]);
54
+ return domain;
82
55
  }
83
56
  function getDomain(splits, index) {
84
- return '.' + splits.slice(index).join('.');
57
+ return "." + splits.slice(index).join(".");
85
58
  }
86
- export function merge(origin, opts) {
87
- if (!opts) {
88
- return origin;
89
- }
90
- const res = {};
91
- const originKeys = Object.keys(origin);
92
- for (let i = 0; i < originKeys.length; i++) {
93
- const key = originKeys[i];
94
- res[key] = origin[key];
95
- }
96
- const keys = Object.keys(opts);
97
- for (let i = 0; i < keys.length; i++) {
98
- const key = keys[i];
99
- res[key] = opts[key];
100
- }
101
- return res;
59
+ function merge(origin, opts) {
60
+ if (!opts) return origin;
61
+ const res = {};
62
+ const originKeys = Object.keys(origin);
63
+ for (let i = 0; i < originKeys.length; i++) {
64
+ const key = originKeys[i];
65
+ res[key] = origin[key];
66
+ }
67
+ const keys = Object.keys(opts);
68
+ for (let i = 0; i < keys.length; i++) {
69
+ const key = keys[i];
70
+ res[key] = opts[key];
71
+ }
72
+ return res;
102
73
  }
103
- export function preprocessConfig(config) {
104
- // transfer ssrf.ipBlackList to ssrf.checkAddress
105
- // ssrf.ipExceptionList can easily pick out unwanted ips from ipBlackList
106
- // checkAddress has higher priority than ipBlackList
107
- const ssrf = config.ssrf;
108
- if (ssrf && ssrf.ipBlackList && !ssrf.checkAddress) {
109
- const blackList = ssrf.ipBlackList.map(getContains);
110
- const exceptionList = (ssrf.ipExceptionList || []).map(getContains);
111
- const hostnameExceptionList = ssrf.hostnameExceptionList;
112
- ssrf.checkAddress = (ipAddresses, _family, hostname) => {
113
- // Check white hostname first
114
- if (hostname && hostnameExceptionList) {
115
- if (hostnameExceptionList.includes(hostname)) {
116
- return true;
117
- }
118
- }
119
- // ipAddresses will be array address on Node.js >= 20
120
- // [
121
- // { address: '220.181.125.241', family: 4 },
122
- // { address: '240e:964:ea02:b00:3::3ec', family: 6 }
123
- // ]
124
- if (!Array.isArray(ipAddresses)) {
125
- ipAddresses = [ipAddresses];
126
- }
127
- for (const ipAddress of ipAddresses) {
128
- let address;
129
- if (typeof ipAddress === 'string') {
130
- address = ipAddress;
131
- }
132
- else {
133
- // FIXME: should support ipv6
134
- if (ipAddress.family === 6) {
135
- continue;
136
- }
137
- address = ipAddress.address;
138
- }
139
- // check white list first
140
- for (const exception of exceptionList) {
141
- if (exception(address)) {
142
- return true;
143
- }
144
- }
145
- // check black list
146
- for (const contains of blackList) {
147
- if (contains(address)) {
148
- return false;
149
- }
150
- }
151
- }
152
- // default allow
153
- return true;
154
- };
155
- }
156
- // Make sure that `whiteList` or `protocolWhiteList` is case insensitive
157
- config.domainWhiteList = config.domainWhiteList || [];
158
- config.domainWhiteList = config.domainWhiteList.map((domain) => domain.toLowerCase());
159
- config.protocolWhiteList = config.protocolWhiteList || [];
160
- config.protocolWhiteList = config.protocolWhiteList.map((protocol) => protocol.toLowerCase());
161
- // Make sure refererWhiteList is case insensitive
162
- if (config.csrf && config.csrf.refererWhiteList) {
163
- config.csrf.refererWhiteList = config.csrf.refererWhiteList.map((ref) => ref.toLowerCase());
164
- }
165
- // Directly converted to Set collection by a private property (not documented),
166
- // And we NO LONGER need to do conversion in `foreach` again and again in `lib/helper/surl.ts`.
167
- const protocolWhiteListSet = new Set(config.protocolWhiteList);
168
- protocolWhiteListSet.add('http');
169
- protocolWhiteListSet.add('https');
170
- protocolWhiteListSet.add('file');
171
- protocolWhiteListSet.add('data');
172
- Object.defineProperty(config, '__protocolWhiteListSet', {
173
- value: protocolWhiteListSet,
174
- enumerable: false,
175
- });
74
+ function preprocessConfig(config) {
75
+ const ssrf = config.ssrf;
76
+ if (ssrf && ssrf.ipBlackList && !ssrf.checkAddress) {
77
+ const blackList = ssrf.ipBlackList.map(getContains);
78
+ const exceptionList = (ssrf.ipExceptionList || []).map(getContains);
79
+ const hostnameExceptionList = ssrf.hostnameExceptionList;
80
+ ssrf.checkAddress = (ipAddresses, _family, hostname) => {
81
+ if (hostname && hostnameExceptionList) {
82
+ if (hostnameExceptionList.includes(hostname)) return true;
83
+ }
84
+ if (!Array.isArray(ipAddresses)) ipAddresses = [ipAddresses];
85
+ for (const ipAddress of ipAddresses) {
86
+ let address;
87
+ if (typeof ipAddress === "string") address = ipAddress;
88
+ else {
89
+ if (ipAddress.family === 6) continue;
90
+ address = ipAddress.address;
91
+ }
92
+ for (const exception of exceptionList) if (exception(address)) return true;
93
+ for (const contains of blackList) if (contains(address)) return false;
94
+ }
95
+ return true;
96
+ };
97
+ }
98
+ config.domainWhiteList = config.domainWhiteList || [];
99
+ config.domainWhiteList = config.domainWhiteList.map((domain) => domain.toLowerCase());
100
+ config.protocolWhiteList = config.protocolWhiteList || [];
101
+ config.protocolWhiteList = config.protocolWhiteList.map((protocol) => protocol.toLowerCase());
102
+ if (config.csrf && config.csrf.refererWhiteList) config.csrf.refererWhiteList = config.csrf.refererWhiteList.map((ref) => ref.toLowerCase());
103
+ const protocolWhiteListSet = new Set(config.protocolWhiteList);
104
+ protocolWhiteListSet.add("http");
105
+ protocolWhiteListSet.add("https");
106
+ protocolWhiteListSet.add("file");
107
+ protocolWhiteListSet.add("data");
108
+ Object.defineProperty(config, "__protocolWhiteListSet", {
109
+ value: protocolWhiteListSet,
110
+ enumerable: false
111
+ });
176
112
  }
177
- export function getFromUrl(url, prop) {
178
- try {
179
- const parsed = new URL(url);
180
- return Reflect.get(parsed, prop);
181
- }
182
- catch {
183
- return null;
184
- }
113
+ function getFromUrl(url, prop) {
114
+ try {
115
+ const parsed = new URL(url);
116
+ return Reflect.get(parsed, prop);
117
+ } catch {
118
+ return null;
119
+ }
185
120
  }
186
121
  function getContains(ip) {
187
- if (IP.isV4Format(ip) || IP.isV6Format(ip)) {
188
- return (address) => address === ip;
189
- }
190
- return IP.cidrSubnet(ip).contains;
122
+ if (IP.isV4Format(ip) || IP.isV6Format(ip)) return (address) => address === ip;
123
+ return IP.cidrSubnet(ip).contains;
191
124
  }
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRzNCLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUk5Qjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBYyxFQUFFLFNBQW1CO0lBQzlELGdEQUFnRDtJQUNoRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM3Qyw4QkFBOEI7SUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixtRUFBbUU7SUFDbkUsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztJQUU5QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUM3Qix5REFBeUQ7UUFDekQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QscURBQXFEO1FBQ3JELCtEQUErRDtRQUMvRCw0Q0FBNEM7UUFDNUMsSUFBSSxNQUFNLEtBQUssSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2pDLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJ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
125
+
126
+ //#endregion
127
+ export { checkIfIgnore, getCookieDomain, getFromUrl, isSafeDomain, isSafePath, merge, preprocessConfig };