Validate File Types

This guide shows you how to validate uploaded file types for security.

Basic Extension Validation

Check file extensions:

module FileValidator
  ALLOWED_IMAGES = [".jpg", ".jpeg", ".png", ".gif", ".webp"]
  ALLOWED_DOCUMENTS = [".pdf", ".doc", ".docx", ".txt"]

  def self.valid_image?(filename : String) : Bool
    ext = File.extname(filename).downcase
    ALLOWED_IMAGES.includes?(ext)
  end

  def self.valid_document?(filename : String) : Bool
    ext = File.extname(filename).downcase
    ALLOWED_DOCUMENTS.includes?(ext)
  end
end

Content-Type Validation

Validate the declared content type:

Magic Number Validation

Check file signatures (magic numbers) for true file type:

Comprehensive File Validation

Combine all validation methods:

Request Validation

Integrate with request contracts:

Security Considerations

Avoid Path Traversal

Prevent Double Extensions

Validate Image Dimensions

Virus Scanning

Integrate with ClamAV:

See Also

Last updated

Was this helpful?