Module: Otto::Security::ValidationHelpers
- Defined in:
- lib/otto/security/validator.rb
Instance Method Summary collapse
- #sanitize_filename(filename) ⇒ Object
- #validate_input(input, max_length: 1000, allow_html: false) ⇒ Object
Instance Method Details
#sanitize_filename(filename) ⇒ Object
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 |
# File 'lib/otto/security/validator.rb', line 282 def sanitize_filename(filename) return nil if filename.nil? || filename.empty? # Remove path components and dangerous characters clean_name = File.basename(filename.to_s) clean_name = clean_name.gsub(/[^\w\-_\.]/, '_') clean_name = clean_name.gsub(/_{2,}/, '_') clean_name = clean_name.gsub(/^_+|_+$/, '') # Ensure it's not empty and has reasonable length clean_name = 'file' if clean_name.empty? clean_name = clean_name[0..100] if clean_name.length > 100 clean_name end |
#validate_input(input, max_length: 1000, allow_html: false) ⇒ Object
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 |
# File 'lib/otto/security/validator.rb', line 253 def validate_input(input, max_length: 1000, allow_html: false) return input if input.nil? || input.empty? input_str = input.to_s # Check length if input_str.length > max_length raise Otto::Security::ValidationError, "Input too long (#{input_str.length} > #{max_length})" end # Check for dangerous patterns unless HTML is allowed unless allow_html ValidationMiddleware::DANGEROUS_PATTERNS.each do |pattern| if input_str.match?(pattern) raise Otto::Security::ValidationError, 'Dangerous content detected' end end end # Always check for SQL injection ValidationMiddleware::SQL_INJECTION_PATTERNS.each do |pattern| if input_str.match?(pattern) raise Otto::Security::ValidationError, 'Potential SQL injection detected' end end input_str end |