| 
									
										
										
										
											2023-05-23 18:16:37 +02:00
										 |  |  | # SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | # lint: pylint | 
					
						
							|  |  |  | """.. _botdetection src:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-22 10:57:11 +02:00
										 |  |  | The :ref:`limiter <limiter src>` implements several methods to block bots: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | a. Analysis of the HTTP header in the request / can be easily bypassed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | b. Block and pass lists in which IPs are listed / difficult to maintain, since | 
					
						
							|  |  |  |    the IPs of bots are not all known and change over the time. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | c. Detection of bots based on the behavior of the requests and blocking and, if | 
					
						
							|  |  |  |    necessary, unblocking of the IPs via a dynamically changeable IP block list. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For dynamically changeable IP lists a Redis database is needed and for any kind | 
					
						
							|  |  |  | of IP list the determination of the IP of the client is essential.  The IP of | 
					
						
							|  |  |  | the client is determined via the X-Forwarded-For_ HTTP header | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. _X-Forwarded-For: | 
					
						
							|  |  |  |    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-29 19:46:37 +02:00
										 |  |  | X-Forwarded-For | 
					
						
							|  |  |  | =============== | 
					
						
							| 
									
										
										
										
											2023-05-23 18:16:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-29 19:46:37 +02:00
										 |  |  | .. attention:: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A correct setup of the HTTP request headers ``X-Forwarded-For`` and | 
					
						
							|  |  |  |    ``X-Real-IP`` is essential to be able to assign a request to an IP correctly: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    - `NGINX RequestHeader`_ | 
					
						
							|  |  |  |    - `Apache RequestHeader`_ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. _NGINX RequestHeader: | 
					
						
							|  |  |  |     https://docs.searxng.org/admin/installation-nginx.html#nginx-s-searxng-site | 
					
						
							|  |  |  | .. _Apache RequestHeader: | 
					
						
							|  |  |  |     https://docs.searxng.org/admin/installation-apache.html#apache-s-searxng-site | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. autofunction:: searx.botdetection.get_real_ip | 
					
						
							| 
									
										
										
										
											2023-05-23 18:16:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-28 18:58:31 +02:00
										 |  |  | from ._helpers import dump_request | 
					
						
							| 
									
										
										
										
											2023-05-29 19:46:37 +02:00
										 |  |  | from ._helpers import get_real_ip | 
					
						
							| 
									
										
										
										
											2023-06-01 15:41:48 +02:00
										 |  |  | from ._helpers import too_many_requests |