fix(deepseek): use proper URL parsing for azure endpoint detection

Replace substring check `"azure.com" in url` with `urlparse`-based
hostname validation to prevent bypass via crafted URLs (CWE-20).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
John Kennedy
2026-02-26 11:48:52 -08:00
parent e939c96792
commit 67b777f655
2 changed files with 6 additions and 1 deletions

View File

@@ -6,6 +6,7 @@ import json
from collections.abc import Callable, Iterator, Sequence
from json import JSONDecodeError
from typing import Any, Literal, TypeAlias, cast
from urllib.parse import urlparse
import openai
from langchain_core.callbacks import (
@@ -197,7 +198,8 @@ class ChatDeepSeek(BaseChatOpenAI):
@property
def _is_azure_endpoint(self) -> bool:
"""Check if the configured endpoint is an Azure deployment."""
return "azure.com" in (self.api_base or "").lower()
hostname = urlparse(self.api_base or "").hostname or ""
return hostname == "azure.com" or hostname.endswith(".azure.com")
@property
def _llm_type(self) -> str:

View File

@@ -348,6 +348,9 @@ class TestChatDeepSeekAzureToolChoice:
DEFAULT_API_BASE,
"https://api.openai.com/v1",
"https://custom-endpoint.com/api",
"https://evil-azure.com/v1", # hostname bypass attempt
"https://notazure.com.evil.com/", # subdomain bypass attempt
"https://example.com/azure.com", # path bypass attempt
]
for endpoint in non_azure_endpoints:
llm = ChatDeepSeek(