INNER CODE UNIT · Python
_is_loopback_origin
slive777/OpenAver · web/app.py:536
def _is_loopback_origin(origin):
"""`Origin` header 是否解析出 loopback hostname(判 host 不判 port,CD-110b-5)。
用 `urlparse` 取 `hostname`;`null`、malformed(`http://`、`not-a-url`)解析出的
`hostname` 為 `None`/空字串,一律 fail-closed 回 False(不得當成「沒有 Origin」
放行——「沒有 Origin」是呼叫端看 `origin is None` 另行判斷,不歸本函式管)。
`urlparse` 本身也可能拋 `ValueError`(實測:未閉合的 IPv6 字面值
`http://[::1` → `Invalid IPv6 URL`)。不接的話會變成未處理例外 → 500,
既非 fail-closed 的 403、也把「被擋下」與「伺服器壞了」混在一起。一律接住回 False。
"""
try:
hostname = urlparse(origin).hostname
except ValueError:
return False
return bool(hostname) and _is_loopback_host(hostname)