mirror of
https://git.datalinker.icu/comfyanonymous/ComfyUI
synced 2026-08-14 06:03:29 +08:00
Balance security with functionality in model downloader
- Relax overly restrictive filename validation - Allow spaces, parentheses, brackets in model filenames (common in model names) - Keep essential security: no path traversal, no hidden files - Remove strict alphanumeric-only regex that was blocking valid files - Keep URL validation but remove overly restrictive host whitelist - Maintain protection against directory traversal attacks - Still validate file extensions and model types The downloader now works with real-world model filenames while remaining secure against path traversal and other attacks. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
b8a0408c65
commit
b6fd50c889
@ -23,11 +23,15 @@ class SimpleDownloader:
|
||||
task_id = str(uuid.uuid4())
|
||||
|
||||
# SECURITY: Validate and sanitize inputs to prevent path traversal
|
||||
# Sanitize model_type to prevent directory traversal
|
||||
model_type = os.path.basename(model_type).replace('..', '').replace('/', '').replace('\\', '')
|
||||
# Sanitize model_type - remove dangerous characters but keep underscores
|
||||
import re
|
||||
model_type = re.sub(r'[./\\]', '', model_type)
|
||||
model_type = model_type.replace('..', '')
|
||||
|
||||
# Sanitize filename to prevent path traversal
|
||||
filename = os.path.basename(filename).replace('..', '')
|
||||
# Sanitize filename - use os.path.basename and remove traversal attempts
|
||||
filename = os.path.basename(filename)
|
||||
if '..' in filename or filename.startswith('.'):
|
||||
raise ValueError("Invalid filename - no hidden files or path traversal")
|
||||
|
||||
# Validate filename has allowed extension
|
||||
allowed_extensions = ['.safetensors', '.ckpt', '.pt', '.pth', '.bin', '.sft']
|
||||
|
||||
@ -822,10 +822,11 @@ class PromptServer():
|
||||
if not filename:
|
||||
filename = "model.safetensors"
|
||||
|
||||
# SECURITY: Sanitize filename
|
||||
# SECURITY: Sanitize filename - allow more characters but still safe
|
||||
import os
|
||||
filename = os.path.basename(filename)
|
||||
if not re.match(r'^[a-zA-Z0-9_.-]+$', filename):
|
||||
# Block path traversal attempts but allow spaces, parens, brackets, etc
|
||||
if '..' in filename or '/' in filename or '\\' in filename or filename.startswith('.'):
|
||||
return web.json_response({"error": "Invalid filename format"}, status=400)
|
||||
|
||||
# Create download task (simple_downloader now has additional validation)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user