@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.
Files changed (252) hide show
  1. package/README.md +47 -67
  2. package/README.zh-CN.md +56 -68
  3. package/dist/agent.d.ts +10 -0
  4. package/dist/agent.js +15 -0
  5. package/dist/app/extend/agent.d.ts +14 -0
  6. package/dist/app/extend/agent.js +12 -0
  7. package/dist/app/extend/application.d.ts +20 -0
  8. package/dist/app/extend/application.js +32 -0
  9. package/dist/app/extend/context.d.ts +74 -0
  10. package/dist/app/extend/context.js +191 -0
  11. package/dist/app/extend/helper.d.ts +24 -0
  12. package/dist/app/extend/helper.js +7 -0
  13. package/dist/app/extend/response.d.ts +45 -0
  14. package/dist/app/extend/response.js +70 -0
  15. package/dist/app/middleware/securities.d.ts +8 -0
  16. package/dist/app/middleware/securities.js +39 -0
  17. package/dist/app.d.ts +10 -0
  18. package/dist/app.js +24 -0
  19. package/dist/config/config.default.d.ts +874 -0
  20. package/dist/config/config.default.js +170 -0
  21. package/dist/config/config.local.d.ts +6 -0
  22. package/dist/config/config.local.js +5 -0
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.js +3 -0
  25. package/dist/lib/extend/safe_curl.d.ts +20 -0
  26. package/dist/lib/extend/safe_curl.js +19 -0
  27. package/dist/lib/helper/cliFilter.d.ts +7 -0
  28. package/dist/lib/helper/cliFilter.js +18 -0
  29. package/dist/lib/helper/escape.d.ts +2 -0
  30. package/dist/lib/helper/escape.js +7 -0
  31. package/dist/lib/helper/escapeShellArg.d.ts +4 -0
  32. package/dist/lib/helper/escapeShellArg.js +7 -0
  33. package/dist/lib/helper/escapeShellCmd.d.ts +4 -0
  34. package/dist/lib/helper/escapeShellCmd.js +15 -0
  35. package/dist/lib/helper/index.d.ts +24 -0
  36. package/dist/lib/helper/index.js +25 -0
  37. package/dist/lib/helper/shtml.d.ts +6 -0
  38. package/dist/lib/helper/shtml.js +53 -0
  39. package/dist/lib/helper/sjs.d.ts +7 -0
  40. package/dist/lib/helper/sjs.js +36 -0
  41. package/dist/lib/helper/sjson.d.ts +4 -0
  42. package/dist/lib/helper/sjson.js +32 -0
  43. package/dist/lib/helper/spath.d.ts +7 -0
  44. package/dist/lib/helper/spath.js +16 -0
  45. package/dist/lib/helper/surl.d.ts +6 -0
  46. package/dist/lib/helper/surl.js +25 -0
  47. package/dist/lib/middlewares/csp.d.ts +7 -0
  48. package/dist/lib/middlewares/csp.js +46 -0
  49. package/dist/lib/middlewares/csrf.d.ts +7 -0
  50. package/dist/lib/middlewares/csrf.js +33 -0
  51. package/dist/lib/middlewares/dta.d.ts +6 -0
  52. package/dist/lib/middlewares/dta.js +13 -0
  53. package/dist/lib/middlewares/hsts.d.ts +7 -0
  54. package/dist/lib/middlewares/hsts.js +19 -0
  55. package/dist/lib/middlewares/index.d.ts +18 -0
  56. package/dist/lib/middlewares/index.js +27 -0
  57. package/dist/lib/middlewares/methodnoallow.d.ts +6 -0
  58. package/dist/lib/middlewares/methodnoallow.js +15 -0
  59. package/dist/lib/middlewares/noopen.d.ts +7 -0
  60. package/dist/lib/middlewares/noopen.js +17 -0
  61. package/dist/lib/middlewares/nosniff.d.ts +7 -0
  62. package/dist/lib/middlewares/nosniff.js +27 -0
  63. package/dist/lib/middlewares/referrerPolicy.d.ts +7 -0
  64. package/dist/lib/middlewares/referrerPolicy.js +31 -0
  65. package/dist/lib/middlewares/xframe.d.ts +7 -0
  66. package/dist/lib/middlewares/xframe.js +18 -0
  67. package/dist/lib/middlewares/xssProtection.d.ts +7 -0
  68. package/dist/lib/middlewares/xssProtection.js +17 -0
  69. package/dist/lib/utils.d.ts +24 -0
  70. package/dist/lib/utils.js +127 -0
  71. package/dist/types.d.ts +12 -0
  72. package/dist/types.js +5 -0
  73. package/package.json +74 -70
  74. package/dist/commonjs/agent.d.ts +0 -6
  75. package/dist/commonjs/agent.js +0 -14
  76. package/dist/commonjs/app/extend/agent.d.ts +0 -5
  77. package/dist/commonjs/app/extend/agent.js +0 -11
  78. package/dist/commonjs/app/extend/application.d.ts +0 -16
  79. package/dist/commonjs/app/extend/application.js +0 -35
  80. package/dist/commonjs/app/extend/context.d.ts +0 -68
  81. package/dist/commonjs/app/extend/context.js +0 -283
  82. package/dist/commonjs/app/extend/helper.d.ts +0 -12
  83. package/dist/commonjs/app/extend/helper.js +0 -10
  84. package/dist/commonjs/app/extend/response.d.ts +0 -41
  85. package/dist/commonjs/app/extend/response.js +0 -85
  86. package/dist/commonjs/app/middleware/securities.d.ts +0 -4
  87. package/dist/commonjs/app/middleware/securities.js +0 -55
  88. package/dist/commonjs/app.d.ts +0 -6
  89. package/dist/commonjs/app.js +0 -29
  90. package/dist/commonjs/config/config.default.d.ts +0 -871
  91. package/dist/commonjs/config/config.default.js +0 -357
  92. package/dist/commonjs/config/config.local.d.ts +0 -5
  93. package/dist/commonjs/config/config.local.js +0 -10
  94. package/dist/commonjs/index.d.ts +0 -1
  95. package/dist/commonjs/index.js +0 -14
  96. package/dist/commonjs/lib/extend/safe_curl.d.ts +0 -16
  97. package/dist/commonjs/lib/extend/safe_curl.js +0 -28
  98. package/dist/commonjs/lib/helper/cliFilter.d.ts +0 -4
  99. package/dist/commonjs/lib/helper/cliFilter.js +0 -20
  100. package/dist/commonjs/lib/helper/escape.d.ts +0 -2
  101. package/dist/commonjs/lib/helper/escape.js +0 -8
  102. package/dist/commonjs/lib/helper/escapeShellArg.d.ts +0 -1
  103. package/dist/commonjs/lib/helper/escapeShellArg.js +0 -8
  104. package/dist/commonjs/lib/helper/escapeShellCmd.d.ts +0 -1
  105. package/dist/commonjs/lib/helper/escapeShellCmd.js +0 -17
  106. package/dist/commonjs/lib/helper/index.d.ts +0 -21
  107. package/dist/commonjs/lib/helper/index.js +0 -26
  108. package/dist/commonjs/lib/helper/shtml.d.ts +0 -2
  109. package/dist/commonjs/lib/helper/shtml.js +0 -76
  110. package/dist/commonjs/lib/helper/sjs.d.ts +0 -4
  111. package/dist/commonjs/lib/helper/sjs.js +0 -52
  112. package/dist/commonjs/lib/helper/sjson.d.ts +0 -1
  113. package/dist/commonjs/lib/helper/sjson.js +0 -45
  114. package/dist/commonjs/lib/helper/spath.d.ts +0 -5
  115. package/dist/commonjs/lib/helper/spath.js +0 -28
  116. package/dist/commonjs/lib/helper/surl.d.ts +0 -2
  117. package/dist/commonjs/lib/helper/surl.js +0 -33
  118. package/dist/commonjs/lib/middlewares/csp.d.ts +0 -4
  119. package/dist/commonjs/lib/middlewares/csp.js +0 -68
  120. package/dist/commonjs/lib/middlewares/csrf.d.ts +0 -4
  121. package/dist/commonjs/lib/middlewares/csrf.js +0 -42
  122. package/dist/commonjs/lib/middlewares/dta.d.ts +0 -3
  123. package/dist/commonjs/lib/middlewares/dta.js +0 -14
  124. package/dist/commonjs/lib/middlewares/hsts.d.ts +0 -4
  125. package/dist/commonjs/lib/middlewares/hsts.js +0 -23
  126. package/dist/commonjs/lib/middlewares/index.d.ts +0 -13
  127. package/dist/commonjs/lib/middlewares/index.js +0 -28
  128. package/dist/commonjs/lib/middlewares/methodnoallow.d.ts +0 -3
  129. package/dist/commonjs/lib/middlewares/methodnoallow.js +0 -22
  130. package/dist/commonjs/lib/middlewares/noopen.d.ts +0 -4
  131. package/dist/commonjs/lib/middlewares/noopen.js +0 -17
  132. package/dist/commonjs/lib/middlewares/nosniff.d.ts +0 -4
  133. package/dist/commonjs/lib/middlewares/nosniff.js +0 -30
  134. package/dist/commonjs/lib/middlewares/referrerPolicy.d.ts +0 -4
  135. package/dist/commonjs/lib/middlewares/referrerPolicy.js +0 -36
  136. package/dist/commonjs/lib/middlewares/xframe.d.ts +0 -4
  137. package/dist/commonjs/lib/middlewares/xframe.js +0 -19
  138. package/dist/commonjs/lib/middlewares/xssProtection.d.ts +0 -4
  139. package/dist/commonjs/lib/middlewares/xssProtection.js +0 -16
  140. package/dist/commonjs/lib/utils.d.ts +0 -19
  141. package/dist/commonjs/lib/utils.js +0 -206
  142. package/dist/commonjs/package.json +0 -3
  143. package/dist/commonjs/types.d.ts +0 -10
  144. package/dist/commonjs/types.js +0 -5
  145. package/dist/esm/agent.d.ts +0 -6
  146. package/dist/esm/agent.js +0 -11
  147. package/dist/esm/app/extend/agent.d.ts +0 -5
  148. package/dist/esm/app/extend/agent.js +0 -8
  149. package/dist/esm/app/extend/application.d.ts +0 -16
  150. package/dist/esm/app/extend/application.js +0 -32
  151. package/dist/esm/app/extend/context.d.ts +0 -68
  152. package/dist/esm/app/extend/context.js +0 -244
  153. package/dist/esm/app/extend/helper.d.ts +0 -12
  154. package/dist/esm/app/extend/helper.js +0 -5
  155. package/dist/esm/app/extend/response.d.ts +0 -41
  156. package/dist/esm/app/extend/response.js +0 -82
  157. package/dist/esm/app/middleware/securities.d.ts +0 -4
  158. package/dist/esm/app/middleware/securities.js +0 -50
  159. package/dist/esm/app.d.ts +0 -6
  160. package/dist/esm/app.js +0 -26
  161. package/dist/esm/config/config.default.d.ts +0 -871
  162. package/dist/esm/config/config.default.js +0 -351
  163. package/dist/esm/config/config.local.d.ts +0 -5
  164. package/dist/esm/config/config.local.js +0 -8
  165. package/dist/esm/index.d.ts +0 -1
  166. package/dist/esm/index.js +0 -12
  167. package/dist/esm/lib/extend/safe_curl.d.ts +0 -16
  168. package/dist/esm/lib/extend/safe_curl.js +0 -25
  169. package/dist/esm/lib/helper/cliFilter.d.ts +0 -4
  170. package/dist/esm/lib/helper/cliFilter.js +0 -17
  171. package/dist/esm/lib/helper/escape.d.ts +0 -2
  172. package/dist/esm/lib/helper/escape.js +0 -3
  173. package/dist/esm/lib/helper/escapeShellArg.d.ts +0 -1
  174. package/dist/esm/lib/helper/escapeShellArg.js +0 -5
  175. package/dist/esm/lib/helper/escapeShellCmd.d.ts +0 -1
  176. package/dist/esm/lib/helper/escapeShellCmd.js +0 -14
  177. package/dist/esm/lib/helper/index.d.ts +0 -21
  178. package/dist/esm/lib/helper/index.js +0 -21
  179. package/dist/esm/lib/helper/shtml.d.ts +0 -2
  180. package/dist/esm/lib/helper/shtml.js +0 -70
  181. package/dist/esm/lib/helper/sjs.d.ts +0 -4
  182. package/dist/esm/lib/helper/sjs.js +0 -49
  183. package/dist/esm/lib/helper/sjson.d.ts +0 -1
  184. package/dist/esm/lib/helper/sjson.js +0 -39
  185. package/dist/esm/lib/helper/spath.d.ts +0 -5
  186. package/dist/esm/lib/helper/spath.js +0 -25
  187. package/dist/esm/lib/helper/surl.d.ts +0 -2
  188. package/dist/esm/lib/helper/surl.js +0 -30
  189. package/dist/esm/lib/middlewares/csp.d.ts +0 -4
  190. package/dist/esm/lib/middlewares/csp.js +0 -63
  191. package/dist/esm/lib/middlewares/csrf.d.ts +0 -4
  192. package/dist/esm/lib/middlewares/csrf.js +0 -37
  193. package/dist/esm/lib/middlewares/dta.d.ts +0 -3
  194. package/dist/esm/lib/middlewares/dta.js +0 -12
  195. package/dist/esm/lib/middlewares/hsts.d.ts +0 -4
  196. package/dist/esm/lib/middlewares/hsts.js +0 -21
  197. package/dist/esm/lib/middlewares/index.d.ts +0 -13
  198. package/dist/esm/lib/middlewares/index.js +0 -23
  199. package/dist/esm/lib/middlewares/methodnoallow.d.ts +0 -3
  200. package/dist/esm/lib/middlewares/methodnoallow.js +0 -20
  201. package/dist/esm/lib/middlewares/noopen.d.ts +0 -4
  202. package/dist/esm/lib/middlewares/noopen.js +0 -15
  203. package/dist/esm/lib/middlewares/nosniff.d.ts +0 -4
  204. package/dist/esm/lib/middlewares/nosniff.js +0 -28
  205. package/dist/esm/lib/middlewares/referrerPolicy.d.ts +0 -4
  206. package/dist/esm/lib/middlewares/referrerPolicy.js +0 -34
  207. package/dist/esm/lib/middlewares/xframe.d.ts +0 -4
  208. package/dist/esm/lib/middlewares/xframe.js +0 -17
  209. package/dist/esm/lib/middlewares/xssProtection.d.ts +0 -4
  210. package/dist/esm/lib/middlewares/xssProtection.js +0 -14
  211. package/dist/esm/lib/utils.d.ts +0 -19
  212. package/dist/esm/lib/utils.js +0 -194
  213. package/dist/esm/package.json +0 -3
  214. package/dist/esm/types.d.ts +0 -10
  215. package/dist/esm/types.js +0 -3
  216. package/dist/package.json +0 -4
  217. package/src/agent.ts +0 -14
  218. package/src/app/extend/agent.ts +0 -14
  219. package/src/app/extend/application.ts +0 -51
  220. package/src/app/extend/context.ts +0 -282
  221. package/src/app/extend/helper.ts +0 -5
  222. package/src/app/extend/response.ts +0 -95
  223. package/src/app/middleware/securities.ts +0 -63
  224. package/src/app.ts +0 -31
  225. package/src/config/config.default.ts +0 -379
  226. package/src/config/config.local.ts +0 -9
  227. package/src/index.ts +0 -12
  228. package/src/lib/extend/safe_curl.ts +0 -35
  229. package/src/lib/helper/cliFilter.ts +0 -20
  230. package/src/lib/helper/escape.ts +0 -3
  231. package/src/lib/helper/escapeShellArg.ts +0 -4
  232. package/src/lib/helper/escapeShellCmd.ts +0 -16
  233. package/src/lib/helper/index.ts +0 -21
  234. package/src/lib/helper/shtml.ts +0 -77
  235. package/src/lib/helper/sjs.ts +0 -57
  236. package/src/lib/helper/sjson.ts +0 -35
  237. package/src/lib/helper/spath.ts +0 -27
  238. package/src/lib/helper/surl.ts +0 -35
  239. package/src/lib/middlewares/csp.ts +0 -70
  240. package/src/lib/middlewares/csrf.ts +0 -44
  241. package/src/lib/middlewares/dta.ts +0 -13
  242. package/src/lib/middlewares/hsts.ts +0 -24
  243. package/src/lib/middlewares/index.ts +0 -23
  244. package/src/lib/middlewares/methodnoallow.ts +0 -23
  245. package/src/lib/middlewares/noopen.ts +0 -18
  246. package/src/lib/middlewares/nosniff.ts +0 -32
  247. package/src/lib/middlewares/referrerPolicy.ts +0 -39
  248. package/src/lib/middlewares/xframe.ts +0 -20
  249. package/src/lib/middlewares/xssProtection.ts +0 -17
  250. package/src/lib/utils.ts +0 -208
  251. package/src/types.ts +0 -16
  252. package/src/typings/index.d.ts +0 -4
@@ -1,49 +0,0 @@
1
- /**
2
- * Escape JavaScript to \xHH format
3
- */
4
- // escape \x00-\x7f
5
- // except 0-9,A-Z,a-z(\x2f-\x3a \x40-\x5b \x60-\x7b)
6
- // eslint-disable-next-line
7
- const MATCH_VULNERABLE_REGEXP = /[\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]/;
8
- // eslint-enable-next-line
9
- const BASIC_ALPHABETS = new Set('abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''));
10
- const map = {
11
- '\t': '\\t',
12
- '\n': '\\n',
13
- '\r': '\\r',
14
- };
15
- export default function escapeJavaScript(text) {
16
- const str = '' + text;
17
- const match = MATCH_VULNERABLE_REGEXP.exec(str);
18
- if (!match) {
19
- return str;
20
- }
21
- let res = '';
22
- let index = 0;
23
- let lastIndex = 0;
24
- let ascii;
25
- for (index = match.index; index < str.length; index++) {
26
- ascii = str[index];
27
- if (BASIC_ALPHABETS.has(ascii)) {
28
- continue;
29
- }
30
- else {
31
- if (map[ascii] === undefined) {
32
- const code = ascii.charCodeAt(0);
33
- if (code > 127) {
34
- continue;
35
- }
36
- else {
37
- map[ascii] = '\\x' + code.toString(16);
38
- }
39
- }
40
- }
41
- if (lastIndex !== index) {
42
- res += str.substring(lastIndex, index);
43
- }
44
- lastIndex = index + 1;
45
- res += map[ascii];
46
- }
47
- return lastIndex !== index ? res + str.substring(lastIndex, index) : res;
48
- }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2pzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9oZWxwZXIvc2pzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsbUJBQW1CO0FBQ25CLG9EQUFvRDtBQUVwRCwyQkFBMkI7QUFDM0IsTUFBTSx1QkFBdUIsR0FBRyx3Q0FBd0MsQ0FBQztBQUN6RSwwQkFBMEI7QUFFMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsZ0VBQWdFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFNUcsTUFBTSxHQUFHLEdBQTJCO0lBQ2xDLElBQUksRUFBRSxLQUFLO0lBQ1gsSUFBSSxFQUFFLEtBQUs7SUFDWCxJQUFJLEVBQUUsS0FBSztDQUNaLENBQUM7QUFFRixNQUFNLENBQUMsT0FBTyxVQUFVLGdCQUFnQixDQUFDLElBQVk7SUFDbkQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztJQUN0QixNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksS0FBSyxDQUFDO0lBRVYsS0FBSyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3RELEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsU0FBUztRQUNYLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUNmLFNBQVM7Z0JBQ1gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDeEIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN0QixHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzNFLENBQUMifQ==
@@ -1 +0,0 @@
1
- export default function jsonEscape(obj: any): string;
@@ -1,39 +0,0 @@
1
- import sjs from './sjs.js';
2
- /**
3
- * escape json
4
- * for output json in script
5
- */
6
- function sanitizeKey(obj) {
7
- if (typeof obj !== 'object')
8
- return obj;
9
- if (Array.isArray(obj))
10
- return obj;
11
- if (obj === null)
12
- return null;
13
- if (typeof obj === 'boolean')
14
- return obj;
15
- if (typeof obj === 'number')
16
- return obj;
17
- if (Buffer.isBuffer(obj))
18
- return obj.toString();
19
- for (const k in obj) {
20
- const escapedK = sjs(k);
21
- if (escapedK !== k) {
22
- obj[escapedK] = sanitizeKey(obj[k]);
23
- obj[k] = undefined;
24
- }
25
- else {
26
- obj[k] = sanitizeKey(obj[k]);
27
- }
28
- }
29
- return obj;
30
- }
31
- export default function jsonEscape(obj) {
32
- return JSON.stringify(sanitizeKey(obj), (_k, v) => {
33
- if (typeof v === 'string') {
34
- return sjs(v);
35
- }
36
- return v;
37
- });
38
- }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2pzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlci9zanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFFM0I7OztHQUdHO0FBRUgsU0FBUyxXQUFXLENBQUMsR0FBUTtJQUMzQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUN4QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDbkMsSUFBSSxHQUFHLEtBQUssSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzlCLElBQUksT0FBTyxHQUFHLEtBQUssU0FBUztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3pDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUVoRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sVUFBVSxVQUFVLENBQUMsR0FBUTtJQUN6QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
@@ -1,5 +0,0 @@
1
- /**
2
- * File Inclusion
3
- */
4
- import type { BaseContextClass } from '@eggjs/core';
5
- export default function pathFilter(this: BaseContextClass, path: string): string | null;
@@ -1,25 +0,0 @@
1
- /**
2
- * File Inclusion
3
- */
4
- export default function pathFilter(path) {
5
- if (typeof path !== 'string')
6
- return path;
7
- const pathSource = path;
8
- while (path.indexOf('%') !== -1) {
9
- try {
10
- path = decodeURIComponent(path);
11
- }
12
- catch (e) {
13
- if (process.env.NODE_ENV !== 'production') {
14
- // Not a PROD env, logging with a warning.
15
- this.ctx.coreLogger.warn('[@eggjs/security/lib/helper/spath] : decode file path %j failed.', path);
16
- }
17
- break;
18
- }
19
- }
20
- if (path.indexOf('..') !== -1 || path[0] === '/') {
21
- return null;
22
- }
23
- return pathSource;
24
- }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlci9zcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUlILE1BQU0sQ0FBQyxPQUFPLFVBQVUsVUFBVSxDQUF5QixJQUFZO0lBQ3JFLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztJQUV4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUM7WUFDSCxJQUFJLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUMxQywwQ0FBMEM7Z0JBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyRyxDQUFDO1lBQ0QsTUFBTTtRQUNSLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIn0=
@@ -1,2 +0,0 @@
1
- import type { BaseContextClass } from '@eggjs/core';
2
- export default function surl(this: BaseContextClass, val: string): string;
@@ -1,30 +0,0 @@
1
- const escapeMap = {
2
- '"': '&quot;',
3
- '<': '&lt;',
4
- '>': '&gt;',
5
- '\'': '&#x27;',
6
- };
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
- });
29
- }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VybC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvaGVscGVyL3N1cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxTQUFTLEdBQTJCO0lBQ3hDLEdBQUcsRUFBRSxRQUFRO0lBQ2IsR0FBRyxFQUFFLE1BQU07SUFDWCxHQUFHLEVBQUUsTUFBTTtJQUNYLElBQUksRUFBRSxRQUFRO0NBQ2YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxPQUFPLFVBQVUsSUFBSSxDQUF5QixHQUFXO0lBQzlELDhEQUE4RDtJQUM5RCxpQ0FBaUM7SUFDakMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXVCLENBQUM7SUFFOUUsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCw2QkFBNkI7SUFDN0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVELElBQUksUUFBUSxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0RBQWdEO29CQUN2RSxpRUFBaUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
@@ -1,4 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- import type { SecurityConfig } from '../../types.js';
3
- declare const _default: (options: SecurityConfig["csp"]) => (ctx: Context, next: Next) => Promise<void>;
4
- export default _default;
@@ -1,63 +0,0 @@
1
- import extend from 'extend';
2
- import { checkIfIgnore } from '../utils.js';
3
- const HEADER = [
4
- 'x-content-security-policy',
5
- 'content-security-policy',
6
- ];
7
- const REPORT_ONLY_HEADER = [
8
- 'x-content-security-policy-report-only',
9
- 'content-security-policy-report-only',
10
- ];
11
- // Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
12
- const MSIE_REGEXP = / MSIE /i;
13
- export default (options) => {
14
- return async function csp(ctx, next) {
15
- await next();
16
- const opts = {
17
- ...options,
18
- ...ctx.securityOptions.csp,
19
- };
20
- if (checkIfIgnore(opts, ctx))
21
- return;
22
- let finalHeader;
23
- const matchedOption = extend(true, {}, opts.policy);
24
- const bufArray = [];
25
- const headers = opts.reportOnly ? REPORT_ONLY_HEADER : HEADER;
26
- if (opts.supportIE && MSIE_REGEXP.test(ctx.get('user-agent'))) {
27
- finalHeader = headers[0];
28
- }
29
- else {
30
- finalHeader = headers[1];
31
- }
32
- for (const key in matchedOption) {
33
- const value = matchedOption[key];
34
- // Other arrays are splitted into strings EXCEPT `sandbox`
35
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/sandbox
36
- if (key === 'sandbox' && value === true) {
37
- bufArray.push(key);
38
- }
39
- else {
40
- let values = (Array.isArray(value) ? value : [value]);
41
- if (key === 'script-src') {
42
- const hasNonce = values.some(function (val) {
43
- return val.indexOf('nonce-') !== -1;
44
- });
45
- if (!hasNonce) {
46
- values.push('\'nonce-' + ctx.nonce + '\'');
47
- }
48
- }
49
- values = values.map(function (d) {
50
- if (d.startsWith('.')) {
51
- d = '*' + d;
52
- }
53
- return d;
54
- });
55
- bufArray.push(key + ' ' + values.join(' '));
56
- }
57
- }
58
- const headerString = bufArray.join(';');
59
- ctx.set(finalHeader, headerString);
60
- ctx.set('x-csp-nonce', ctx.nonce);
61
- };
62
- };
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9taWRkbGV3YXJlcy9jc3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHNUMsTUFBTSxNQUFNLEdBQUc7SUFDYiwyQkFBMkI7SUFDM0IseUJBQXlCO0NBQzFCLENBQUM7QUFDRixNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLHVDQUF1QztJQUN2QyxxQ0FBcUM7Q0FDdEMsQ0FBQztBQUVGLHFEQUFxRDtBQUNyRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFFOUIsZUFBZSxDQUFDLE9BQThCLEVBQUUsRUFBRTtJQUNoRCxPQUFPLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBWSxFQUFFLElBQVU7UUFDaEQsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUViLE1BQU0sSUFBSSxHQUFHO1lBQ1gsR0FBRyxPQUFPO1lBQ1YsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUc7U0FDM0IsQ0FBQztRQUNGLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXJDLElBQUksV0FBVyxDQUFDO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM5RCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5RCxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsMERBQTBEO1lBQzFELDRGQUE0RjtZQUM1RixJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN4QyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxLQUFLLENBQUUsQ0FBYSxDQUFDO2dCQUNwRSxJQUFJLEdBQUcsS0FBSyxZQUFZLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFTLEdBQUc7d0JBQ3ZDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDdEMsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQzdDLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFTLENBQUM7b0JBQzVCLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUN0QixDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztvQkFDZCxDQUFDO29CQUNELE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFDO2dCQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25DLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
@@ -1,4 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- import type { SecurityConfig } from '../../types.js';
3
- declare const _default: (options: SecurityConfig["csrf"]) => (ctx: Context, next: Next) => Promise<void>;
4
- export default _default;
@@ -1,37 +0,0 @@
1
- import { debuglog } from 'node:util';
2
- import typeis from 'type-is';
3
- import { checkIfIgnore } from '../utils.js';
4
- const debug = debuglog('@eggjs/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
- };
36
- };
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NyZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMvY3NyZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJDLE9BQU8sTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBRS9ELGVBQWUsQ0FBQyxPQUErQixFQUFFLEVBQUU7SUFDakQsT0FBTyxTQUFTLElBQUksQ0FBQyxHQUFZLEVBQUUsSUFBVTtRQUMzQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RELEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUM5QixLQUFLLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
@@ -1,3 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- declare const _default: () => (ctx: Context, next: Next) => Promise<void>;
3
- export default _default;
@@ -1,12 +0,0 @@
1
- import { isSafePath } from '../utils.js';
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
- };
11
- };
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9taWRkbGV3YXJlcy9kdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV6QywyREFBMkQ7QUFDM0QsZUFBZSxHQUFHLEVBQUU7SUFDbEIsT0FBTyxTQUFTLEdBQUcsQ0FBQyxHQUFZLEVBQUUsSUFBVTtRQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDO1FBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
@@ -1,4 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- import type { SecurityConfig } from '../../types.js';
3
- declare const _default: (options: SecurityConfig["hsts"]) => (ctx: Context, next: Next) => Promise<void>;
4
- export default _default;
@@ -1,21 +0,0 @@
1
- import { checkIfIgnore } from '../utils.js';
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 += '; includeSubdomains';
17
- }
18
- ctx.set('strict-transport-security', val);
19
- };
20
- };
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMvaHN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLHVDQUF1QztBQUN2QyxlQUFlLENBQUMsT0FBK0IsRUFBRSxFQUFFO0lBQ2pELE9BQU8sS0FBSyxVQUFVLElBQUksQ0FBQyxHQUFZLEVBQUUsSUFBVTtRQUNqRCxNQUFNLElBQUksRUFBRSxDQUFDO1FBRWIsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLE9BQU87WUFDVixHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSTtTQUM1QixDQUFDO1FBQ0YsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFckMsSUFBSSxHQUFHLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbkMsd0NBQXdDO1FBQ3hDLGdFQUFnRTtRQUNoRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQztRQUMvQixDQUFDO1FBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
@@ -1,13 +0,0 @@
1
- declare const _default: {
2
- csp: (options: import("../../types.js").SecurityConfig["csp"]) => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
3
- csrf: (options: import("../../types.js").SecurityConfig["csrf"]) => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
4
- dta: () => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
5
- hsts: (options: import("../../types.js").SecurityConfig["hsts"]) => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
6
- methodnoallow: () => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
7
- noopen: (options: import("../../types.js").SecurityConfig["noopen"]) => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
8
- nosniff: (options: import("../../types.js").SecurityConfig["nosniff"]) => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
9
- referrerPolicy: (options: import("../../types.js").SecurityConfig["referrerPolicy"]) => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
10
- xframe: (options: import("../../types.js").SecurityConfig["xframe"]) => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
11
- xssProtection: (options: import("../../types.js").SecurityConfig["xssProtection"]) => (ctx: import("@eggjs/core").Context, next: import("egg").Next) => Promise<void>;
12
- };
13
- export default _default;
@@ -1,23 +0,0 @@
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,
22
- };
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21pZGRsZXdhcmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUMzQixPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBQzNCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sY0FBYyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUUvQyxlQUFlO0lBQ2IsR0FBRztJQUNILElBQUk7SUFDSixHQUFHO0lBQ0gsSUFBSTtJQUNKLGFBQWE7SUFDYixNQUFNO0lBQ04sT0FBTztJQUNQLGNBQWM7SUFDZCxNQUFNO0lBQ04sYUFBYTtDQUNkLENBQUMifQ==
@@ -1,3 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- declare const _default: () => (ctx: Context, next: Next) => Promise<void>;
3
- export default _default;
@@ -1,20 +0,0 @@
1
- import { METHODS } from 'node:http';
2
- const METHODS_NOT_ALLOWED = ['TRACE', 'TRACK'];
3
- const safeHttpMethodsMap = {};
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
- };
19
- };
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0aG9kbm9hbGxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMvbWV0aG9kbm9hbGxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3BDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBRSxPQUFPLEVBQUUsT0FBTyxDQUFFLENBQUM7QUFDakQsTUFBTSxrQkFBa0IsR0FBNEIsRUFBRSxDQUFDO0FBRXZELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7SUFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNsRCxDQUFDO0FBQ0gsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxtREFBbUQ7QUFDbkQsZUFBZSxHQUFHLEVBQUU7SUFDbEIsT0FBTyxTQUFTLFFBQVEsQ0FBQyxHQUFZLEVBQUUsSUFBVTtRQUMvQywyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -1,4 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- import type { SecurityConfig } from '../../types.js';
3
- declare const _default: (options: SecurityConfig["noopen"]) => (ctx: Context, next: Next) => Promise<void>;
4
- export default _default;
@@ -1,15 +0,0 @@
1
- import { checkIfIgnore } from '../utils.js';
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
- };
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcGVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9taWRkbGV3YXJlcy9ub29wZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc1Qyx5R0FBeUc7QUFDekcsZUFBZSxDQUFDLE9BQWlDLEVBQUUsRUFBRTtJQUNuRCxPQUFPLEtBQUssVUFBVSxNQUFNLENBQUMsR0FBWSxFQUFFLElBQVU7UUFDbkQsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUViLE1BQU0sSUFBSSxHQUFHO1lBQ1gsR0FBRyxPQUFPO1lBQ1YsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU07U0FDOUIsQ0FBQztRQUNGLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPO1FBRXJDLEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -1,4 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- import type { SecurityConfig } from '../../types.js';
3
- declare const _default: (options: SecurityConfig["nosniff"]) => (ctx: Context, next: Next) => Promise<void>;
4
- export default _default;
@@ -1,28 +0,0 @@
1
- import { checkIfIgnore } from '../utils.js';
2
- // status codes for redirects
3
- // @see https://github.com/jshttp/statuses/blob/master/index.js#L33
4
- const RedirectStatus = {
5
- 300: true,
6
- 301: true,
7
- 302: true,
8
- 303: true,
9
- 305: true,
10
- 307: true,
11
- 308: true,
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
- };
27
- };
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9zbmlmZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMvbm9zbmlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLDZCQUE2QjtBQUM3QixtRUFBbUU7QUFDbkUsTUFBTSxjQUFjLEdBQTRCO0lBQzlDLEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0NBQ1YsQ0FBQztBQUVGLGVBQWUsQ0FBQyxPQUFrQyxFQUFFLEVBQUU7SUFDcEQsT0FBTyxLQUFLLFVBQVUsT0FBTyxDQUFDLEdBQVksRUFBRSxJQUFVO1FBQ3BELE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFYiwyQkFBMkI7UUFDM0IsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFFdkMsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLE9BQU87WUFDVixHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTztTQUMvQixDQUFDO1FBQ0YsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFckMsR0FBRyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
@@ -1,4 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- import type { SecurityConfig } from '../../types.js';
3
- declare const _default: (options: SecurityConfig["referrerPolicy"]) => (ctx: Context, next: Next) => Promise<void>;
4
- export default _default;
@@ -1,34 +0,0 @@
1
- import { checkIfIgnore } from '../utils.js';
2
- // https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy
3
- 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
- '',
13
- ];
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
- };
33
- };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJyZXJQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21pZGRsZXdhcmVzL3JlZmVycmVyUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHNUMsNEVBQTRFO0FBQzVFLE1BQU0scUJBQXFCLEdBQUc7SUFDNUIsYUFBYTtJQUNiLDRCQUE0QjtJQUM1QixRQUFRO0lBQ1IsMEJBQTBCO0lBQzFCLGFBQWE7SUFDYixlQUFlO0lBQ2YsaUNBQWlDO0lBQ2pDLFlBQVk7SUFDWixFQUFFO0NBQ0gsQ0FBQztBQUVGLGVBQWUsQ0FBQyxPQUF5QyxFQUFFLEVBQUU7SUFDM0QsT0FBTyxLQUFLLFVBQVUsY0FBYyxDQUFDLEdBQVksRUFBRSxJQUFVO1FBQzNELE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFYixNQUFNLElBQUksR0FBRztZQUNYLEdBQUcsT0FBTztZQUNWLGlEQUFpRDtZQUNqRCwwQkFBMEI7WUFDMUIsdUlBQXVJO1lBQ3ZJLEdBQUksR0FBRyxDQUFDLGVBQXVCLENBQUMsYUFBYTtZQUM3QyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsY0FBYztTQUN0QyxDQUFDO1FBQ0YsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxHQUFHLHFCQUFxQixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -1,4 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- import type { SecurityConfig } from '../../types.js';
3
- declare const _default: (options: SecurityConfig["xframe"]) => (ctx: Context, next: Next) => Promise<void>;
4
- export default _default;
@@ -1,17 +0,0 @@
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
- };
16
- };
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGZyYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9taWRkbGV3YXJlcy94ZnJhbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc1QyxlQUFlLENBQUMsT0FBaUMsRUFBRSxFQUFFO0lBQ25ELE9BQU8sS0FBSyxVQUFVLE1BQU0sQ0FBQyxHQUFZLEVBQUUsSUFBVTtRQUNuRCxNQUFNLElBQUksRUFBRSxDQUFDO1FBRWIsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLE9BQU87WUFDVixHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTTtTQUM5QixDQUFDO1FBQ0YsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFckMsK0JBQStCO1FBQy9CLHNJQUFzSTtRQUN0SSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQztRQUN6QyxHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
@@ -1,4 +0,0 @@
1
- import type { Context, Next } from '@eggjs/core';
2
- import type { SecurityConfig } from '../../types.js';
3
- declare const _default: (options: SecurityConfig["xssProtection"]) => (ctx: Context, next: Next) => Promise<void>;
4
- export default _default;
@@ -1,14 +0,0 @@
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
- };
13
- };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHNzUHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZXMveHNzUHJvdGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLGVBQWUsQ0FBQyxPQUF3QyxFQUFFLEVBQUU7SUFDMUQsT0FBTyxLQUFLLFVBQVUsYUFBYSxDQUFDLEdBQVksRUFBRSxJQUFVO1FBQzFELE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFYixNQUFNLElBQUksR0FBRztZQUNYLEdBQUcsT0FBTztZQUNWLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxhQUFhO1NBQ3JDLENBQUM7UUFDRixJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUVyQyxHQUFHLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
@@ -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;