|
11 | 11 | ScanStatus, |
12 | 12 | SqlmapScanResult, |
13 | 13 | ) |
| 14 | +from app.core.sqlmap_core import celery_task_add |
14 | 15 |
|
15 | 16 | SQLMAP_API = os.getenv("SQLMAP_API") |
16 | 17 | AUTH = (os.getenv("SQLMAP_USERNAME"), os.getenv("SQLMAP_PASSWORD")) # Basic Auth |
@@ -145,20 +146,39 @@ def poll_single_sqlmap_task(self, task_id: str): |
145 | 146 | ) |
146 | 147 | def sqlmap_scan_task(self, payload: dict): |
147 | 148 | session = SessionLocal() |
148 | | - r = requests.get(f"{SQLMAP_API}/task/new", auth=AUTH) |
149 | | - if not r.ok: |
150 | | - raise HTTPException(500, "sqlmap task 创建失败") |
151 | | - |
152 | | - taskid = r.json()["taskid"] |
| 149 | + try: |
| 150 | + # 1. 创建 SQLMap 任务 |
| 151 | + r = requests.get(f"{SQLMAP_API}/task/new", auth=AUTH, timeout=10) |
| 152 | + r.raise_for_status() |
| 153 | + sqlmap_task_id = r.json()["taskid"] |
| 154 | + |
| 155 | + # 2. 启动扫描 |
| 156 | + start = requests.post( |
| 157 | + f"{SQLMAP_API}/scan/{sqlmap_task_id}/start", |
| 158 | + json=payload, |
| 159 | + auth=AUTH, |
| 160 | + timeout=30, |
| 161 | + ) |
| 162 | + start.raise_for_status() |
| 163 | + |
| 164 | + # 3. 扫描启动成功后,调用 celery_task_add 写入 DB |
| 165 | + celery_task_add( |
| 166 | + session=session, |
| 167 | + task_id=self.request.id, # Celery 任务 ID |
| 168 | + scan_url=str(payload["url"]), # 转成 str,防止 HttpUrl 错误 |
| 169 | + status="RUNNING", |
| 170 | + scan_risk=payload.get("risk", 1), |
| 171 | + scan_level=payload.get("level", 1), |
| 172 | + ) |
153 | 173 |
|
154 | | - # 2. 启动扫描 |
155 | | - start = requests.post( |
156 | | - f"{SQLMAP_API}/scan/{taskid}/start", |
157 | | - json=payload, # json转换问题 |
158 | | - auth=AUTH, |
159 | | - ) |
| 174 | + return { |
| 175 | + "celery_task_id": self.request.id, |
| 176 | + "sqlmap_task_id": sqlmap_task_id, |
| 177 | + } |
160 | 178 |
|
161 | | - if not start.ok: |
162 | | - raise HTTPException(500, start.text) |
| 179 | + except Exception as e: |
| 180 | + session.rollback() |
| 181 | + raise e |
163 | 182 |
|
164 | | - return {"taskid": taskid} |
| 183 | + finally: |
| 184 | + session.close() |
0 commit comments