Skip to main content
Glama

MCP Databases Server

test_security.py6.04 kB
#!/usr/bin/env python3 """ Script de teste para validar o sistema de segurança SQL do MCP Databases. """ import sys import os # Adiciona o diretório pai ao path sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from mcp_databases.security import SQLSecurityValidator, validate_sql_security, SQLSecurityError def test_dangerous_queries(): """Testa queries perigosas que devem ser bloqueadas.""" dangerous_queries = [ "DROP TABLE users", "DELETE FROM users WHERE id = 1", "TRUNCATE TABLE logs", "EXEC xp_cmdshell 'dir'", "EXECUTE sp_configure 'xp_cmdshell', 1", "ALTER TABLE users ADD COLUMN password VARCHAR(255)", "CREATE TABLE hackers (id INT)", "INSERT INTO users VALUES (1, 'hacker')", "UPDATE users SET password = 'hacked' WHERE id = 1", "SELECT * FROM users; DROP TABLE users; --", "SELECT * FROM users UNION ALL SELECT * FROM passwords", "SELECT @@version", "BULK INSERT users FROM 'file.txt'", "OPENROWSET('SQLNCLI', 'server=.;uid=sa;pwd=;', 'SELECT * FROM master.sys.tables')" ] print("🧪 TESTANDO QUERIES PERIGOSAS (devem ser BLOQUEADAS)") print("=" * 60) all_blocked = True for i, query in enumerate(dangerous_queries, 1): try: is_safe, message = SQLSecurityValidator.validate_query(query, allow_modifications=False) if is_safe: print(f"❌ FALHA {i}: Query perigosa passou na validação!") print(f" Query: {query}") print(f" Mensagem: {message}") all_blocked = False else: print(f"✅ OK {i}: Query bloqueada corretamente") print(f" Query: {query[:50]}...") print(f" Motivo: {message[:100]}...") except Exception as e: print(f"✅ OK {i}: Query bloqueada com exceção") print(f" Query: {query[:50]}...") print(f" Erro: {str(e)[:100]}...") print() return all_blocked def test_safe_queries(): """Testa queries seguras que devem ser permitidas.""" safe_queries = [ "SELECT * FROM users", "SELECT id, name FROM users WHERE active = 1", "SELECT COUNT(*) FROM orders WHERE date > '2023-01-01'", "SELECT u.name, o.total FROM users u JOIN orders o ON u.id = o.user_id", "SELECT DISTINCT category FROM products ORDER BY category", "WITH total_sales AS (SELECT SUM(amount) as total FROM sales) SELECT * FROM total_sales", "SELECT * FROM users WHERE name LIKE '%admin%' AND status = 'active'" ] print("🧪 TESTANDO QUERIES SEGURAS (devem ser PERMITIDAS)") print("=" * 60) all_passed = True for i, query in enumerate(safe_queries, 1): try: is_safe, message = SQLSecurityValidator.validate_query(query, allow_modifications=False) if is_safe: print(f"✅ OK {i}: Query segura permitida") print(f" Query: {query}") print(f" Mensagem: {message}") else: print(f"❌ FALHA {i}: Query segura foi bloqueada!") print(f" Query: {query}") print(f" Motivo: {message}") all_passed = False except Exception as e: print(f"❌ FALHA {i}: Query segura gerou exceção") print(f" Query: {query}") print(f" Erro: {str(e)}") all_passed = False print() return all_passed def test_edge_cases(): """Testa casos especiais e tentativas de contorno.""" edge_cases = [ ("Query vazia", ""), ("Apenas espaços", " "), ("Comentário com comando perigoso", "-- DROP TABLE users\nSELECT * FROM users"), ("Comentário de bloco", "/* DELETE FROM users */ SELECT * FROM users"), ("Case insensitive", "select * from users"), ("Case mixed", "SeLeCt * FrOm UsErS"), ("SQL injection tentative", "SELECT * FROM users WHERE id = '1'; DROP TABLE users; --"), ("Union com comando perigoso", "SELECT name FROM users UNION SELECT 'test'; DELETE FROM users; --") ] print("🧪 TESTANDO CASOS ESPECIAIS") print("=" * 60) for description, query in edge_cases: try: is_safe, message = SQLSecurityValidator.validate_query(query, allow_modifications=False) status = "✅ PERMITIDA" if is_safe else "🚫 BLOQUEADA" print(f"{status} - {description}") print(f" Query: {repr(query)}") print(f" Resultado: {message[:100]}...") except Exception as e: print(f"🚫 BLOQUEADA - {description}") print(f" Query: {repr(query)}") print(f" Erro: {str(e)[:100]}...") print() def main(): """Executa todos os testes.""" print("🔒 TESTE DO SISTEMA DE SEGURANÇA SQL - MCP DATABASES") print("=" * 70) print() # Testa queries perigosas dangerous_blocked = test_dangerous_queries() print() # Testa queries seguras safe_passed = test_safe_queries() print() # Testa casos especiais test_edge_cases() print() # Resultado final print("📊 RESULTADO FINAL") print("=" * 30) if dangerous_blocked and safe_passed: print("🎉 TODOS OS TESTES PASSARAM!") print("✅ Queries perigosas foram bloqueadas corretamente") print("✅ Queries seguras foram permitidas corretamente") print("🛡️ Sistema de segurança funcionando perfeitamente!") else: print("⚠️ ALGUNS TESTES FALHARAM!") if not dangerous_blocked: print("❌ Algumas queries perigosas não foram bloqueadas") if not safe_passed: print("❌ Algumas queries seguras foram bloqueadas incorretamente") print("🔧 Revise a configuração de segurança") if __name__ == "__main__": main()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/fean-developer/mcp-databases'

If you have feedback or need assistance with the MCP directory API, please join our Discord server