feat: вкладка «Безопасность» — коды УБИ, автоподбор угроз (программа/ИИ), сравнение, новый UI
- угрозы ФСТЭК теперь с кодами: «УБИ.001 Угроза …» (парсинг кода из БДУ, 227 шт) - threat_rules.py — логика программы: по характеристикам объекта (тип ИС/АСУ/ИТКС, интернет да/нет, нарушитель внутр./внешн.) фильтрует перечень по ключевым словам - verify.py: suggest_threats_ai — ИИ предлагает актуальные угрозы по описанию объекта - вкладка перестроена: компактная 2-колоночная раскладка, панель действий сверху: «⬇️ Загрузить угрозы ФСТЭК» | «⚙️ Подобрать (программа)» | «🤖 Подобрать (ИИ)» | «⚖️ Сравнить» | «🤖 Проверить безопасность через ИИ» - окно выбора из словаря: 720x680 + поле поиска (фильтр по тексту, важно для 227 угроз) - сравнение программа↔ИИ: окно с двумя списками, совпавшие подсвечены зелёным
This commit is contained in:
@@ -474,6 +474,35 @@ def compare_company_values(old_data, new_data):
|
||||
return diffs
|
||||
|
||||
|
||||
def suggest_threats_ai(security_data, api_key, model='deepseek-chat', base_url=None):
|
||||
"""ИИ предлагает актуальные угрозы БИ для объекта КИИ по его характеристикам.
|
||||
|
||||
security_data — dict: name, description, object_type, sphere, architecture,
|
||||
attacker_category, has_internet (True/False), etc.
|
||||
Возвращает (список_угроз, ошибка).
|
||||
"""
|
||||
if not api_key:
|
||||
return None, "Не задан API-ключ ИИ (Файл → Настройки → API)"
|
||||
internet = 'да' if security_data.get('has_internet', True) else 'нет'
|
||||
system = (
|
||||
"Ты — эксперт ФСТЭК по безопасности критической информационной инфраструктуры "
|
||||
"(187-ФЗ, приказ ФСТЭК № 236). На основе характеристик объекта КИИ составь "
|
||||
"перечень АКТУАЛЬНЫХ угроз безопасности информации из БДУ ФСТЭК "
|
||||
"(перечень угроз УБИ.xxx). Верни ТОЛЬКО JSON: "
|
||||
'{"threats": ["УБИ.xxx Название угрозы", ...]} — от 8 до 15 угроз, '
|
||||
"без пояснений и комментариев."
|
||||
)
|
||||
user = json.dumps(security_data, ensure_ascii=False)
|
||||
js, err = _ai_json(api_key, model, base_url, system, user)
|
||||
if err:
|
||||
return None, err
|
||||
threats = js.get('threats') or []
|
||||
if isinstance(threats, str):
|
||||
threats = [threats]
|
||||
threats = [str(t).strip() for t in threats if str(t).strip()]
|
||||
return threats, None
|
||||
|
||||
|
||||
def check_security_ai(security_data, api_key, model='deepseek-chat', base_url=None):
|
||||
"""ИИ-проверка заполненной вкладки «Безопасность» объекта КИИ (236 приказ).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user