Skip to content

Commit 207a149

Browse files
authored
fix(dbs): remove harness from validation on user-provided db creds (#2308)
1 parent 0997989 commit 207a149

File tree

5 files changed

+1
-132
lines changed

5 files changed

+1
-132
lines changed

apps/sim/app/api/tools/mysql/utils.ts

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ export async function createMySQLConnection(config: MySQLConnectionConfig) {
1919
}
2020

2121
if (config.ssl === 'disabled') {
22-
// Don't set ssl property at all to disable SSL
2322
} else if (config.ssl === 'required') {
2423
connectionConfig.ssl = { rejectUnauthorized: true }
2524
} else if (config.ssl === 'preferred') {
@@ -54,42 +53,6 @@ export async function executeQuery(
5453
export function validateQuery(query: string): { isValid: boolean; error?: string } {
5554
const trimmedQuery = query.trim().toLowerCase()
5655

57-
const dangerousPatterns = [
58-
/drop\s+database/i,
59-
/drop\s+schema/i,
60-
/drop\s+user/i,
61-
/create\s+user/i,
62-
/grant\s+/i,
63-
/revoke\s+/i,
64-
/alter\s+user/i,
65-
/set\s+global/i,
66-
/set\s+session/i,
67-
/load\s+data/i,
68-
/into\s+outfile/i,
69-
/into\s+dumpfile/i,
70-
/load_file\s*\(/i,
71-
/system\s+/i,
72-
/exec\s+/i,
73-
/execute\s+immediate/i,
74-
/xp_cmdshell/i,
75-
/sp_configure/i,
76-
/information_schema\.tables/i,
77-
/mysql\.user/i,
78-
/mysql\.db/i,
79-
/mysql\.host/i,
80-
/performance_schema/i,
81-
/sys\./i,
82-
]
83-
84-
for (const pattern of dangerousPatterns) {
85-
if (pattern.test(query)) {
86-
return {
87-
isValid: false,
88-
error: `Query contains potentially dangerous operation: ${pattern.source}`,
89-
}
90-
}
91-
}
92-
9356
const allowedStatements = /^(select|insert|update|delete|with|show|describe|explain)\s+/i
9457
if (!allowedStatements.test(trimmedQuery)) {
9558
return {

apps/sim/app/api/tools/neo4j/utils.ts

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,44 +30,14 @@ export async function createNeo4jDriver(config: Neo4jConnectionConfig) {
3030
return driver
3131
}
3232

33-
export function validateCypherQuery(
34-
query: string,
35-
allowDangerousOps = false
36-
): { isValid: boolean; error?: string } {
33+
export function validateCypherQuery(query: string): { isValid: boolean; error?: string } {
3734
if (!query || typeof query !== 'string') {
3835
return {
3936
isValid: false,
4037
error: 'Query must be a non-empty string',
4138
}
4239
}
4340

44-
if (!allowDangerousOps) {
45-
const dangerousPatterns = [
46-
/DROP\s+DATABASE/i,
47-
/DROP\s+CONSTRAINT/i,
48-
/DROP\s+INDEX/i,
49-
/CREATE\s+DATABASE/i,
50-
/CREATE\s+CONSTRAINT/i,
51-
/CREATE\s+INDEX/i,
52-
/CALL\s+dbms\./i,
53-
/CALL\s+db\./i,
54-
/LOAD\s+CSV/i,
55-
/apoc\.cypher\.run/i,
56-
/apoc\.load/i,
57-
/apoc\.periodic/i,
58-
]
59-
60-
for (const pattern of dangerousPatterns) {
61-
if (pattern.test(query)) {
62-
return {
63-
isValid: false,
64-
error:
65-
'Query contains potentially dangerous operations (schema changes, system procedures, or external data loading)',
66-
}
67-
}
68-
}
69-
}
70-
7141
const trimmedQuery = query.trim()
7242
if (trimmedQuery.length === 0) {
7343
return {

apps/sim/app/api/tools/postgresql/utils.ts

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -42,46 +42,6 @@ export async function executeQuery(
4242
export function validateQuery(query: string): { isValid: boolean; error?: string } {
4343
const trimmedQuery = query.trim().toLowerCase()
4444

45-
// Block dangerous SQL operations
46-
const dangerousPatterns = [
47-
/drop\s+database/i,
48-
/drop\s+schema/i,
49-
/drop\s+user/i,
50-
/create\s+user/i,
51-
/create\s+role/i,
52-
/grant\s+/i,
53-
/revoke\s+/i,
54-
/alter\s+user/i,
55-
/alter\s+role/i,
56-
/set\s+role/i,
57-
/reset\s+role/i,
58-
/copy\s+.*from/i,
59-
/copy\s+.*to/i,
60-
/lo_import/i,
61-
/lo_export/i,
62-
/pg_read_file/i,
63-
/pg_write_file/i,
64-
/pg_ls_dir/i,
65-
/information_schema\.tables/i,
66-
/pg_catalog/i,
67-
/pg_user/i,
68-
/pg_shadow/i,
69-
/pg_roles/i,
70-
/pg_authid/i,
71-
/pg_stat_activity/i,
72-
/dblink/i,
73-
/\\\\copy/i,
74-
]
75-
76-
for (const pattern of dangerousPatterns) {
77-
if (pattern.test(query)) {
78-
return {
79-
isValid: false,
80-
error: `Query contains potentially dangerous operation: ${pattern.source}`,
81-
}
82-
}
83-
}
84-
8545
const allowedStatements = /^(select|insert|update|delete|with|explain|analyze|show)\s+/i
8646
if (!allowedStatements.test(trimmedQuery)) {
8747
return {

apps/sim/app/api/tools/rds/query/route.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ export async function POST(request: NextRequest) {
2525

2626
logger.info(`[${requestId}] Executing RDS query on ${params.database}`)
2727

28-
// Validate the query
2928
const validation = validateQuery(params.query)
3029
if (!validation.isValid) {
3130
logger.warn(`[${requestId}] Query validation failed: ${validation.error}`)

apps/sim/app/api/tools/rds/utils.ts

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -82,29 +82,6 @@ function parseFieldValue(field: Field): unknown {
8282
export function validateQuery(query: string): { isValid: boolean; error?: string } {
8383
const trimmedQuery = query.trim().toLowerCase()
8484

85-
const dangerousPatterns = [
86-
/drop\s+database/i,
87-
/drop\s+schema/i,
88-
/drop\s+user/i,
89-
/create\s+user/i,
90-
/create\s+role/i,
91-
/grant\s+/i,
92-
/revoke\s+/i,
93-
/alter\s+user/i,
94-
/alter\s+role/i,
95-
/set\s+role/i,
96-
/reset\s+role/i,
97-
]
98-
99-
for (const pattern of dangerousPatterns) {
100-
if (pattern.test(query)) {
101-
return {
102-
isValid: false,
103-
error: `Query contains potentially dangerous operation: ${pattern.source}`,
104-
}
105-
}
106-
}
107-
10885
const allowedStatements = /^(select|insert|update|delete|with|explain|show)\s+/i
10986
if (!allowedStatements.test(trimmedQuery)) {
11087
return {

0 commit comments

Comments
 (0)