@@ -20,7 +20,14 @@ class ScanOptions(BaseModel):
2020 """
2121 扫描选项模型
2222 字段名与sqlmap的optiondict.py保持一致
23+ 支持所有 SQLMap 参数(215+),未显式定义的参数通过 extra='allow' 接收
2324 """
25+
26+ # 允许接收未定义的字段,支持前端传入的所有 SQLMap 参数
27+ model_config = {
28+ "extra" : "allow" ,
29+ }
30+
2431 # ==================== Detection 检测选项 ====================
2532 level : int = Field (default = 1 , ge = 1 , le = 5 , description = "检测级别 (1-5)" )
2633 risk : int = Field (default = 1 , ge = 1 , le = 3 , description = "风险级别 (1-3)" )
@@ -90,18 +97,28 @@ class ScanOptions(BaseModel):
9097 verbose : int = Field (default = 1 , ge = 0 , le = 6 , description = "详细级别 (0-6)" )
9198
9299 def to_dict (self ) -> Dict [str , Any ]:
93- """转换为字典,只包含非默认值"""
100+ """转换为字典,只包含非默认值(包含额外字段) """
94101 result = {}
95102 default_model = ScanOptions ()
96103 for field_name , field_value in self :
97104 default_value = getattr (default_model , field_name )
98105 if field_value != default_value and field_value is not None :
99106 result [field_name ] = field_value
107+
108+ # 添加额外字段(如 answers 等未在模型中定义的 SQLMap 参数)
109+ if hasattr (self , '__pydantic_extra__' ) and self .__pydantic_extra__ :
110+ result .update (self .__pydantic_extra__ )
111+
100112 return result
101113
102114 def to_full_dict (self ) -> Dict [str , Any ]:
103- """转换为完整字典"""
104- return self .model_dump ()
115+ """转换为完整字典(包含所有字段和额外字段)"""
116+ result = self .model_dump ()
117+ # model_dump() 在 extra='allow' 模式下会自动包含额外字段
118+ # 但为了确保兼容性,显式添加
119+ if hasattr (self , '__pydantic_extra__' ) and self .__pydantic_extra__ :
120+ result .update (self .__pydantic_extra__ )
121+ return result
105122
106123
107124class ScanPreset (BaseModel ):
0 commit comments