yakuza0 2.20.13 → 2.20.15-beta.1

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/nuxt/head.js CHANGED
@@ -28,6 +28,14 @@ var _config2 = _interopRequireDefault(_config);
28
28
 
29
29
  var _yakuza = require("yakuza1");
30
30
 
31
+ var _syncRequest = require("sync-request");
32
+
33
+ var _syncRequest2 = _interopRequireDefault(_syncRequest);
34
+
35
+ var _crypto = require("crypto");
36
+
37
+ var _csp = require("../utils/csp");
38
+
31
39
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
40
 
33
41
  exports.default = function (config) {
@@ -51,6 +59,14 @@ exports.default = function (config) {
51
59
  var basePath = _yakuza._.bothAddFix(config.appConf.server.basePath, "/");
52
60
 
53
61
  _yakuza._.forEach(head, function (v, key) {
62
+ // switch (key) {
63
+ // case "script":
64
+ // case "style":
65
+ //
66
+ // break;
67
+ // default:
68
+ // }
69
+
54
70
  if ((typeof v === "undefined" ? "undefined" : (0, _typeof3.default)(v)) === 'object') {
55
71
  v = _yakuza._.map(v, function (gv) {
56
72
  if (_yakuza._.startsWith(gv.src, '/')) {
@@ -59,6 +75,29 @@ exports.default = function (config) {
59
75
  if (_yakuza._.startsWith(gv.href, '/')) {
60
76
  gv.href = basePath + _yakuza._.trimStart(gv.href, "/");
61
77
  }
78
+
79
+ var iUrl = gv.src || gv.href;
80
+ if ((_config2.default.security.isStupid || _config2.default.server.sriSwitch) && iUrl && _yakuza._.startsWith(iUrl, 'http')) {
81
+ try {
82
+ if (!gv.integrity) {
83
+ var res = (0, _syncRequest2.default)('GET', iUrl, {
84
+ timeout: parseInt(_config2.default.server.sriTimeout, 10) || 5000,
85
+ headers: {
86
+ "Host": (0, _yakuza.jsUrl)('hostname', iUrl),
87
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36"
88
+ }
89
+ });
90
+ var iBody = res.getBody('utf8');
91
+ var hash = (0, _crypto.createHash)('sha384').update(iBody).digest('base64');
92
+ gv.integrity = "sha384-" + hash;
93
+ }
94
+
95
+ if (gv.integrity) {
96
+ gv.crossorigin = "anonymous";
97
+ }
98
+ } catch (e) {}
99
+ }
100
+
62
101
  return gv;
63
102
  });
64
103
  }
@@ -66,6 +105,27 @@ exports.default = function (config) {
66
105
  head[key] = v;
67
106
  });
68
107
 
108
+ if (_config2.default.server.cspSwitch && _config2.default.security.isStupid) {
109
+ var cspObj = (0, _csp.directives)();
110
+ var cspStr = '';
111
+ _yakuza._.forEach(cspObj, function (v, key) {
112
+ cspStr += key + " " + v.join(' ') + '; ';
113
+ });
114
+ cspStr = cspStr.substring(0, cspStr.length - 2);
115
+
116
+ var metaObj = {
117
+ 'http-equiv': 'Content-Security-Policy',
118
+ content: cspStr
119
+ };
120
+
121
+ console.log(head['meta'], (0, _typeof3.default)(head['meta']));
122
+ if ((0, _typeof3.default)(head['meta']) === 'object') {
123
+ head['meta'].push(metaObj);
124
+ } else {
125
+ head['meta'] = [metaObj];
126
+ }
127
+ }
128
+
69
129
  return head;
70
130
  };
71
131
 
@@ -10,29 +10,43 @@ var _config2 = _interopRequireDefault(_config);
10
10
 
11
11
  var _yakuza = require('yakuza1');
12
12
 
13
+ var _csp = require('../../utils/csp');
14
+
13
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
16
 
15
17
  exports.default = function (config) {
16
- var csp = _config2.default.server.csp;
17
18
  var cspSwitch = _config2.default.server.cspSwitch;
19
+ var cspObj = (0, _csp.directives)();
18
20
 
19
- var cspObj = {};
20
- _yakuza._.forEach(csp, function (v, key) {
21
- cspObj[_yakuza._.kebabCase(key)] = _yakuza._.compact(v.map(function (k) {
22
- if (_config2.default.security.stupid && _config2.default.server.cspStrict) {
23
- if (k === "*" || k === "data:" || k === "'unsafe-eval'" || k === "'unsafe-inline'") {
24
- return '';
25
- }
26
- }
27
-
28
- return k;
29
- }));
30
- });
31
-
32
- if (!_config2.default.security.stupid) {
33
- cspObj = _yakuza._.omit(cspObj, ['require-sri-for']);
21
+ if (_config2.default.security.stupid) {
22
+ cspSwitch = false;
34
23
  }
35
24
 
25
+ // const csp = yConf.server.csp;
26
+ //
27
+ // let cspObj = {};
28
+ // _.forEach(csp, (v, key) => {
29
+ // cspObj[_.kebabCase(key)] = _.compact(v.map(k => {
30
+ // if (yConf.server.cspStrict) {
31
+ // if (
32
+ // k === "*"
33
+ // || k.indexOf('*') !== -1
34
+ // || k === "data:"
35
+ // || k === "'unsafe-eval'"
36
+ // || k === "'unsafe-inline'"
37
+ // ) {
38
+ // return '';
39
+ // }
40
+ // }
41
+ //
42
+ // return k
43
+ // }))
44
+ // })
45
+ //
46
+ // if (!yConf.security.stupid) {
47
+ // cspObj = _.omit(cspObj, ['require-sri-for'])
48
+ // }
49
+
36
50
  return cspSwitch ? {
37
51
  enabled: true,
38
52
  policies: cspObj,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yakuza0",
3
- "version": "2.20.13",
3
+ "version": "2.20.15-beta.1",
4
4
  "description": "yakuza0 with nuxt",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -99,6 +99,7 @@
99
99
  "stylelint-webpack-plugin": "^3.1.0",
100
100
  "stylus": "^0.54.7",
101
101
  "stylus-loader": "^3.0.2",
102
+ "sync-request": "^6.1.0",
102
103
  "tcp-port-used": "^1.0.1",
103
104
  "ua-parser-js": "^0.7.20",
104
105
  "v8-compile-cache": "^2.0.2",
@@ -92,15 +92,16 @@ var _httpProxy = require('http-proxy');
92
92
 
93
93
  var _httpProxy2 = _interopRequireDefault(_httpProxy);
94
94
 
95
+ var _csp = require('../../utils/csp');
96
+
95
97
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
96
98
 
97
99
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
98
100
 
99
- // import {symmetry as gs, asymmetric as as} from 'yakuza1/lib/encrypt/general';
100
-
101
- // import paths from '../../config/paths';
102
-
103
- // import nocache from 'nocache';
101
+ // import {getCache, keys} from "../cache/conf";
102
+ // import csrfPri from "./csrfPri";
103
+ // import csrfPub from "yakuza1/lib/cert/csrfPub";
104
+ // import koaJwt from 'koa-jwt';
104
105
  var codeMessage = {
105
106
  200: '服务器成功返回请求的数据。',
106
107
  201: '新建或修改数据成功。',
@@ -118,10 +119,13 @@ var codeMessage = {
118
119
  503: '服务不可用,服务器暂时过载或维护。',
119
120
  504: '网关超时。'
120
121
  };
121
- // import {getCache, keys} from "../cache/conf";
122
- // import csrfPri from "./csrfPri";
123
- // import csrfPub from "yakuza1/lib/cert/csrfPub";
124
- // import koaJwt from 'koa-jwt';
122
+ // import helmet from 'helmet';
123
+
124
+ // import {symmetry as gs, asymmetric as as} from 'yakuza1/lib/encrypt/general';
125
+
126
+ // import paths from '../../config/paths';
127
+
128
+ // import nocache from 'nocache';
125
129
 
126
130
 
127
131
  var apiErr = function apiErr(options, ctx) {
@@ -168,7 +172,7 @@ exports.default = function () {
168
172
  var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(_ref2) {
169
173
  var app = _ref2.app,
170
174
  config = _ref2.config;
171
- var cspConnectSrcVerify, appCp, appCpApiV1, jwtVerC, omConf, cm;
175
+ var cspConnectSrcVerify, appCp, appCpApiV1, jwtVerC, omConf, cm, cspObj;
172
176
  return _regenerator2.default.wrap(function _callee11$(_context11) {
173
177
  while (1) {
174
178
  switch (_context11.prev = _context11.next) {
@@ -712,6 +716,11 @@ exports.default = function () {
712
716
  app.use((0, _koaHelmet2.default)());
713
717
 
714
718
  if (_config2.default.security.stupid) {
719
+ cspObj = (0, _csp.directives)();
720
+
721
+ app.use(_koaHelmet2.default.contentSecurityPolicy({
722
+ directives: cspObj
723
+ }));
715
724
  appCpApiV1(function () {
716
725
  var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(ctx, next) {
717
726
  var isNext, rHost, rOrigin, rReferer;
package/utils/csp.js ADDED
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.directives = undefined;
7
+
8
+ var _yakuza = require("yakuza1");
9
+
10
+ var _config = require("../config");
11
+
12
+ var _config2 = _interopRequireDefault(_config);
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ var directives = exports.directives = function directives() {
17
+ var csp = _config2.default.server.csp;
18
+ // const cspSwitch = yConf.server.cspSwitch;
19
+
20
+ var cspObj = {};
21
+ _yakuza._.forEach(csp, function (v, key) {
22
+ cspObj[_yakuza._.kebabCase(key)] = _yakuza._.compact(v.map(function (k) {
23
+ if (_config2.default.server.cspStrict) {
24
+ if (k === "*" || k.indexOf('*') !== -1 || k === "data:" || k === "'unsafe-eval'" || k === "'unsafe-inline'") {
25
+ return '';
26
+ }
27
+ }
28
+
29
+ return k;
30
+ }));
31
+ });
32
+
33
+ if (!_config2.default.security.stupid) {
34
+ cspObj = _yakuza._.omit(cspObj, ['require-sri-for']);
35
+ }
36
+
37
+ return cspObj;
38
+ };
@@ -289,6 +289,8 @@ var render = function () {
289
289
  cookieSameSite: 'Lax',
290
290
  cspSwitch: true,
291
291
  cspStrict: false,
292
+ sriSwitch: false,
293
+ sriTimeout: 2000,
292
294
  // ...mainConf.server,
293
295
  // ...ykConf.server,
294
296
  // csp,