ExMCP.Security.Validation (ex_mcp v0.9.0)
View SourceHandles request and response validation, including transport layer security configurations.
This module is responsible for various validation tasks to ensure that incoming requests and security configurations meet the required policies.
Summary
Functions
Enforces HTTPS requirement for non-localhost URLs.
Validates certificate pinning configuration.
Validates cipher suite configuration.
Validates security configuration.
Validates that a server binding is localhost-only for security.
Validates mutual TLS configuration.
Validates origin header against allowed origins.
Validates an HTTP request for security compliance.
Validates that security configuration meets MCP specification requirements.
Validates TLS/SSL configuration.
Validates transport security configuration.
Types
@type security_config() :: %{ optional(:auth) => auth_method(), optional(:headers) => [{String.t(), String.t()}], optional(:validate_origin) => boolean(), optional(:allowed_origins) => [String.t()], optional(:cors) => map(), optional(:tls) => map() }
Security configuration map for transport-level security.
Supports bearer tokens, API keys, basic auth, OAuth 2.1, custom headers, origin validation, CORS, and TLS configuration.
Functions
@spec enforce_https_requirement(String.t()) :: :ok | {:error, :https_required}
Enforces HTTPS requirement for non-localhost URLs.
Validates certificate pinning configuration.
Validates cipher suite configuration.
@spec validate_config(security_config()) :: :ok | {:error, term()}
Validates security configuration.
@spec validate_localhost_binding(map()) :: :ok | {:error, :public_binding_requires_security}
Validates that a server binding is localhost-only for security.
Examples
iex> ExMCP.Security.Validation.validate_localhost_binding(%{binding: "127.0.0.1"})
:ok
iex> ExMCP.Security.Validation.validate_localhost_binding(%{binding: "localhost"})
:ok
iex> ExMCP.Security.Validation.validate_localhost_binding(%{binding: "0.0.0.0"})
{:error, :public_binding_requires_security}
Validates mutual TLS configuration.
Validates origin header against allowed origins.
Examples
iex> ExMCP.Security.Validation.validate_origin("https://example.com", ["https://example.com"])
:ok
iex> ExMCP.Security.Validation.validate_origin("https://evil.com", ["https://example.com"])
{:error, :origin_not_allowed}
@spec validate_request([{String.t(), String.t()}], security_config()) :: :ok | {:error, atom()}
Validates an HTTP request for security compliance.
This function implements comprehensive security validation including:
- Origin header validation (DNS rebinding protection)
- Required security headers validation
- HTTPS enforcement for non-localhost
Examples
headers = [{"origin", "https://example.com"}, {"host", "api.example.com"}]
config = %{validate_origin: true, allowed_origins: ["https://example.com"]}
:ok = ExMCP.Security.Validation.validate_request(headers, config)
@spec validate_security_requirements(security_config()) :: :ok | {:error, term()}
Validates that security configuration meets MCP specification requirements.
Validates TLS/SSL configuration.
Examples
config = %{
verify: :verify_peer,
versions: [:"tlsv1.2", :"tlsv1.3"],
ciphers: ["ECDHE-RSA-AES256-GCM-SHA384"]
}
:ok = ExMCP.Security.Validation.validate_tls_config(config)
Validates transport security configuration.