T09 · Insecure Skill Coding Practices
- Location
scripts/query_validator.py:66- Finding
Fail-Open Query Validation Allows Mutating Cypher and Unsupported Languages
- Content
View full analysis
QueryValidation: """Validate a graph query.""" issues = [] if self.language == "cypher": issues = self._validate_cypher(query) elif self.language == "sparql": issues = self._validate_sparql(query) # Generate optimization suggestions suggestions = self._generate_optimization_suggestions(query, issues) # Estimate execution time est_time = self._estimate_execution_time(query) is_valid = not any(i.status == ValidationStatus.ERROR for i in issues) return QueryValidation( query=query, language=self.language, is_valid=is_valid, issues=issues, optimization_suggestions=suggestions, estimated_execution_time_ms=est_time ) def _validate_cypher(self, query: str) -> List[ValidationIssue]: """Validate Cypher query.""" issues = [] lines = query.split('\n') # Check for MATCH clause if not any('MATCH' in line.upper() for line in lines): issues.append(ValidationIssue( status=ValidationStatus.ERROR, message="Missing MATCH clause", suggestion="Cypher queries must start with MATCH, WITH, or UNWIND" )) # Check for RETURN clause if not any('RETURN' in line.upper() for line in lines): issues.append(ValidationIssue( status=ValidationStatus.ERROR, message="Missing RETURN clause", suggestion="Cypher queries must have a RETURN clause" )) # Check for LIMIT (optional but recommended) if not any('LIMIT' in line.upper() for line in lines): if not any('COUNT' in line.upper() for line in lines): issues.append(ValidationIssue( status=Validat ...[truncated 4012 chars]- Remediation
View remediation
