Replaced helmet, cors & policy w/ local implem.
The used functionality of helmet, cors & referrer-policy has been defined in setupCors and setupHeaders.
This commit is contained in:
		
							
								
								
									
										6
									
								
								middleware/setupCORS.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								middleware/setupCORS.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| const openCORS = (req, res, next) => { | ||||
|   res.set("Access-Control-Allow-Origin", "*") | ||||
|   return next(); | ||||
| }; | ||||
|  | ||||
| module.exports = openCORS; | ||||
							
								
								
									
										37
									
								
								middleware/setupHeaders.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								middleware/setupHeaders.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| const camelToKebabCase = str => str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`); | ||||
|  | ||||
| const mapFeaturePolicyToString = (features) => { | ||||
|   return Object.entries(features).map(([key, value]) => { | ||||
|     key = camelToKebabCase(key) | ||||
|     value = value == "*" ? value : `'${ value }'` | ||||
|     return `${key} ${value}` | ||||
|   }).join("; ") | ||||
| } | ||||
|  | ||||
| const setupHeaders = (req, res, next) => { | ||||
|   res.set("Access-Control-Allow-Headers", "Content-Type") | ||||
|  | ||||
|   // Security | ||||
|   res.set("X-Content-Type-Options", "nosniff"); | ||||
|   res.set("X-XSS-Protection", "1; mode=block"); | ||||
|   res.set("X-Frame-Options", "SAMEORIGIN"); | ||||
|   res.set("X-DNS-Prefetch-Control", "off"); | ||||
|   res.set("X-Download-Options", "noopen"); | ||||
|   res.set("Strict-Transport-Security", "max-age=15552000; includeSubDomains") | ||||
|  | ||||
|   // Feature policy | ||||
|   const features = { | ||||
|     fullscreen: "*", | ||||
|     payment: "none", | ||||
|     microphone: "none", | ||||
|     camera: "self", | ||||
|     speaker: "*", | ||||
|     syncXhr: "self" | ||||
|   } | ||||
|   const featureString = mapFeaturePolicyToString(features); | ||||
|   res.set("Feature-Policy", featureString) | ||||
|  | ||||
|   return next(); | ||||
| } | ||||
|  | ||||
| module.exports = setupHeaders; | ||||
| @@ -18,16 +18,12 @@ | ||||
|     "canvas-confetti": "^1.2.0", | ||||
|     "chart.js": "^2.9.3", | ||||
|     "clean-webpack-plugin": "^3.0.0", | ||||
|     "compression": "^1.7.4", | ||||
|     "connect-mongo": "^3.2.0", | ||||
|     "cors": "^2.8.5", | ||||
|     "express": "^4.17.1", | ||||
|     "express-session": "^1.17.0", | ||||
|     "extract-text-webpack-plugin": "^3.0.2", | ||||
|     "feature-policy": "^0.4.0", | ||||
|     "helmet": "^3.21.2", | ||||
|     "moment": "^2.24.0", | ||||
|     "mongoose": "^5.8.7", | ||||
|     "mongoose": "^5.10.9", | ||||
|     "node-fetch": "^2.6.0", | ||||
|     "node-sass": "^4.13.0", | ||||
|     "node-schedule": "^1.3.2", | ||||
| @@ -35,7 +31,6 @@ | ||||
|     "passport-local": "^1.0.0", | ||||
|     "passport-local-mongoose": "^6.0.1", | ||||
|     "qrcode": "^1.4.4", | ||||
|     "referrer-policy": "^1.2.0", | ||||
|     "socket.io": "^2.3.0", | ||||
|     "socket.io-client": "^2.3.0", | ||||
|     "vue": "~2.6", | ||||
|   | ||||
							
								
								
									
										30
									
								
								server.js
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								server.js
									
									
									
									
									
								
							| @@ -19,32 +19,12 @@ const bodyParser = require("body-parser"); | ||||
|  | ||||
| const mongoose = require("mongoose"); | ||||
| const MongoStore = require("connect-mongo")(session); | ||||
| const cors = require("cors"); | ||||
|  | ||||
| const referrerPolicy = require("referrer-policy"); | ||||
| const helmet = require("helmet"); | ||||
| const featurePolicy = require("feature-policy"); | ||||
|  | ||||
| const compression = require("compression"); | ||||
| app.use(compression()); | ||||
|  | ||||
| app.use( | ||||
|   featurePolicy({ | ||||
|     features: { | ||||
|       fullscreen: ["*"], | ||||
|       //vibrate: ["'none'"], | ||||
|       payment: ["'none'"], | ||||
|       microphone: ["'none'"], | ||||
|       camera: ["'self'"], | ||||
|       speaker: ["*"], | ||||
|       syncXhr: ["'self'"] | ||||
|       //notifications: ["'self'"] | ||||
|     } | ||||
|   }) | ||||
| ); | ||||
| app.use(helmet()); | ||||
| app.use(helmet.frameguard({ action: "sameorigin" })); | ||||
| app.use(referrerPolicy({ policy: "origin" })); | ||||
| // middleware | ||||
| const setupCORS = require(path.join(__dirname, "/middleware/setupCORS")); | ||||
| const setupHeaders = require(path.join(__dirname, "/middleware/setupHeaders")); | ||||
| app.use(setupCORS) | ||||
| app.use(setupHeaders) | ||||
|  | ||||
| app.use(cors()); | ||||
| mongoose.promise = global.Promise; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user