sql-query-safety-checker
Version:
🛡️ Comprehensive TypeScript library for SQL query security analysis with injection detection, risk assessment, and Express middleware integration
161 lines (160 loc) • 5.15 kB
text/typescript
declare enum SecurityLevel {
SAFE = "safe",
LOW_RISK = "low_risk",
MEDIUM_RISK = "medium_risk",
HIGH_RISK = "high_risk",
CRITICAL = "critical"
}
type SecurityThreat = {
pattern: RegExp
name: string
description: string
level: SecurityLevel
category: "DML" | "DDL" | "DCL" | "INJECTION" | "ADMIN" | "SYSTEM"
};
type QueryAnalysis = {
securityLevel: SecurityLevel
isDangerous: boolean
isSelectOnly: boolean
threats: Array<{
name: string
description: string
level: SecurityLevel
category: string
}>
recommendations: string[]
allowExecution: boolean
};
type QuerySafetyResult = {
isDangerous: boolean
dangerousOperations: string[]
isSelectOnly: boolean
};
type ConfirmationResult = {
required: boolean
level: SecurityLevel
reason: string
};
type PolicyValidationResult = {
isValid: boolean
violations: string[]
analysis: QueryAnalysis
};
type SecurityPolicy = {
allowedOperations: string[]
maxRiskLevel: SecurityLevel
blockInjectionPatterns: boolean
requireConfirmationFor: SecurityLevel[]
};
declare const SECURITY_THREATS: SecurityThreat[];
declare const SAFE_OPERATIONS: RegExp[];
/**
* Normalizes a SQL query by removing comments and extra whitespace
* @param query - Raw SQL query
* @returns Cleaned query string
*/
declare const normalizeQuery: (query: string) => string;
/**
* Checks if a query contains only safe read operations
* @param query - Normalized SQL query
* @returns true if query is read-only and safe
*/
declare const isReadOnlyQuery: (query: string) => boolean;
/**
* Generates security recommendations based on detected threats
* @param threats - Array of detected security threats
* @param isSelectOnly - Whether query is read-only
* @returns Array of recommendation strings
*/
declare const generateRecommendations: (threats: QueryAnalysis["threats"], isSelectOnly: boolean) => string[];
/**
* Analyzes SQL query for security threats and provides comprehensive safety assessment
* @param query - The SQL query to analyze
* @returns Detailed security analysis
*/
declare const analyzeQuerySecurity: (query: string) => QueryAnalysis;
/**
* Enhanced function to check if query needs user confirmation
* @param query - The SQL query to check
* @returns Object with confirmation details
*/
declare const needsConfirmation: (query: string) => ConfirmationResult;
/**
* Validates query against specific security policies
* @param query - SQL query to validate
* @param allowedOperations - Array of allowed operation types
* @returns Validation result
*/
declare const validateQueryAgainstPolicy: (query: string, allowedOperations?: string[]) => PolicyValidationResult;
/**
* Quick safety check for simple use cases
* @param query - SQL query to check
* @returns true if query is safe to execute
*/
declare const isQuerySafe: (query: string) => boolean;
/**
* Gets a human-readable security summary
* @param query - SQL query to analyze
* @returns Summary string
*/
declare const getQuerySecuritySummary: (query: string) => string;
/**
* Gets security level color for UI display
* @param level - Security level
* @returns Color code for UI
*/
declare const getSecurityLevelColor: (level: SecurityLevel) => string;
/**
* Main class for SQL query safety checking
*/
declare class SQLQuerySafetyChecker {
/**
* Analyze a SQL query for security threats
* @param query - SQL query to analyze
* @returns Comprehensive security analysis
*/
analyzeQuery(query: string): QueryAnalysis;
/**
* Quick safety check for a SQL query
* @param query - SQL query to check
* @returns Basic safety result
*/
checkQuerySafety(query: string): QuerySafetyResult;
/**
* Check if a query is read-only (SELECT only)
* @param query - SQL query to check
* @returns true if query is SELECT only
*/
isSelectOnlyQuery(query: string): boolean;
/**
* Check if a query requires user confirmation before execution
* @param query - SQL query to check
* @returns Confirmation requirement details
*/
requiresConfirmation(query: string): ConfirmationResult;
/**
* Validate a query against a security policy
* @param query - SQL query to validate
* @param policy - Security policy to validate against
* @returns Policy validation result
*/
validateAgainstPolicy(query: string, policy: SecurityPolicy): PolicyValidationResult;
/**
* Get a human-readable security summary
* @param query - SQL query to analyze
* @returns Summary string
*/
getSecuritySummary(query: string): string;
/**
* Check if a query is safe to execute
* @param query - SQL query to check
* @returns true if safe to execute
*/
isSafe(query: string): boolean;
}
/**
* Create a new instance of SQLQuerySafetyChecker
* @returns New SQLQuerySafetyChecker instance
*/
declare const createSafetyChecker: () => SQLQuerySafetyChecker;
export { validateQueryAgainstPolicy, normalizeQuery, needsConfirmation, isReadOnlyQuery, isQuerySafe, getSecurityLevelColor, getQuerySecuritySummary, generateRecommendations, createSafetyChecker, analyzeQuerySecurity, SecurityThreat, SecurityPolicy, SecurityLevel, SQLQuerySafetyChecker, SECURITY_THREATS, SAFE_OPERATIONS, QuerySafetyResult, QueryAnalysis, PolicyValidationResult, ConfirmationResult };