security: Support proxy with rate limiting and include CI test coverage for nginx rev proxy (#4373)

Previously Etherpad would not pass the correct client IP address through and this caused the rate limiter to limit users behind reverse proxies.  This change allows Etherpad to use a client IP passed from a reverse proxy.

Note to devs: This header can be spoofed and spoofing the header could be used in an attack.  To mitigate additional *steps should be taken by Etherpad site admins IE doing rate limiting at proxy.*  This only really applies to large scale deployments but it's worth noting.
This commit is contained in:
webzwo0i 2020-10-01 11:39:01 +02:00 committed by GitHub
parent dbef630f44
commit ceb09ce99a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 120 additions and 3 deletions

View file

@ -0,0 +1,25 @@
try{
var etherpad = require("../../src/node_modules/etherpad-cli-client");
//ugly
} catch {
var etherpad = require("etherpad-cli-client")
}
var pad = etherpad.connect(process.argv[2]);
pad.on("connected", function(){
setTimeout(function(){
setInterval(function(){
pad.append("1");
}, process.argv[3]);
},500); // wait because CLIENT_READY message is included in ratelimit
setTimeout(function(){
process.exit(0);
},11000)
});
// in case of disconnect exit code 1
pad.on("message", function(message){
if(message.disconnect == 'rateLimited'){
process.exit(1);
}
})