""" 安全测试模块 提供SQL注入、XSS、CSRF等安全防护功能。 """ import re import hashlib import secrets import time from typing import Any, Dict, List, Optional from dataclasses import dataclass, field from enum import Enum class ThreatLevel(Enum): """威胁等级""" LOW = "low" MEDIUM = "medium" HIGH = "high" CRITICAL = "critical" @dataclass class DetectionResult: """检测结果""" is_threat: bool threat_type: str level: ThreatLevel details: str = "" @dataclass class SQLInjectionResult: """SQL注入检测结果""" is_injection: bool = False level: ThreatLevel = ThreatLevel.LOW details: str = "" @property def is_threat(self) -> bool: return self.is_injection @property def threat_type(self) -> str: return "SQL_INJECTION" @dataclass class XSSResult: """XSS检测结果""" is_xss: bool = False level: ThreatLevel = ThreatLevel.LOW details: str = "" @property def is_threat(self) -> bool: return self.is_xss @property def threat_type(self) -> str: return "XSS" @dataclass class PasswordStrengthResult: """密码强度结果""" score: int strength: str suggestions: List[str] = field(default_factory=list) @dataclass class SecurityEvent: """安全事件""" timestamp: float event_type: str source_ip: str details: Dict[str, Any] @dataclass class SecurityReport: """安全扫描报告""" total_scanned: int threats: List[DetectionResult] scan_time: float class SQLInjectionDetector: """SQL注入检测器""" # SQL注入特征模式 PATTERNS = [ r"(\%27)|(\')|(\-\-)|(\%23)|(#)", # 单引号、注释 r"((\%3D)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3B)|(;))", # =后面跟引号或注释 r"\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))", # 'or r"((\%27)|(\'))union", # 'union r"exec(\s|\+)+(s|x)p\w+", # exec xp_ r"UNION\s+SELECT", # UNION SELECT r"INSERT\s+INTO", # INSERT INTO r"DELETE\s+FROM", # DELETE FROM r"DROP\s+TABLE", # DROP TABLE ] def __init__(self): self._compiled_patterns = [re.compile(p, re.IGNORECASE) for p in self.PATTERNS] def detect(self, input_str: str) -> SQLInjectionResult: """ 检测SQL注入 Args: input_str: 输入字符串 Returns: 检测结果 """ for pattern in self._compiled_patterns: if pattern.search(input_str): return SQLInjectionResult( is_injection=True, level=ThreatLevel.HIGH, details=f"匹配模式: {pattern.pattern}" ) return SQLInjectionResult(is_injection=False, level=ThreatLevel.LOW) class XSSDetector: """XSS检测器""" # XSS攻击特征模式 PATTERNS = [ r"]*>[\s\S]*?", #