mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	rate_limit: Add comments documenting how each rate limit rule works.
This avoid the need for spelunking the code to figure out the details of how/when the rule is applied.
This commit is contained in:
		
				
					committed by
					
						
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							c7851d9a00
						
					
				
				
					commit
					f016ab4396
				
			@@ -199,31 +199,74 @@ SEND_LOGIN_EMAILS = True
 | 
			
		||||
EMBEDDED_BOTS_ENABLED = False
 | 
			
		||||
 | 
			
		||||
DEFAULT_RATE_LIMITING_RULES = {
 | 
			
		||||
    # Limits total number of API requests per unit time by each user.
 | 
			
		||||
    # Rate limiting general API access protects the server against
 | 
			
		||||
    # clients causing unreasonable server load.
 | 
			
		||||
    "api_by_user": [
 | 
			
		||||
        (60, 200),  # 200 requests max every minute
 | 
			
		||||
        # 200 requests per limit
 | 
			
		||||
        (60, 200),
 | 
			
		||||
    ],
 | 
			
		||||
    # Limits total number of unauthenticated API requests (primarily
 | 
			
		||||
    # used by the public access option). Since these are
 | 
			
		||||
    # unauthenticated requests, each IP address is a separate bucket.
 | 
			
		||||
    "api_by_ip": [
 | 
			
		||||
        (60, 100),
 | 
			
		||||
    ],
 | 
			
		||||
    # Limits total requests to the Mobile Push Notifications Service
 | 
			
		||||
    # by each individual Zulip server that is using the service. This
 | 
			
		||||
    # is a Zulip Cloud setting that has no effect on self-hosted Zulip
 | 
			
		||||
    # servers that are not hosting their own copy of the push
 | 
			
		||||
    # notifications service.
 | 
			
		||||
    "api_by_remote_server": [
 | 
			
		||||
        (60, 1000),
 | 
			
		||||
    ],
 | 
			
		||||
    # Limits how many authentication attempts with login+password can
 | 
			
		||||
    # be made to a single username. This applies to the authentication
 | 
			
		||||
    # backends such as LDAP or email+password where a login+password
 | 
			
		||||
    # gets submitted to the Zulip server. No limit is applied for
 | 
			
		||||
    # external authentication methods (like GitHub SSO), since with
 | 
			
		||||
    # those authentication backends, we only receive a username if
 | 
			
		||||
    # authentication is successful.
 | 
			
		||||
    "authenticate_by_username": [
 | 
			
		||||
        (1800, 5),  # 5 failed login attempts within 30 minutes
 | 
			
		||||
        # 5 failed login attempts within 30 minutes
 | 
			
		||||
        (1800, 5),
 | 
			
		||||
    ],
 | 
			
		||||
    # Limits how many requests a user can make to change their email
 | 
			
		||||
    # address. A low/strict limit is recommended here, since there is
 | 
			
		||||
    # not real use case for triggering several of these from a single
 | 
			
		||||
    # user account, and by definition, the emails are sent to an email
 | 
			
		||||
    # address that does not already have a relationship with Zulip, so
 | 
			
		||||
    # this feature can be abused to attack the server's spam
 | 
			
		||||
    # reputation. Applies in addition to sends_email_by_ip.
 | 
			
		||||
    "email_change_by_user": [
 | 
			
		||||
        (3600, 2),  # 2 per hour
 | 
			
		||||
        (86400, 5),  # 5 per day
 | 
			
		||||
        # 2 emails per hour, and up to 5 per day.
 | 
			
		||||
        (3600, 2),
 | 
			
		||||
        (86400, 5),
 | 
			
		||||
    ],
 | 
			
		||||
    # Limits how many requests to send password reset emails can be
 | 
			
		||||
    # made for a single email address. A low/strict limit is
 | 
			
		||||
    # desirable, since this feature could be used to spam users with
 | 
			
		||||
    # password reset emails, given their email address. Applies in
 | 
			
		||||
    # addition to sends_email_by_ip, below.
 | 
			
		||||
    "password_reset_form_by_email": [
 | 
			
		||||
        (3600, 2),  # 2 reset emails per hour
 | 
			
		||||
        (86400, 5),  # 5 per day
 | 
			
		||||
        # 2 emails per hour, and up to 5 per day.
 | 
			
		||||
        (3600, 2),
 | 
			
		||||
        (86400, 5),
 | 
			
		||||
    ],
 | 
			
		||||
    # This limit applies to all requests which directly trigger the
 | 
			
		||||
    # sending of an email, restricting the number per IP address. This
 | 
			
		||||
    # is a general anti-spam measure.
 | 
			
		||||
    "sends_email_by_ip": [
 | 
			
		||||
        (86400, 5),
 | 
			
		||||
    ],
 | 
			
		||||
    # Limits access to uploaded files, in web-public contexts, done by
 | 
			
		||||
    # unauthenticated users. Each file gets its own bucket, and every
 | 
			
		||||
    # access to the file by an unauthenticated user counts towards the
 | 
			
		||||
    # limit.  This is important to prevent abuse of Zulip's file
 | 
			
		||||
    # uploads feature for file distribution.
 | 
			
		||||
    "spectator_attachment_access_by_file": [
 | 
			
		||||
        (86400, 1000),  # 1000 per day per file
 | 
			
		||||
        # 1000 per day per file
 | 
			
		||||
        (86400, 1000),
 | 
			
		||||
    ],
 | 
			
		||||
}
 | 
			
		||||
# Rate limiting defaults can be individually overridden by adding
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user