Browse Source

add warning in case authentication based on environment is selected and server is not listen to loopback addresses only

Peter Bieringer 11 months ago
parent
commit
358ae55540
1 changed files with 23 additions and 4 deletions
  1. 23 4
      radicale/auth/__init__.py

+ 23 - 4
radicale/auth/__init__.py

@@ -55,15 +55,34 @@ CACHE_LOGIN_TYPES: Sequence[str] = (
                                     "pam",
                                    )
 
+INSECURE_IF_NO_LOOPBACK_TYPES: Sequence[str] = (
+                                    "remote_user",
+                                    "http_x_remote_user",
+                                   )
+
 AUTH_SOCKET_FAMILY: Sequence[str] = ("AF_UNIX", "AF_INET", "AF_INET6")
 
 
 def load(configuration: "config.Configuration") -> "BaseAuth":
     """Load the authentication module chosen in configuration."""
-    if configuration.get("auth", "type") == "none":
-        logger.warning("No user authentication is selected: '[auth] type=none' (insecure)")
-    if configuration.get("auth", "type") == "denyall":
-        logger.warning("All access is blocked by: '[auth] type=denyall'")
+    _type = configuration.get("auth", "type")
+    if _type == "none":
+        logger.warning("No user authentication is selected: '[auth] type=none' (INSECURE)")
+    elif _type == "denyall":
+        logger.warning("All user authentication is blocked by: '[auth] type=denyall'")
+    elif _type in INSECURE_IF_NO_LOOPBACK_TYPES:
+        hosts: List[Tuple[str, int]] = configuration.get("server", "hosts")
+        localhost_only = True
+        address_lo = []
+        address = []
+        for address_port in hosts:
+            if address_port[0] in [ "localhost", "localhost6", "127.0.0.1", "::1" ]:
+                address_lo.append(utils.format_address(address_port))
+            else:
+                address.append(utils.format_address(address_port))
+                localhost_only = False
+        if localhost_only is False:
+            logger.warning("User authentication '[auth] type=%s' is selected but server is not only listen on loopback address (potentially INSECURE): %s", _type, " ".join(address))
     return utils.load_plugin(INTERNAL_TYPES, "auth", "Auth", BaseAuth,
                              configuration)