Version of SearXNG, commit number if you are using on master branch and stipulate if you forked SearXNG
Leons instance: 2022.05.24-fddbc5ed (39077fc0)
ALso my instance: 2022.05.08-85c1c14f
How did you install SearXNG?
Using the scripts as well as with docker.
What happened?
The limiter plugin does not rate limit requests and uses the X-Forwarded-For header which could be easily set by a client request.
How To Reproduce
Make 15 /search requests in 20sec to trigger rate limiting.
Make another search request, which is going to get blocked with a HTTP 429 response.
Make another /search request which is going to get not blocked again.
Expected behavior
The IP should get blocked for a specific amount of time with a timeout value for example. So a offending host could get blocked for like 2 hours for example.
Screenshots & Logs
Additional context
Another problem is that the IP is read from a header. In a improper setup the IP could maybe not be in that header or a client could abuse this and set the header themselves. The IP should be gotten from a trusted source... (Maube the request lib has something to get the IP?)
Version of SearXNG, commit number if you are using on master branch and stipulate if you forked SearXNG
How did you install SearXNG?
Using the scripts as well as with docker.
What happened?
The limiter plugin does not rate limit requests and uses the
X-Forwarded-Forheader which could be easily set by a client request.How To Reproduce
Make 15
/searchrequests in 20sec to trigger rate limiting.Make another
searchrequest, which is going to get blocked with a HTTP 429 response.Make another
/searchrequest which is going to get not blocked again.Expected behavior
The IP should get blocked for a specific amount of time with a timeout value for example. So a offending host could get blocked for like 2 hours for example.
Screenshots & Logs
Additional context
Another problem is that the IP is read from a header. In a improper setup the IP could maybe not be in that header or a client could abuse this and set the header themselves. The IP should be gotten from a trusted source... (Maube the request lib has something to get the IP?)