UNPKG

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
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 };