Ragex.Analysis.Security
(Ragex v0.8.0)
View Source
Security vulnerability analysis using Metastatic.
Detects security vulnerabilities including:
- Injection attacks (SQL, command, code injection)
- Unsafe deserialization (eval, exec, pickle.loads)
- Hardcoded secrets (API keys, passwords)
- Weak cryptography (MD5, SHA1, DES)
- Insecure protocols (HTTP URLs)
Usage
alias Ragex.Analysis.Security
# Analyze single file
{:ok, result} = Security.analyze_file("lib/my_module.ex")
# Check for vulnerabilities
result.has_vulnerabilities? # => true/false
result.total_vulnerabilities # => 3
result.critical_count # => 1
# Analyze directory
{:ok, results} = Security.analyze_directory("lib/")
# Generate audit report
report = Security.audit_report(results)
Summary
Functions
Analyzes all files in a directory for security vulnerabilities.
Analyzes a single file for security vulnerabilities.
Generates a comprehensive security audit report.
Scans a directory for security vulnerabilities.
Types
@type analysis_result() :: %{ file: String.t(), language: atom(), vulnerabilities: [vulnerability()], has_vulnerabilities?: boolean(), total_vulnerabilities: non_neg_integer(), critical_count: non_neg_integer(), high_count: non_neg_integer(), medium_count: non_neg_integer(), low_count: non_neg_integer(), timestamp: DateTime.t() }
Functions
@spec analyze_directory( String.t(), keyword() ) :: {:ok, [analysis_result()]} | {:error, term()}
Analyzes all files in a directory for security vulnerabilities.
Options
:recursive- Recursively analyze subdirectories (default: true):parallel- Use parallel processing (default: true):max_concurrency- Maximum concurrent analyses (default: System.schedulers_online())- Plus all options from
analyze_file/2
Examples
{:ok, results} = Security.analyze_directory("lib/")
total_vulns = Enum.sum(Enum.map(results, & &1.total_vulnerabilities))
@spec analyze_file( String.t(), keyword() ) :: {:ok, analysis_result()} | {:error, term()}
Analyzes a single file for security vulnerabilities.
Options
:categories- List of vulnerability categories to check (default: all):min_severity- Minimum severity to report (default: :low):language- Explicit language (default: auto-detect)
Examples
{:ok, result} = Security.analyze_file("lib/my_module.ex")
result.has_vulnerabilities? # => false
@spec audit_report([analysis_result()]) :: map()
Generates a comprehensive security audit report.
Returns a formatted map with:
- Summary statistics
- Vulnerabilities grouped by severity
- Vulnerabilities grouped by category
- Recommendations
Examples
{:ok, results} = Security.analyze_directory("lib/")
report = Security.audit_report(results)
IO.puts(report.summary)
@spec scan_directory( String.t(), keyword() ) :: {:ok, [analysis_result()]} | {:error, term()}
Scans a directory for security vulnerabilities.
Alias for analyze_directory/2. Provided for API consistency.
Examples
{:ok, results} = Security.scan_directory("lib/", severity: [:high, :critical])