{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/docs\/contracts\/db-access-security-protocol_v1.0.yaml",
"content": "# =============================================================================\n# DATABASE ACCESS SECURITY PROTOCOL\n# =============================================================================\n# Mehrstufiges Sicherheitsprotokoll gegen direkte DB-Zugriffe\n# Version: 1.0.0\n# Erstellt: 2025-12-20\n# Anlass: Sicherheitsverstoß - direkter mysql-Befehl mit Passwort im Klartext\n# =============================================================================\n\nmeta:\n document_type: security_protocol\n normative: true\n binding: mandatory\n severity: critical\n created: 2025-12-20\n author: claude-code\n\nidentity:\n name: db_access_security_protocol\n version: 1.0.0\n status: active\n\n# =============================================================================\n# PROBLEMDEFINITION\n# =============================================================================\nproblem:\n incident: \"Direkter mysql-Befehl mit Passwort im Klartext ausgeführt\"\n date: 2025-12-20\n consequences:\n - Passwort im Konversationsverlauf sichtbar\n - Potentielles Sicherheitsrisiko\n - Verstoß gegen claude.md Regeln\n\n# =============================================================================\n# STUFE 1: PRÄVENTION - Hook-basierte Blockierung\n# =============================================================================\nprevention:\n level: 1\n name: \"PreToolUse Hook - DB-Befehl-Blockierung\"\n\n implementation:\n script: \"\/var\/www\/tools\/ki-protokoll\/claude-hook\/block_direct_db.py\"\n trigger: \"PreToolUse\"\n tool: \"Bash\"\n\n blocked_patterns:\n - \"mysql -u\"\n - \"mysql -p\"\n - \"mariadb -u\"\n - \"mariadb -p\"\n - \"mysqldump\"\n - \"mysqlimport\"\n - pattern: \"-p[a-zA-Z0-9]\"\n description: \"Passwort direkt nach -p\"\n - pattern: \"--password=\"\n description: \"Passwort als Parameter\"\n\n response:\n action: \"block\"\n message: |\n BLOCKIERT: Direkter Datenbankzugriff verboten!\n\n Verwende stattdessen:\n - mcp__mcp-db__db_select für SELECT-Abfragen\n - mcp__mcp-db__db_schema für Tabellenstruktur\n - mcp__mcp-db__db_stats für Statistiken\n\n Niemals Passwörter in Bash-Befehlen verwenden!\n\n# =============================================================================\n# STUFE 2: ERKENNUNG - Pattern-Matching im Prompt\n# =============================================================================\ndetection:\n level: 2\n name: \"Selbstprüfung vor Bash-Ausführung\"\n\n checklist:\n before_bash:\n - question: \"Enthält der Befehl mysql, mariadb oder Datenbank-Tools?\"\n if_yes: \"STOPP - MCP-DB verwenden\"\n - question: \"Enthält der Befehl ein Passwort oder -p Flag?\"\n if_yes: \"STOPP - Niemals Passwörter in Befehlen\"\n - question: \"Lese ich Credentials aus einer Datei für einen Befehl?\"\n if_yes: \"STOPP - MCP-Tools nutzen statt Credentials lesen\"\n\n forbidden_sequences:\n - \"cat \/var\/www\/docs\/credentials\" + \"mysql\"\n - \"grep password\" + \"mysql\"\n - Jede Kombination von Credential-Lesen und DB-Befehl\n\n# =============================================================================\n# STUFE 3: ALTERNATIVEN - Was stattdessen tun\n# =============================================================================\nalternatives:\n level: 3\n name: \"Erlaubte Methoden für Datenbankzugriff\"\n\n mcp_tools:\n db_select:\n use_for: \"SELECT-Abfragen\"\n example: 'mcp__mcp-db__db_select(query=\"SELECT * FROM table\", database=\"ki_dev\")'\n\n db_schema:\n use_for: \"Tabellenstruktur anzeigen\"\n example: 'mcp__mcp-db__db_schema(database=\"ki_dev\")'\n\n db_stats:\n use_for: \"Statistiken und Logs\"\n example: 'mcp__mcp-db__db_stats(limit=50)'\n\n allowed_databases:\n - ki_dev\n - ki_content\n\n for_write_operations:\n method: \"Repository-Pattern in PHP\"\n location: \"\/src\/Infrastructure\/Persistence\/\"\n never: \"Direkte SQL-Befehle via Bash\"\n\n# =============================================================================\n# STUFE 4: AUDIT - Nachverfolgung\n# =============================================================================\naudit:\n level: 4\n name: \"Logging und Überprüfung\"\n\n logging:\n location: \"ki_dev.mcp_log\"\n log_all_db_access: true\n\n review:\n frequency: \"Bei jedem Vorfall\"\n action: \"Hook-Regeln verschärfen\"\n\n# =============================================================================\n# IMPLEMENTIERUNG\n# =============================================================================\nimplementation:\n step_1:\n action: \"Hook-Script erstellen\"\n file: \"\/var\/www\/tools\/ki-protokoll\/claude-hook\/block_direct_db.py\"\n priority: \"SOFORT\"\n\n step_2:\n action: \"Hook in settings.local.json registrieren\"\n trigger: \"PreToolUse\"\n\n step_3:\n action: \"Diesen Contract in MCP-Contracts speichern\"\n\n step_4:\n action: \"Test durchführen\"\n\n# =============================================================================\n# ENFORCEMENT\n# =============================================================================\nenforcement:\n on_violation:\n action: \"block\"\n notify: true\n log: true\n\n exceptions:\n - none: \"Keine Ausnahmen erlaubt\"\n"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/docs\/contracts\/db-access-security-protocol_v1.0.yaml",
"content": "# =============================================================================\n# DATABASE ACCESS SECURITY PROTOCOL\n# =============================================================================\n# Mehrstufiges Sicherheitsprotokoll gegen direkte DB-Zugriffe\n# Version: 1.0.0\n# Erstellt: 2025-12-20\n# Anlass: Sicherheitsverstoß - direkter mysql-Befehl mit Passwort im Klartext\n# =============================================================================\n\nmeta:\n document_type: security_protocol\n normative: true\n binding: mandatory\n severity: critical\n created: 2025-12-20\n author: claude-code\n\nidentity:\n name: db_access_security_protocol\n version: 1.0.0\n status: active\n\n# =============================================================================\n# PROBLEMDEFINITION\n# =============================================================================\nproblem:\n incident: \"Direkter mysql-Befehl mit Passwort im Klartext ausgeführt\"\n date: 2025-12-20\n consequences:\n - Passwort im Konversationsverlauf sichtbar\n - Potentielles Sicherheitsrisiko\n - Verstoß gegen claude.md Regeln\n\n# =============================================================================\n# STUFE 1: PRÄVENTION - Hook-basierte Blockierung\n# =============================================================================\nprevention:\n level: 1\n name: \"PreToolUse Hook - DB-Befehl-Blockierung\"\n\n implementation:\n script: \"\/var\/www\/tools\/ki-protokoll\/claude-hook\/block_direct_db.py\"\n trigger: \"PreToolUse\"\n tool: \"Bash\"\n\n blocked_patterns:\n - \"mysql -u\"\n - \"mysql -p\"\n - \"mariadb -u\"\n - \"mariadb -p\"\n - \"mysqldump\"\n - \"mysqlimport\"\n - pattern: \"-p[a-zA-Z0-9]\"\n description: \"Passwort direkt nach -p\"\n - pattern: \"--password=\"\n description: \"Passwort als Parameter\"\n\n response:\n action: \"block\"\n message: |\n BLOCKIERT: Direkter Datenbankzugriff verboten!\n\n Verwende stattdessen:\n - mcp__mcp-db__db_select für SELECT-Abfragen\n - mcp__mcp-db__db_schema für Tabellenstruktur\n - mcp__mcp-db__db_stats für Statistiken\n\n Niemals Passwörter in Bash-Befehlen verwenden!\n\n# =============================================================================\n# STUFE 2: ERKENNUNG - Pattern-Matching im Prompt\n# =============================================================================\ndetection:\n level: 2\n name: \"Selbstprüfung vor Bash-Ausführung\"\n\n checklist:\n before_bash:\n - question: \"Enthält der Befehl mysql, mariadb oder Datenbank-Tools?\"\n if_yes: \"STOPP - MCP-DB verwenden\"\n - question: \"Enthält der Befehl ein Passwort oder -p Flag?\"\n if_yes: \"STOPP - Niemals Passwörter in Befehlen\"\n - question: \"Lese ich Credentials aus einer Datei für einen Befehl?\"\n if_yes: \"STOPP - MCP-Tools nutzen statt Credentials lesen\"\n\n forbidden_sequences:\n - \"cat \/var\/www\/docs\/credentials\" + \"mysql\"\n - \"grep password\" + \"mysql\"\n - Jede Kombination von Credential-Lesen und DB-Befehl\n\n# =============================================================================\n# STUFE 3: ALTERNATIVEN - Was stattdessen tun\n# =============================================================================\nalternatives:\n level: 3\n name: \"Erlaubte Methoden für Datenbankzugriff\"\n\n mcp_tools:\n db_select:\n use_for: \"SELECT-Abfragen\"\n example: 'mcp__mcp-db__db_select(query=\"SELECT * FROM table\", database=\"ki_dev\")'\n\n db_schema:\n use_for: \"Tabellenstruktur anzeigen\"\n example: 'mcp__mcp-db__db_schema(database=\"ki_dev\")'\n\n db_stats:\n use_for: \"Statistiken und Logs\"\n example: 'mcp__mcp-db__db_stats(limit=50)'\n\n allowed_databases:\n - ki_dev\n - ki_content\n\n for_write_operations:\n method: \"Repository-Pattern in PHP\"\n location: \"\/src\/Infrastructure\/Persistence\/\"\n never: \"Direkte SQL-Befehle via Bash\"\n\n# =============================================================================\n# STUFE 4: AUDIT - Nachverfolgung\n# =============================================================================\naudit:\n level: 4\n name: \"Logging und Überprüfung\"\n\n logging:\n location: \"ki_dev.mcp_log\"\n log_all_db_access: true\n\n review:\n frequency: \"Bei jedem Vorfall\"\n action: \"Hook-Regeln verschärfen\"\n\n# =============================================================================\n# IMPLEMENTIERUNG\n# =============================================================================\nimplementation:\n step_1:\n action: \"Hook-Script erstellen\"\n file: \"\/var\/www\/tools\/ki-protokoll\/claude-hook\/block_direct_db.py\"\n priority: \"SOFORT\"\n\n step_2:\n action: \"Hook in settings.local.json registrieren\"\n trigger: \"PreToolUse\"\n\n step_3:\n action: \"Diesen Contract in MCP-Contracts speichern\"\n\n step_4:\n action: \"Test durchführen\"\n\n# =============================================================================\n# ENFORCEMENT\n# =============================================================================\nenforcement:\n on_violation:\n action: \"block\"\n notify: true\n log: true\n\n exceptions:\n - none: \"Keine Ausnahmen erlaubt\"\n",
"structuredPatch": [],
"originalFile": null
}
}