@eggjs/security 4.0.0 → 5.0.0-beta.15
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.
- package/README.md +47 -67
- package/README.zh-CN.md +56 -68
- package/dist/agent.d.ts +10 -0
- package/dist/agent.js +15 -0
- package/dist/app/extend/agent.d.ts +14 -0
- package/dist/app/extend/agent.js +12 -0
- package/dist/app/extend/application.d.ts +20 -0
- package/dist/app/extend/application.js +32 -0
- package/dist/app/extend/context.d.ts +74 -0
- package/dist/app/extend/context.js +191 -0
- package/dist/app/extend/helper.d.ts +24 -0
- package/dist/app/extend/helper.js +7 -0
- package/dist/app/extend/response.d.ts +45 -0
- package/dist/app/extend/response.js +70 -0
- package/dist/app/middleware/securities.d.ts +8 -0
- package/dist/app/middleware/securities.js +39 -0
- package/dist/app.d.ts +10 -0
- package/dist/app.js +24 -0
- package/dist/config/config.default.d.ts +874 -0
- package/dist/config/config.default.js +170 -0
- package/dist/config/config.local.d.ts +6 -0
- package/dist/config/config.local.js +5 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/lib/extend/safe_curl.d.ts +20 -0
- package/dist/lib/extend/safe_curl.js +19 -0
- package/dist/lib/helper/cliFilter.d.ts +7 -0
- package/dist/lib/helper/cliFilter.js +18 -0
- package/dist/lib/helper/escape.d.ts +2 -0
- package/dist/lib/helper/escape.js +7 -0
- package/dist/lib/helper/escapeShellArg.d.ts +4 -0
- package/dist/lib/helper/escapeShellArg.js +7 -0
- package/dist/lib/helper/escapeShellCmd.d.ts +4 -0
- package/dist/lib/helper/escapeShellCmd.js +15 -0
- package/dist/lib/helper/index.d.ts +24 -0
- package/dist/lib/helper/index.js +25 -0
- package/dist/lib/helper/shtml.d.ts +6 -0
- package/dist/lib/helper/shtml.js +53 -0
- package/dist/lib/helper/sjs.d.ts +7 -0
- package/dist/lib/helper/sjs.js +36 -0
- package/dist/lib/helper/sjson.d.ts +4 -0
- package/dist/lib/helper/sjson.js +32 -0
- package/dist/lib/helper/spath.d.ts +7 -0
- package/dist/lib/helper/spath.js +16 -0
- package/dist/lib/helper/surl.d.ts +6 -0
- package/dist/lib/helper/surl.js +25 -0
- package/dist/lib/middlewares/csp.d.ts +7 -0
- package/dist/lib/middlewares/csp.js +46 -0
- package/dist/lib/middlewares/csrf.d.ts +7 -0
- package/dist/lib/middlewares/csrf.js +33 -0
- package/dist/lib/middlewares/dta.d.ts +6 -0
- package/dist/lib/middlewares/dta.js +13 -0
- package/dist/lib/middlewares/hsts.d.ts +7 -0
- package/dist/lib/middlewares/hsts.js +19 -0
- package/dist/lib/middlewares/index.d.ts +18 -0
- package/dist/lib/middlewares/index.js +27 -0
- package/dist/lib/middlewares/methodnoallow.d.ts +6 -0
- package/dist/lib/middlewares/methodnoallow.js +15 -0
- package/dist/lib/middlewares/noopen.d.ts +7 -0
- package/dist/lib/middlewares/noopen.js +17 -0
- package/dist/lib/middlewares/nosniff.d.ts +7 -0
- package/dist/lib/middlewares/nosniff.js +27 -0
- package/dist/lib/middlewares/referrerPolicy.d.ts +7 -0
- package/dist/lib/middlewares/referrerPolicy.js +31 -0
- package/dist/lib/middlewares/xframe.d.ts +7 -0
- package/dist/lib/middlewares/xframe.js +18 -0
- package/dist/lib/middlewares/xssProtection.d.ts +7 -0
- package/dist/lib/middlewares/xssProtection.js +17 -0
- package/dist/lib/utils.d.ts +24 -0
- package/dist/lib/utils.js +127 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.js +5 -0
- package/package.json +74 -70
- package/dist/commonjs/agent.d.ts +0 -6
- package/dist/commonjs/agent.js +0 -14
- package/dist/commonjs/app/extend/agent.d.ts +0 -5
- package/dist/commonjs/app/extend/agent.js +0 -11
- package/dist/commonjs/app/extend/application.d.ts +0 -16
- package/dist/commonjs/app/extend/application.js +0 -35
- package/dist/commonjs/app/extend/context.d.ts +0 -68
- package/dist/commonjs/app/extend/context.js +0 -283
- package/dist/commonjs/app/extend/helper.d.ts +0 -12
- package/dist/commonjs/app/extend/helper.js +0 -10
- package/dist/commonjs/app/extend/response.d.ts +0 -41
- package/dist/commonjs/app/extend/response.js +0 -85
- package/dist/commonjs/app/middleware/securities.d.ts +0 -4
- package/dist/commonjs/app/middleware/securities.js +0 -55
- package/dist/commonjs/app.d.ts +0 -6
- package/dist/commonjs/app.js +0 -29
- package/dist/commonjs/config/config.default.d.ts +0 -871
- package/dist/commonjs/config/config.default.js +0 -357
- package/dist/commonjs/config/config.local.d.ts +0 -5
- package/dist/commonjs/config/config.local.js +0 -10
- package/dist/commonjs/index.d.ts +0 -1
- package/dist/commonjs/index.js +0 -14
- package/dist/commonjs/lib/extend/safe_curl.d.ts +0 -16
- package/dist/commonjs/lib/extend/safe_curl.js +0 -28
- package/dist/commonjs/lib/helper/cliFilter.d.ts +0 -4
- package/dist/commonjs/lib/helper/cliFilter.js +0 -20
- package/dist/commonjs/lib/helper/escape.d.ts +0 -2
- package/dist/commonjs/lib/helper/escape.js +0 -8
- package/dist/commonjs/lib/helper/escapeShellArg.d.ts +0 -1
- package/dist/commonjs/lib/helper/escapeShellArg.js +0 -8
- package/dist/commonjs/lib/helper/escapeShellCmd.d.ts +0 -1
- package/dist/commonjs/lib/helper/escapeShellCmd.js +0 -17
- package/dist/commonjs/lib/helper/index.d.ts +0 -21
- package/dist/commonjs/lib/helper/index.js +0 -26
- package/dist/commonjs/lib/helper/shtml.d.ts +0 -2
- package/dist/commonjs/lib/helper/shtml.js +0 -76
- package/dist/commonjs/lib/helper/sjs.d.ts +0 -4
- package/dist/commonjs/lib/helper/sjs.js +0 -52
- package/dist/commonjs/lib/helper/sjson.d.ts +0 -1
- package/dist/commonjs/lib/helper/sjson.js +0 -45
- package/dist/commonjs/lib/helper/spath.d.ts +0 -5
- package/dist/commonjs/lib/helper/spath.js +0 -28
- package/dist/commonjs/lib/helper/surl.d.ts +0 -2
- package/dist/commonjs/lib/helper/surl.js +0 -33
- package/dist/commonjs/lib/middlewares/csp.d.ts +0 -4
- package/dist/commonjs/lib/middlewares/csp.js +0 -68
- package/dist/commonjs/lib/middlewares/csrf.d.ts +0 -4
- package/dist/commonjs/lib/middlewares/csrf.js +0 -42
- package/dist/commonjs/lib/middlewares/dta.d.ts +0 -3
- package/dist/commonjs/lib/middlewares/dta.js +0 -14
- package/dist/commonjs/lib/middlewares/hsts.d.ts +0 -4
- package/dist/commonjs/lib/middlewares/hsts.js +0 -23
- package/dist/commonjs/lib/middlewares/index.d.ts +0 -13
- package/dist/commonjs/lib/middlewares/index.js +0 -28
- package/dist/commonjs/lib/middlewares/methodnoallow.d.ts +0 -3
- package/dist/commonjs/lib/middlewares/methodnoallow.js +0 -22
- package/dist/commonjs/lib/middlewares/noopen.d.ts +0 -4
- package/dist/commonjs/lib/middlewares/noopen.js +0 -17
- package/dist/commonjs/lib/middlewares/nosniff.d.ts +0 -4
- package/dist/commonjs/lib/middlewares/nosniff.js +0 -30
- package/dist/commonjs/lib/middlewares/referrerPolicy.d.ts +0 -4
- package/dist/commonjs/lib/middlewares/referrerPolicy.js +0 -36
- package/dist/commonjs/lib/middlewares/xframe.d.ts +0 -4
- package/dist/commonjs/lib/middlewares/xframe.js +0 -19
- package/dist/commonjs/lib/middlewares/xssProtection.d.ts +0 -4
- package/dist/commonjs/lib/middlewares/xssProtection.js +0 -16
- package/dist/commonjs/lib/utils.d.ts +0 -19
- package/dist/commonjs/lib/utils.js +0 -206
- package/dist/commonjs/package.json +0 -3
- package/dist/commonjs/types.d.ts +0 -10
- package/dist/commonjs/types.js +0 -5
- package/dist/esm/agent.d.ts +0 -6
- package/dist/esm/agent.js +0 -11
- package/dist/esm/app/extend/agent.d.ts +0 -5
- package/dist/esm/app/extend/agent.js +0 -8
- package/dist/esm/app/extend/application.d.ts +0 -16
- package/dist/esm/app/extend/application.js +0 -32
- package/dist/esm/app/extend/context.d.ts +0 -68
- package/dist/esm/app/extend/context.js +0 -244
- package/dist/esm/app/extend/helper.d.ts +0 -12
- package/dist/esm/app/extend/helper.js +0 -5
- package/dist/esm/app/extend/response.d.ts +0 -41
- package/dist/esm/app/extend/response.js +0 -82
- package/dist/esm/app/middleware/securities.d.ts +0 -4
- package/dist/esm/app/middleware/securities.js +0 -50
- package/dist/esm/app.d.ts +0 -6
- package/dist/esm/app.js +0 -26
- package/dist/esm/config/config.default.d.ts +0 -871
- package/dist/esm/config/config.default.js +0 -351
- package/dist/esm/config/config.local.d.ts +0 -5
- package/dist/esm/config/config.local.js +0 -8
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.js +0 -12
- package/dist/esm/lib/extend/safe_curl.d.ts +0 -16
- package/dist/esm/lib/extend/safe_curl.js +0 -25
- package/dist/esm/lib/helper/cliFilter.d.ts +0 -4
- package/dist/esm/lib/helper/cliFilter.js +0 -17
- package/dist/esm/lib/helper/escape.d.ts +0 -2
- package/dist/esm/lib/helper/escape.js +0 -3
- package/dist/esm/lib/helper/escapeShellArg.d.ts +0 -1
- package/dist/esm/lib/helper/escapeShellArg.js +0 -5
- package/dist/esm/lib/helper/escapeShellCmd.d.ts +0 -1
- package/dist/esm/lib/helper/escapeShellCmd.js +0 -14
- package/dist/esm/lib/helper/index.d.ts +0 -21
- package/dist/esm/lib/helper/index.js +0 -21
- package/dist/esm/lib/helper/shtml.d.ts +0 -2
- package/dist/esm/lib/helper/shtml.js +0 -70
- package/dist/esm/lib/helper/sjs.d.ts +0 -4
- package/dist/esm/lib/helper/sjs.js +0 -49
- package/dist/esm/lib/helper/sjson.d.ts +0 -1
- package/dist/esm/lib/helper/sjson.js +0 -39
- package/dist/esm/lib/helper/spath.d.ts +0 -5
- package/dist/esm/lib/helper/spath.js +0 -25
- package/dist/esm/lib/helper/surl.d.ts +0 -2
- package/dist/esm/lib/helper/surl.js +0 -30
- package/dist/esm/lib/middlewares/csp.d.ts +0 -4
- package/dist/esm/lib/middlewares/csp.js +0 -63
- package/dist/esm/lib/middlewares/csrf.d.ts +0 -4
- package/dist/esm/lib/middlewares/csrf.js +0 -37
- package/dist/esm/lib/middlewares/dta.d.ts +0 -3
- package/dist/esm/lib/middlewares/dta.js +0 -12
- package/dist/esm/lib/middlewares/hsts.d.ts +0 -4
- package/dist/esm/lib/middlewares/hsts.js +0 -21
- package/dist/esm/lib/middlewares/index.d.ts +0 -13
- package/dist/esm/lib/middlewares/index.js +0 -23
- package/dist/esm/lib/middlewares/methodnoallow.d.ts +0 -3
- package/dist/esm/lib/middlewares/methodnoallow.js +0 -20
- package/dist/esm/lib/middlewares/noopen.d.ts +0 -4
- package/dist/esm/lib/middlewares/noopen.js +0 -15
- package/dist/esm/lib/middlewares/nosniff.d.ts +0 -4
- package/dist/esm/lib/middlewares/nosniff.js +0 -28
- package/dist/esm/lib/middlewares/referrerPolicy.d.ts +0 -4
- package/dist/esm/lib/middlewares/referrerPolicy.js +0 -34
- package/dist/esm/lib/middlewares/xframe.d.ts +0 -4
- package/dist/esm/lib/middlewares/xframe.js +0 -17
- package/dist/esm/lib/middlewares/xssProtection.d.ts +0 -4
- package/dist/esm/lib/middlewares/xssProtection.js +0 -14
- package/dist/esm/lib/utils.d.ts +0 -19
- package/dist/esm/lib/utils.js +0 -194
- package/dist/esm/package.json +0 -3
- package/dist/esm/types.d.ts +0 -10
- package/dist/esm/types.js +0 -3
- package/dist/package.json +0 -4
- package/src/agent.ts +0 -14
- package/src/app/extend/agent.ts +0 -14
- package/src/app/extend/application.ts +0 -51
- package/src/app/extend/context.ts +0 -282
- package/src/app/extend/helper.ts +0 -5
- package/src/app/extend/response.ts +0 -95
- package/src/app/middleware/securities.ts +0 -63
- package/src/app.ts +0 -31
- package/src/config/config.default.ts +0 -379
- package/src/config/config.local.ts +0 -9
- package/src/index.ts +0 -12
- package/src/lib/extend/safe_curl.ts +0 -35
- package/src/lib/helper/cliFilter.ts +0 -20
- package/src/lib/helper/escape.ts +0 -3
- package/src/lib/helper/escapeShellArg.ts +0 -4
- package/src/lib/helper/escapeShellCmd.ts +0 -16
- package/src/lib/helper/index.ts +0 -21
- package/src/lib/helper/shtml.ts +0 -77
- package/src/lib/helper/sjs.ts +0 -57
- package/src/lib/helper/sjson.ts +0 -35
- package/src/lib/helper/spath.ts +0 -27
- package/src/lib/helper/surl.ts +0 -35
- package/src/lib/middlewares/csp.ts +0 -70
- package/src/lib/middlewares/csrf.ts +0 -44
- package/src/lib/middlewares/dta.ts +0 -13
- package/src/lib/middlewares/hsts.ts +0 -24
- package/src/lib/middlewares/index.ts +0 -23
- package/src/lib/middlewares/methodnoallow.ts +0 -23
- package/src/lib/middlewares/noopen.ts +0 -18
- package/src/lib/middlewares/nosniff.ts +0 -32
- package/src/lib/middlewares/referrerPolicy.ts +0 -39
- package/src/lib/middlewares/xframe.ts +0 -20
- package/src/lib/middlewares/xssProtection.ts +0 -17
- package/src/lib/utils.ts +0 -208
- package/src/types.ts +0 -16
- package/src/typings/index.d.ts +0 -4
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const utils_js_1 = require("../utils.js");
|
|
4
|
-
// https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy
|
|
5
|
-
const ALLOWED_POLICIES_ENUM = [
|
|
6
|
-
'no-referrer',
|
|
7
|
-
'no-referrer-when-downgrade',
|
|
8
|
-
'origin',
|
|
9
|
-
'origin-when-cross-origin',
|
|
10
|
-
'same-origin',
|
|
11
|
-
'strict-origin',
|
|
12
|
-
'strict-origin-when-cross-origin',
|
|
13
|
-
'unsafe-url',
|
|
14
|
-
'',
|
|
15
|
-
];
|
|
16
|
-
exports.default = (options) => {
|
|
17
|
-
return async function referrerPolicy(ctx, next) {
|
|
18
|
-
await next();
|
|
19
|
-
const opts = {
|
|
20
|
-
...options,
|
|
21
|
-
// check refererPolicy for backward compatibility
|
|
22
|
-
// typo on the old version
|
|
23
|
-
// @see https://github.com/eggjs/security/blob/e3408408adec5f8d009d37f75126ed082481d0ac/lib/middlewares/referrerPolicy.js#L21C59-L21C72
|
|
24
|
-
...ctx.securityOptions.refererPolicy,
|
|
25
|
-
...ctx.securityOptions.referrerPolicy,
|
|
26
|
-
};
|
|
27
|
-
if ((0, utils_js_1.checkIfIgnore)(opts, ctx))
|
|
28
|
-
return;
|
|
29
|
-
const policy = opts.value;
|
|
30
|
-
if (!ALLOWED_POLICIES_ENUM.includes(policy)) {
|
|
31
|
-
throw new Error('"' + policy + '" is not available.');
|
|
32
|
-
}
|
|
33
|
-
ctx.set('referrer-policy', policy);
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJyZXJQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21pZGRsZXdhcmVzL3JlZmVycmVyUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsMENBQTRDO0FBRzVDLDRFQUE0RTtBQUM1RSxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLGFBQWE7SUFDYiw0QkFBNEI7SUFDNUIsUUFBUTtJQUNSLDBCQUEwQjtJQUMxQixhQUFhO0lBQ2IsZUFBZTtJQUNmLGlDQUFpQztJQUNqQyxZQUFZO0lBQ1osRUFBRTtDQUNILENBQUM7QUFFRixrQkFBZSxDQUFDLE9BQXlDLEVBQUUsRUFBRTtJQUMzRCxPQUFPLEtBQUssVUFBVSxjQUFjLENBQUMsR0FBWSxFQUFFLElBQVU7UUFDM0QsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUViLE1BQU0sSUFBSSxHQUFHO1lBQ1gsR0FBRyxPQUFPO1lBQ1YsaURBQWlEO1lBQ2pELDBCQUEwQjtZQUMxQix1SUFBdUk7WUFDdkksR0FBSSxHQUFHLENBQUMsZUFBdUIsQ0FBQyxhQUFhO1lBQzdDLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxjQUFjO1NBQ3RDLENBQUM7UUFDRixJQUFJLElBQUEsd0JBQWEsRUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUVyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcscUJBQXFCLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const utils_js_1 = require("../utils.js");
|
|
4
|
-
exports.default = (options) => {
|
|
5
|
-
return async function xframe(ctx, next) {
|
|
6
|
-
await next();
|
|
7
|
-
const opts = {
|
|
8
|
-
...options,
|
|
9
|
-
...ctx.securityOptions.xframe,
|
|
10
|
-
};
|
|
11
|
-
if ((0, utils_js_1.checkIfIgnore)(opts, ctx))
|
|
12
|
-
return;
|
|
13
|
-
// DENY, SAMEORIGIN, ALLOW-FROM
|
|
14
|
-
// https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options?redirectlocale=en-US&redirectslug=The_X-FRAME-OPTIONS_response_header
|
|
15
|
-
const value = opts.value || 'SAMEORIGIN';
|
|
16
|
-
ctx.set('x-frame-options', value);
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGZyYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9taWRkbGV3YXJlcy94ZnJhbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwwQ0FBNEM7QUFHNUMsa0JBQWUsQ0FBQyxPQUFpQyxFQUFFLEVBQUU7SUFDbkQsT0FBTyxLQUFLLFVBQVUsTUFBTSxDQUFDLEdBQVksRUFBRSxJQUFVO1FBQ25ELE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFYixNQUFNLElBQUksR0FBRztZQUNYLEdBQUcsT0FBTztZQUNWLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNO1NBQzlCLENBQUM7UUFDRixJQUFJLElBQUEsd0JBQWEsRUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUVyQywrQkFBK0I7UUFDL0Isc0lBQXNJO1FBQ3RJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const utils_js_1 = require("../utils.js");
|
|
4
|
-
exports.default = (options) => {
|
|
5
|
-
return async function xssProtection(ctx, next) {
|
|
6
|
-
await next();
|
|
7
|
-
const opts = {
|
|
8
|
-
...options,
|
|
9
|
-
...ctx.securityOptions.xssProtection,
|
|
10
|
-
};
|
|
11
|
-
if ((0, utils_js_1.checkIfIgnore)(opts, ctx))
|
|
12
|
-
return;
|
|
13
|
-
ctx.set('x-xss-protection', opts.value);
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHNzUHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMveHNzUHJvdGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDBDQUE0QztBQUc1QyxrQkFBZSxDQUFDLE9BQXdDLEVBQUUsRUFBRTtJQUMxRCxPQUFPLEtBQUssVUFBVSxhQUFhLENBQUMsR0FBWSxFQUFFLElBQVU7UUFDMUQsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUViLE1BQU0sSUFBSSxHQUFHO1lBQ1gsR0FBRyxPQUFPO1lBQ1YsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLGFBQWE7U0FDckMsQ0FBQztRQUNGLElBQUksSUFBQSx3QkFBYSxFQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXJDLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Context } from '@eggjs/core';
|
|
2
|
-
import type { PathMatchingFun } from 'egg-path-matching';
|
|
3
|
-
import { SecurityConfig } from '../types.js';
|
|
4
|
-
/**
|
|
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;
|
|
15
|
-
}, 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;
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isSafeDomain = isSafeDomain;
|
|
7
|
-
exports.isSafePath = isSafePath;
|
|
8
|
-
exports.checkIfIgnore = checkIfIgnore;
|
|
9
|
-
exports.getCookieDomain = getCookieDomain;
|
|
10
|
-
exports.merge = merge;
|
|
11
|
-
exports.preprocessConfig = preprocessConfig;
|
|
12
|
-
exports.getFromUrl = getFromUrl;
|
|
13
|
-
const node_path_1 = require("node:path");
|
|
14
|
-
const matcher_1 = __importDefault(require("matcher"));
|
|
15
|
-
const ip_1 = __importDefault(require("@eggjs/ip"));
|
|
16
|
-
/**
|
|
17
|
-
* Check whether a domain is in the safe domain white list or not.
|
|
18
|
-
* @param {String} domain The inputted domain.
|
|
19
|
-
* @param {Array<string>} whiteList The white list for domain.
|
|
20
|
-
* @return {Boolean} If the `domain` is in the white list, return true; otherwise false.
|
|
21
|
-
*/
|
|
22
|
-
function isSafeDomain(domain, whiteList) {
|
|
23
|
-
// domain must be string, otherwise return false
|
|
24
|
-
if (typeof domain !== 'string')
|
|
25
|
-
return false;
|
|
26
|
-
// Ignore case sensitive first
|
|
27
|
-
domain = domain.toLowerCase();
|
|
28
|
-
// add prefix `.`, because all domains in white list start with `.`
|
|
29
|
-
const hostname = '.' + domain;
|
|
30
|
-
return whiteList.some(rule => {
|
|
31
|
-
// Check whether we've got '*' as a wild character symbol
|
|
32
|
-
if (rule.includes('*')) {
|
|
33
|
-
return matcher_1.default.isMatch(domain, rule);
|
|
34
|
-
}
|
|
35
|
-
// If domain is an absolute path such as `http://...`
|
|
36
|
-
// We can directly check whether it directly equals to `domain`
|
|
37
|
-
// And we don't need to cope with `endWith`.
|
|
38
|
-
if (domain === rule)
|
|
39
|
-
return true;
|
|
40
|
-
// ensure wwweggjs.com not match eggjs.com
|
|
41
|
-
if (!/^\./.test(rule))
|
|
42
|
-
rule = `.${rule}`;
|
|
43
|
-
return hostname.endsWith(rule);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
function isSafePath(path, ctx) {
|
|
47
|
-
path = '.' + path;
|
|
48
|
-
if (path.includes('%')) {
|
|
49
|
-
try {
|
|
50
|
-
path = decodeURIComponent(path);
|
|
51
|
-
}
|
|
52
|
-
catch (e) {
|
|
53
|
-
if (ctx.app.config.env === 'local' || ctx.app.config.env === 'unittest') {
|
|
54
|
-
// not under production environment, output log
|
|
55
|
-
ctx.coreLogger.warn('[@eggjs/security: dta global block] : decode file path %j failed.', path);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
const normalizePath = (0, node_path_1.normalize)(path);
|
|
60
|
-
return !(normalizePath.startsWith('../') || normalizePath.startsWith('..\\'));
|
|
61
|
-
}
|
|
62
|
-
function checkIfIgnore(opts, ctx) {
|
|
63
|
-
// check opts.enable first
|
|
64
|
-
if (!opts.enable)
|
|
65
|
-
return true;
|
|
66
|
-
return !opts.matching?.(ctx);
|
|
67
|
-
}
|
|
68
|
-
const IP_RE = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
|
|
69
|
-
const topDomains = {};
|
|
70
|
-
[
|
|
71
|
-
'.net.cn', '.gov.cn', '.org.cn', '.com.cn',
|
|
72
|
-
].forEach(item => {
|
|
73
|
-
topDomains[item] = 2 - item.split('.').length;
|
|
74
|
-
});
|
|
75
|
-
function getCookieDomain(hostname) {
|
|
76
|
-
// TODO(fengmk2): support ipv6
|
|
77
|
-
if (IP_RE.test(hostname)) {
|
|
78
|
-
return hostname;
|
|
79
|
-
}
|
|
80
|
-
// app.test.domain.com => .test.domain.com
|
|
81
|
-
// app.stable.domain.com => .domain.com
|
|
82
|
-
// app.domain.com => .domain.com
|
|
83
|
-
// domain=.domain.com;
|
|
84
|
-
const splits = hostname.split('.');
|
|
85
|
-
let index = -2;
|
|
86
|
-
// only when `*.test.*.com` set `.test.*.com`
|
|
87
|
-
if (splits.length >= 4 && splits[splits.length - 3] === 'test') {
|
|
88
|
-
index = -3;
|
|
89
|
-
}
|
|
90
|
-
let domain = getDomain(splits, index);
|
|
91
|
-
if (topDomains[domain]) {
|
|
92
|
-
// app.foo.org.cn => .foo.org.cn
|
|
93
|
-
domain = getDomain(splits, index + topDomains[domain]);
|
|
94
|
-
}
|
|
95
|
-
return domain;
|
|
96
|
-
}
|
|
97
|
-
function getDomain(splits, index) {
|
|
98
|
-
return '.' + splits.slice(index).join('.');
|
|
99
|
-
}
|
|
100
|
-
function merge(origin, opts) {
|
|
101
|
-
if (!opts) {
|
|
102
|
-
return origin;
|
|
103
|
-
}
|
|
104
|
-
const res = {};
|
|
105
|
-
const originKeys = Object.keys(origin);
|
|
106
|
-
for (let i = 0; i < originKeys.length; i++) {
|
|
107
|
-
const key = originKeys[i];
|
|
108
|
-
res[key] = origin[key];
|
|
109
|
-
}
|
|
110
|
-
const keys = Object.keys(opts);
|
|
111
|
-
for (let i = 0; i < keys.length; i++) {
|
|
112
|
-
const key = keys[i];
|
|
113
|
-
res[key] = opts[key];
|
|
114
|
-
}
|
|
115
|
-
return res;
|
|
116
|
-
}
|
|
117
|
-
function preprocessConfig(config) {
|
|
118
|
-
// transfer ssrf.ipBlackList to ssrf.checkAddress
|
|
119
|
-
// ssrf.ipExceptionList can easily pick out unwanted ips from ipBlackList
|
|
120
|
-
// checkAddress has higher priority than ipBlackList
|
|
121
|
-
const ssrf = config.ssrf;
|
|
122
|
-
if (ssrf && ssrf.ipBlackList && !ssrf.checkAddress) {
|
|
123
|
-
const blackList = ssrf.ipBlackList.map(getContains);
|
|
124
|
-
const exceptionList = (ssrf.ipExceptionList || []).map(getContains);
|
|
125
|
-
const hostnameExceptionList = ssrf.hostnameExceptionList;
|
|
126
|
-
ssrf.checkAddress = (ipAddresses, _family, hostname) => {
|
|
127
|
-
// Check white hostname first
|
|
128
|
-
if (hostname && hostnameExceptionList) {
|
|
129
|
-
if (hostnameExceptionList.includes(hostname)) {
|
|
130
|
-
return true;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// ipAddresses will be array address on Node.js >= 20
|
|
134
|
-
// [
|
|
135
|
-
// { address: '220.181.125.241', family: 4 },
|
|
136
|
-
// { address: '240e:964:ea02:b00:3::3ec', family: 6 }
|
|
137
|
-
// ]
|
|
138
|
-
if (!Array.isArray(ipAddresses)) {
|
|
139
|
-
ipAddresses = [ipAddresses];
|
|
140
|
-
}
|
|
141
|
-
for (const ipAddress of ipAddresses) {
|
|
142
|
-
let address;
|
|
143
|
-
if (typeof ipAddress === 'string') {
|
|
144
|
-
address = ipAddress;
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
// FIXME: should support ipv6
|
|
148
|
-
if (ipAddress.family === 6) {
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
address = ipAddress.address;
|
|
152
|
-
}
|
|
153
|
-
// check white list first
|
|
154
|
-
for (const exception of exceptionList) {
|
|
155
|
-
if (exception(address)) {
|
|
156
|
-
return true;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// check black list
|
|
160
|
-
for (const contains of blackList) {
|
|
161
|
-
if (contains(address)) {
|
|
162
|
-
return false;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
// default allow
|
|
167
|
-
return true;
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
// Make sure that `whiteList` or `protocolWhiteList` is case insensitive
|
|
171
|
-
config.domainWhiteList = config.domainWhiteList || [];
|
|
172
|
-
config.domainWhiteList = config.domainWhiteList.map((domain) => domain.toLowerCase());
|
|
173
|
-
config.protocolWhiteList = config.protocolWhiteList || [];
|
|
174
|
-
config.protocolWhiteList = config.protocolWhiteList.map((protocol) => protocol.toLowerCase());
|
|
175
|
-
// Make sure refererWhiteList is case insensitive
|
|
176
|
-
if (config.csrf && config.csrf.refererWhiteList) {
|
|
177
|
-
config.csrf.refererWhiteList = config.csrf.refererWhiteList.map((ref) => ref.toLowerCase());
|
|
178
|
-
}
|
|
179
|
-
// Directly converted to Set collection by a private property (not documented),
|
|
180
|
-
// And we NO LONGER need to do conversion in `foreach` again and again in `lib/helper/surl.ts`.
|
|
181
|
-
const protocolWhiteListSet = new Set(config.protocolWhiteList);
|
|
182
|
-
protocolWhiteListSet.add('http');
|
|
183
|
-
protocolWhiteListSet.add('https');
|
|
184
|
-
protocolWhiteListSet.add('file');
|
|
185
|
-
protocolWhiteListSet.add('data');
|
|
186
|
-
Object.defineProperty(config, '__protocolWhiteListSet', {
|
|
187
|
-
value: protocolWhiteListSet,
|
|
188
|
-
enumerable: false,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
function getFromUrl(url, prop) {
|
|
192
|
-
try {
|
|
193
|
-
const parsed = new URL(url);
|
|
194
|
-
return prop ? Reflect.get(parsed, prop) : parsed;
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
return null;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
function getContains(ip) {
|
|
201
|
-
if (ip_1.default.isV4Format(ip) || ip_1.default.isV6Format(ip)) {
|
|
202
|
-
return (address) => address === ip;
|
|
203
|
-
}
|
|
204
|
-
return ip_1.default.cidrSubnet(ip).contains;
|
|
205
|
-
}
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBYUEsb0NBcUJDO0FBRUQsZ0NBY0M7QUFFRCxzQ0FJQztBQVVELDBDQXNCQztBQU1ELHNCQWtCQztBQUVELDRDQTZFQztBQUVELGdDQU9DO0FBeE1ELHlDQUFzQztBQUN0QyxzREFBOEI7QUFDOUIsbURBQTJCO0FBSzNCOzs7OztHQUtHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQWMsRUFBRSxTQUFtQjtJQUM5RCxnREFBZ0Q7SUFDaEQsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDN0MsOEJBQThCO0lBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsbUVBQW1FO0lBQ25FLE1BQU0sUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFFOUIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzNCLHlEQUF5RDtRQUN6RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLGlCQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QscURBQXFEO1FBQ3JELCtEQUErRDtRQUMvRCw0Q0FBNEM7UUFDNUMsSUFBSSxNQUFNLEtBQUssSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2pDLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLElBQVksRUFBRSxHQUFZO0lBQ25ELElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQztZQUNILElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3hFLCtDQUErQztnQkFDL0MsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsbUVBQW1FLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakcsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBQSxxQkFBUyxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsSUFBc0QsRUFBRSxHQUFZO0lBQ2hHLDBCQUEwQjtJQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQztJQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRyxzQ0FBc0MsQ0FBQztBQUNyRCxNQUFNLFVBQVUsR0FBMkIsRUFBRSxDQUFDO0FBQzlDO0lBQ0UsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUztDQUMzQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUNmLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDaEQsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFnQixlQUFlLENBQUMsUUFBZ0I7SUFDOUMsOEJBQThCO0lBQzlCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCwwQ0FBMEM7SUFDMUMsdUNBQXVDO0lBQ3ZDLGdDQUFnQztJQUNoQyxzQkFBc0I7SUFDdEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVmLDZDQUE2QztJQUM3QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQy9ELEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNiLENBQUM7SUFDRCxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdkIsZ0NBQWdDO1FBQ2hDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLE1BQWdCLEVBQUUsS0FBYTtJQUNoRCxPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBZ0IsS0FBSyxDQUFDLE1BQTJCLEVBQUUsSUFBMEI7SUFDM0UsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUF3QixFQUFFLENBQUM7SUFFcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLE1BQXNCO0lBQ3JELGlEQUFpRDtJQUNqRCx5RUFBeUU7SUFDekUsb0RBQW9EO0lBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDekIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ3JELDZCQUE2QjtZQUM3QixJQUFJLFFBQVEsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUM3QyxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQztZQUNELHFEQUFxRDtZQUNyRCxJQUFJO1lBQ0osK0NBQStDO1lBQy9DLHVEQUF1RDtZQUN2RCxJQUFJO1lBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsV0FBVyxHQUFHLENBQUUsV0FBVyxDQUFFLENBQUM7WUFDaEMsQ0FBQztZQUNELEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksT0FBZSxDQUFDO2dCQUNwQixJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNsQyxPQUFPLEdBQUcsU0FBUyxDQUFDO2dCQUN0QixDQUFDO3FCQUFNLENBQUM7b0JBQ04sNkJBQTZCO29CQUM3QixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQzNCLFNBQVM7b0JBQ1gsQ0FBQztvQkFDRCxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDOUIsQ0FBQztnQkFDRCx5QkFBeUI7Z0JBQ3pCLEtBQUssTUFBTSxTQUFTLElBQUksYUFBYSxFQUFFLENBQUM7b0JBQ3RDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxtQkFBbUI7Z0JBQ25CLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2pDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ3RCLE9BQU8sS0FBSyxDQUFDO29CQUNmLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxnQkFBZ0I7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLE1BQU0sQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFDdEQsTUFBTSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFFOUYsTUFBTSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7SUFDMUQsTUFBTSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUV0RyxpREFBaUQ7SUFDakQsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLCtGQUErRjtJQUMvRixNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9ELG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVqQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsRUFBRTtRQUN0RCxLQUFLLEVBQUUsb0JBQW9CO1FBQzNCLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUMsR0FBVyxFQUFFLElBQWE7SUFDbkQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxFQUFVO0lBQzdCLElBQUksWUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxZQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNwQyxDQUFDIn0=
|
package/dist/commonjs/types.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import './app/extend/application.js';
|
|
2
|
-
import './app/extend/context.js';
|
|
3
|
-
import type { SecurityConfig, SecurityHelperConfig } from './config/config.default.js';
|
|
4
|
-
export type * from './config/config.default.js';
|
|
5
|
-
declare module '@eggjs/core' {
|
|
6
|
-
interface EggAppConfig {
|
|
7
|
-
security: SecurityConfig;
|
|
8
|
-
helper: SecurityHelperConfig;
|
|
9
|
-
}
|
|
10
|
-
}
|
package/dist/commonjs/types.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
require("./app/extend/application.js");
|
|
4
|
-
require("./app/extend/context.js");
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBcUM7QUFDckMsbUNBQWlDIn0=
|
package/dist/esm/agent.d.ts
DELETED
package/dist/esm/agent.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { preprocessConfig } from './lib/utils.js';
|
|
2
|
-
export default class AgentBoot {
|
|
3
|
-
agent;
|
|
4
|
-
constructor(agent) {
|
|
5
|
-
this.agent = agent;
|
|
6
|
-
}
|
|
7
|
-
async configWillLoad() {
|
|
8
|
-
preprocessConfig(this.agent.config.security);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsTUFBTSxDQUFDLE9BQU8sT0FBTyxTQUFTO0lBQ1gsS0FBSyxDQUFDO0lBRXZCLFlBQVksS0FBYztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGIn0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { EggCore } from '@eggjs/core';
|
|
2
|
-
import { type HttpClientRequestURL, type HttpClientOptions, type HttpClientResponse } from '../../lib/extend/safe_curl.js';
|
|
3
|
-
export default class SecurityAgent extends EggCore {
|
|
4
|
-
safeCurl<T = any>(url: HttpClientRequestURL, options?: HttpClientOptions): Promise<HttpClientResponse<T>>;
|
|
5
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { EggCore } from '@eggjs/core';
|
|
2
|
-
import { safeCurlForApplication, } from '../../lib/extend/safe_curl.js';
|
|
3
|
-
export default class SecurityAgent extends EggCore {
|
|
4
|
-
async safeCurl(url, options) {
|
|
5
|
-
return await safeCurlForApplication(this, url, options);
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFDTCxzQkFBc0IsR0FJdkIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxNQUFNLENBQUMsT0FBTyxPQUFPLGFBQWMsU0FBUSxPQUFPO0lBQ2hELEtBQUssQ0FBQyxRQUFRLENBQ1osR0FBeUIsRUFBRSxPQUEyQjtRQUN0RCxPQUFPLE1BQU0sc0JBQXNCLENBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { EggCore } from '@eggjs/core';
|
|
2
|
-
import { type HttpClientRequestURL, type HttpClientOptions, type HttpClientResponse } from '../../lib/extend/safe_curl.js';
|
|
3
|
-
export default class SecurityApplication extends EggCore {
|
|
4
|
-
injectCsrf(html: string): string;
|
|
5
|
-
injectNonce(html: string): string;
|
|
6
|
-
injectHijackingDefense(html: string): string;
|
|
7
|
-
safeCurl<T = any>(url: HttpClientRequestURL, options?: HttpClientOptions): Promise<HttpClientResponse<T>>;
|
|
8
|
-
}
|
|
9
|
-
declare module '@eggjs/core' {
|
|
10
|
-
interface EggCore {
|
|
11
|
-
injectCsrf(html: string): string;
|
|
12
|
-
injectNonce(html: string): string;
|
|
13
|
-
injectHijackingDefense(html: string): string;
|
|
14
|
-
safeCurl<T = any>(url: HttpClientRequestURL, options?: HttpClientOptions): Promise<HttpClientResponse<T>>;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { EggCore } from '@eggjs/core';
|
|
2
|
-
import { safeCurlForApplication, } from '../../lib/extend/safe_curl.js';
|
|
3
|
-
const INPUT_CSRF = '\r\n<input type="hidden" name="_csrf" value="{{ctx.csrf}}" /></form>';
|
|
4
|
-
const INJECTION_DEFENSE = '<!--for injection--><!--</html>--><!--for injection-->';
|
|
5
|
-
export default class SecurityApplication extends EggCore {
|
|
6
|
-
injectCsrf(html) {
|
|
7
|
-
html = html.replace(/(<form.*?>)([\s\S]*?)<\/form>/gi, (_, $1, $2) => {
|
|
8
|
-
const match = $2;
|
|
9
|
-
if (match.indexOf('name="_csrf"') !== -1 || match.indexOf('name=\'_csrf\'') !== -1) {
|
|
10
|
-
return $1 + match + '</form>';
|
|
11
|
-
}
|
|
12
|
-
return $1 + match + INPUT_CSRF;
|
|
13
|
-
});
|
|
14
|
-
return html;
|
|
15
|
-
}
|
|
16
|
-
injectNonce(html) {
|
|
17
|
-
html = html.replace(/<script(.*?)>([\s\S]*?)<\/script[^>]*?>/gi, (_, $1, $2) => {
|
|
18
|
-
if (!$1.includes('nonce=')) {
|
|
19
|
-
$1 += ' nonce="{{ctx.nonce}}"';
|
|
20
|
-
}
|
|
21
|
-
return '<script' + $1 + '>' + $2 + '</script>';
|
|
22
|
-
});
|
|
23
|
-
return html;
|
|
24
|
-
}
|
|
25
|
-
injectHijackingDefense(html) {
|
|
26
|
-
return INJECTION_DEFENSE + html + INJECTION_DEFENSE;
|
|
27
|
-
}
|
|
28
|
-
async safeCurl(url, options) {
|
|
29
|
-
return await safeCurlForApplication(this, url, options);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFDTCxzQkFBc0IsR0FJdkIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxNQUFNLFVBQVUsR0FBRyxzRUFBc0UsQ0FBQztBQUMxRixNQUFNLGlCQUFpQixHQUFHLHdEQUF3RCxDQUFDO0FBRW5GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUJBQW9CLFNBQVEsT0FBTztJQUN0RCxVQUFVLENBQUMsSUFBWTtRQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDbkUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkYsT0FBTyxFQUFFLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsT0FBTyxFQUFFLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUM3RSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUMzQixFQUFFLElBQUksd0JBQXdCLENBQUM7WUFDakMsQ0FBQztZQUNELE9BQU8sU0FBUyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVk7UUFDakMsT0FBTyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQ1osR0FBeUIsRUFBRSxPQUEyQjtRQUN0RCxPQUFPLE1BQU0sc0JBQXNCLENBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { Context } from '@eggjs/core';
|
|
2
|
-
import type { HttpClientRequestURL, HttpClientOptions, HttpClientResponse } from '../../lib/extend/safe_curl.js';
|
|
3
|
-
import { SecurityConfig, SecurityHelperConfig } from '../../types.js';
|
|
4
|
-
declare const CSRF_SECRET: unique symbol;
|
|
5
|
-
declare const LOG_CSRF_NOTICE: unique symbol;
|
|
6
|
-
declare const INPUT_TOKEN: unique symbol;
|
|
7
|
-
declare const CSRF_REFERER_CHECK: unique symbol;
|
|
8
|
-
declare const CSRF_CTOKEN_CHECK: unique symbol;
|
|
9
|
-
export default class SecurityContext extends Context {
|
|
10
|
-
get securityOptions(): Partial<SecurityConfig>;
|
|
11
|
-
/**
|
|
12
|
-
* Check whether the specific `domain` is in / matches the whiteList or not.
|
|
13
|
-
* @param {string} domain The assigned domain.
|
|
14
|
-
* @param {Array<string>} [customWhiteList] The custom white list for domain.
|
|
15
|
-
* @return {boolean} If the domain is in / matches the whiteList, return true;
|
|
16
|
-
* otherwise false.
|
|
17
|
-
*/
|
|
18
|
-
isSafeDomain(domain: string, customWhiteList?: string[]): boolean;
|
|
19
|
-
get nonce(): string;
|
|
20
|
-
/**
|
|
21
|
-
* get csrf token, general use in template
|
|
22
|
-
* @return {String} csrf token
|
|
23
|
-
* @public
|
|
24
|
-
*/
|
|
25
|
-
get csrf(): string;
|
|
26
|
-
/**
|
|
27
|
-
* get csrf secret from session or cookie
|
|
28
|
-
* @return {String} csrf secret
|
|
29
|
-
* @private
|
|
30
|
-
*/
|
|
31
|
-
get [CSRF_SECRET](): string;
|
|
32
|
-
/**
|
|
33
|
-
* ensure csrf secret exists in session or cookie.
|
|
34
|
-
* @param {Boolean} [rotate] reset secret even if the secret exists
|
|
35
|
-
* @public
|
|
36
|
-
*/
|
|
37
|
-
ensureCsrfSecret(rotate?: boolean): void;
|
|
38
|
-
get [INPUT_TOKEN](): string;
|
|
39
|
-
/**
|
|
40
|
-
* rotate csrf secret exists in session or cookie.
|
|
41
|
-
* must rotate the secret when user login
|
|
42
|
-
* @public
|
|
43
|
-
*/
|
|
44
|
-
rotateCsrfSecret(): void;
|
|
45
|
-
/**
|
|
46
|
-
* assert csrf token/referer is present
|
|
47
|
-
* @public
|
|
48
|
-
*/
|
|
49
|
-
assertCsrf(): void;
|
|
50
|
-
[CSRF_CTOKEN_CHECK](): "missing csrf token" | "invalid csrf token" | undefined;
|
|
51
|
-
[CSRF_REFERER_CHECK](): "missing csrf referer or origin" | "invalid csrf referer or origin" | undefined;
|
|
52
|
-
[LOG_CSRF_NOTICE](msg: string): void;
|
|
53
|
-
safeCurl<T = any>(url: HttpClientRequestURL, options?: HttpClientOptions): Promise<HttpClientResponse<T>>;
|
|
54
|
-
unsafeRedirect(url: string, alt?: string): void;
|
|
55
|
-
}
|
|
56
|
-
declare module '@eggjs/core' {
|
|
57
|
-
interface Context {
|
|
58
|
-
get securityOptions(): Partial<SecurityConfig & SecurityHelperConfig>;
|
|
59
|
-
isSafeDomain(domain: string, customWhiteList?: string[]): boolean;
|
|
60
|
-
get nonce(): string;
|
|
61
|
-
get csrf(): string;
|
|
62
|
-
ensureCsrfSecret(rotate?: boolean): void;
|
|
63
|
-
rotateCsrfSecret(): void;
|
|
64
|
-
assertCsrf(): void;
|
|
65
|
-
safeCurl<T = any>(url: HttpClientRequestURL, options?: HttpClientOptions): Promise<HttpClientResponse<T>>;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
export {};
|