mail_guard/tool_validator.py
2026-04-24 14:25:23 +03:00

63 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# tool_validator.py - Плагин для контроля вызовов OpenClaw
import sys
import json
import re
def validate_tool_call(tool_name: str, tool_args: dict) -> dict:
"""Валидация каждого вызова инструмента перед выполнением."""
# Блокируем опасные вызовы чтения файлов
if tool_name == "read_file":
target_file = tool_args.get("file_path", "")
sensitive_files = [".env", ".ssh/id_rsa", ".npmrc", "IDENTITY.md"]
for sensitive in sensitive_files:
if sensitive in target_file:
return {
"blocked": True,
"reason": f"Доступ к файлу {target_file} запрещён политикой безопасности"
}
# Блокируем эксфильтрацию через web_fetch
if tool_name == "web_fetch":
url = tool_args.get("url", "")
blocklist_patterns = ["webhook.site", "hookbin.com", "ngrok.io"]
for pattern in blocklist_patterns:
if pattern in url:
return {
"blocked": True,
"reason": f"Исходящий запрос на {url} запрещён (риск эксфильтрации)"
}
# Блокируем выполнение произвольных команд в bash
if tool_name == "execute_command":
command = tool_args.get("command", "")
if re.search(r'\|\s*(base64|sh|bash)', command) or re.search(r'curl.*\|\s*bash', command):
return {
"blocked": True,
"reason": "Выполнение команд с передачей данных через пайп или bash запрещено"
}
return {"blocked": False}
def main():
if len(sys.argv) < 3:
print(json.dumps({"error": "Недостаточно аргументов"}))
sys.exit(1)
tool_name = sys.argv[1]
try:
tool_args = json.loads(sys.argv[2])
except json.JSONDecodeError:
print(json.dumps({"error": "Неверный формат JSON для аргументов"}))
sys.exit(1)
result = validate_tool_call(tool_name, tool_args)
print(json.dumps(result))
if __name__ == "__main__":
main()