diff --git a/spec/Middlewares.spec.js b/spec/Middlewares.spec.js index 5e1ec24d89..74273e2835 100644 --- a/spec/Middlewares.spec.js +++ b/spec/Middlewares.spec.js @@ -135,6 +135,22 @@ describe('middlewares', () => { }); }); + it('should not succeed and log if the ip does not belong to masterKeyIps list', async () => { + const logger = require('../lib/logger').logger; + spyOn(logger, 'error').and.callFake(() => {}); + AppCache.put(fakeReq.body._ApplicationId, { + masterKey: 'masterKey', + masterKeyIps: ['10.0.0.1'], + }); + fakeReq.ip = '127.0.0.1'; + fakeReq.headers['x-parse-master-key'] = 'masterKey'; + await new Promise(resolve => middlewares.handleParseHeaders(fakeReq, fakeRes, resolve)); + expect(fakeReq.auth.isMaster).toBe(false); + expect(logger.error).toHaveBeenCalledWith( + `Request using master key rejected as the request IP address '127.0.0.1' is not set in Parse Server option 'masterKeyIps'.` + ); + }); + it('should not succeed if the ip does not belong to masterKeyIps list', async () => { AppCache.put(fakeReq.body._ApplicationId, { masterKey: 'masterKey', diff --git a/src/middlewares.js b/src/middlewares.js index 42aad1cbbe..bd1dabc268 100644 --- a/src/middlewares.js +++ b/src/middlewares.js @@ -167,6 +167,10 @@ export function handleParseHeaders(req, res, next) { let isMaster = info.masterKey === req.config.masterKey; if (isMaster && !ipRangeCheck(clientIp, req.config.masterKeyIps || [])) { + const log = req.config?.loggerController || defaultLogger; + log.error( + `Request using master key rejected as the request IP address '${clientIp}' is not set in Parse Server option 'masterKeyIps'.` + ); isMaster = false; }