Skip to content

Commit a7fb36f

Browse files
committed
fix(security): add audit logging for AI SQL queries
- Log all SQL queries before execution (info level) - Log blocked queries with reason (warning level) - Log execution errors with query context (error level) - All logs truncated to 500 chars for safety Fixes #8
1 parent 224df07 commit a7fb36f

2 files changed

Lines changed: 14 additions & 0 deletions

File tree

Model/Assistant/Tool/ExecuteSqlTool.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace RunAsRoot\TypeSense\Model\Assistant\Tool;
66

77
use Magento\Framework\App\ResourceConnection;
8+
use Psr\Log\LoggerInterface;
89

910
class ExecuteSqlTool implements ToolInterface
1011
{
@@ -13,6 +14,7 @@ class ExecuteSqlTool implements ToolInterface
1314
public function __construct(
1415
private readonly ResourceConnection $resource,
1516
private readonly SqlSandbox $sandbox,
17+
private readonly LoggerInterface $logger,
1618
) {
1719
}
1820

@@ -48,9 +50,15 @@ public function execute(array $arguments): string
4850
return json_encode(['error' => 'Query cannot be empty.']);
4951
}
5052

53+
$this->logger->info('AI Assistant SQL query', ['query' => mb_substr($query, 0, 500)]);
54+
5155
try {
5256
$this->sandbox->validate($query);
5357
} catch (\InvalidArgumentException $e) {
58+
$this->logger->warning('AI Assistant blocked SQL query', [
59+
'query' => mb_substr($query, 0, 500),
60+
'reason' => $e->getMessage(),
61+
]);
5462
return json_encode(['error' => $e->getMessage()]);
5563
}
5664

@@ -73,6 +81,10 @@ public function execute(array $arguments): string
7381
'count' => count($rows),
7482
]);
7583
} catch (\Exception $e) {
84+
$this->logger->error('AI Assistant SQL execution error', [
85+
'query' => mb_substr($query, 0, 500),
86+
'error' => $e->getMessage(),
87+
]);
7688
return json_encode(['error' => 'Query execution failed. Please check your SQL syntax and try again.']);
7789
}
7890
}

Test/Unit/Model/Assistant/Tool/ExecuteSqlToolTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Magento\Framework\App\ResourceConnection;
88
use PHPUnit\Framework\MockObject\MockObject;
99
use PHPUnit\Framework\TestCase;
10+
use Psr\Log\LoggerInterface;
1011
use RunAsRoot\TypeSense\Model\Assistant\Tool\ExecuteSqlTool;
1112
use RunAsRoot\TypeSense\Model\Assistant\Tool\SqlSandbox;
1213

@@ -26,6 +27,7 @@ protected function setUp(): void
2627
$this->sut = new ExecuteSqlTool(
2728
$this->resource,
2829
$this->sandbox,
30+
$this->createMock(LoggerInterface::class),
2931
);
3032
}
3133

0 commit comments

Comments
 (0)