INNER CODE UNIT · Python
_is_loopback_host
slive777/OpenAver · web/app.py:505
def _is_loopback_host(host):
"""判斷 `host` 是否為本機(`/api/trigger-update` 三層護欄 CD-110b-5 用)。
與 `_LOOPBACK_HOSTS`(:204)的關係:`_LOOPBACK_HOSTS` 是 middleware 的**短路
名單**,只收兩個精確字面值,回答的是「要不要跳過讀 config」——這裡**不動它**。
本函式回答的是另一個問題:「這個 client/Origin host 是不是本機」,用
`ipaddress.is_loopback` 額外涵蓋 `127.0.0.0/8` 其餘位址、IPv4-mapped IPv6
(`::ffff:127.0.0.1`),並加收 `localhost` 字面(純位址比對會漏它)。兩者
判斷的集合都只可能來自本機,所以本函式是 `_LOOPBACK_HOSTS` 的**嚴格超集**,
超集不製造安全缺口;反過來若本函式比 `_LOOPBACK_HOSTS` 更窄,才會出現
「middleware 放行但端點誤拒」的桌面自鎖風險。
"""
if not host:
return False
if host == "localhost":
return True
try:
addr = ipaddress.ip_address(host)