mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	refactor: add csrf protection to webinstall POST route
This commit is contained in:
		| @@ -2,6 +2,7 @@ | ||||
|  | ||||
| const winston = require('winston'); | ||||
| const express = require('express'); | ||||
| const session = require('express-session'); | ||||
| const bodyParser = require('body-parser'); | ||||
| const fs = require('fs'); | ||||
| const path = require('path'); | ||||
| @@ -13,7 +14,10 @@ const nconf = require('nconf'); | ||||
| const Benchpress = require('benchpressjs'); | ||||
| const { mkdirp } = require('mkdirp'); | ||||
| const { paths } = require('../src/constants'); | ||||
| const sass = require('../src/utils').getSass(); | ||||
| const utils = require('../src/utils'); | ||||
|  | ||||
| const sass = utils.getSass(); | ||||
| const { generateToken, csrfSynchronisedProtection } = require('../src/middleware/csrf'); | ||||
|  | ||||
| const app = express(); | ||||
| let server; | ||||
| @@ -73,6 +77,13 @@ web.install = async function (port) { | ||||
| 	app.use(bodyParser.urlencoded({ | ||||
| 		extended: true, | ||||
| 	})); | ||||
|  | ||||
| 	app.use(session({ | ||||
| 		secret: utils.generateUUID(), | ||||
| 		resave: false, | ||||
| 		saveUninitialized: false, | ||||
| 	})); | ||||
|  | ||||
| 	try { | ||||
| 		await Promise.all([ | ||||
| 			compileTemplate(), | ||||
| @@ -103,8 +114,8 @@ function launchExpress(port) { | ||||
| } | ||||
|  | ||||
| function setupRoutes() { | ||||
| 	app.get('/', welcome); | ||||
| 	app.post('/', install); | ||||
| 	app.get('/', csrfSynchronisedProtection, welcome); | ||||
| 	app.post('/', csrfSynchronisedProtection, install); | ||||
| 	app.get('/testdb', testDatabase); | ||||
| 	app.get('/ping', ping); | ||||
| 	app.get('/sping', ping); | ||||
| @@ -160,6 +171,7 @@ function welcome(req, res) { | ||||
| 		minimumPasswordStrength: defaults.minimumPasswordStrength, | ||||
| 		installing: installing, | ||||
| 		percentInstalled: installing ? ((Date.now() - timeStart) / totalTime * 100).toFixed(2) : 0, | ||||
| 		csrf_token: generateToken(req), | ||||
| 	}); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -35,6 +35,8 @@ | ||||
| 			You are just a few steps away from launching your own NodeBB forum! | ||||
| 		</p> | ||||
| 		<form id="install" action="/" method="post" autocomplete="off"> | ||||
| 			<input type="hidden" name="csrf_token" value="{csrf_token}" /> | ||||
|  | ||||
| 			{{{ if !skipGeneralSetup }}} | ||||
| 			<div class="general"> | ||||
| 				<p> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user