AI prompt security scanner with differential validation - detects vulnerabilities before they reach production
Project description
๐ก๏ธ PromptSentry
AI Prompt Security Scanner - Detect and prevent vulnerabilities in AI prompts before they reach production.
๐ Features
- 3-Stage Security Pipeline: Comprehensive analysis using prompt detection, pattern matching, and optional LLM validation
- OWASP LLM Top 10 2025 Rules: Industry-standard vulnerability detection loaded as context
- Differential Validation: No "moving goalposts" - only blocks for previously identified unfixed issues
- Git Pre-commit Hook: Automatic scanning before every commit
- Beautiful CLI: Rich terminal output with actionable recommendations
- Local LLM Analysis: Uses Ollama with Qwen 2.5 Coder 0.5B (~500MB) for intelligent security assessment
- Stable Fingerprinting: Advanced code normalization ensures issues are tracked across refactoring
๐ฆ Installation
pip install promptsentry
โก Quick Start
# Initialize PromptSentry
promptsentry init
# Install git pre-commit hook
cd your-project
promptsentry install-hook
# Scan a file manually
promptsentry scan chatbot.py
# Scan without LLM (faster, pattern matching only)
promptsentry scan --no-llm chatbot.py
๐ How It Works
PromptSentry uses a 3-stage pipeline to detect vulnerabilities:
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ 1. DETECT โ -> โ 2. PATTERNS โ -> โ 3. SLM โ
โ Prompts โ โ Check โ โ ANALYSIS โ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
Fast filter OWASP LLM Top 10 Ollama + Qwen
(0.1s) rules (0.2s) (optional, 2s)
Stage 1: Prompt Detection
Quickly identifies AI prompts in source code using heuristics and pattern matching.
Stage 2: Pattern Matching
Applies OWASP LLM Top 10 2025 rules for deterministic vulnerability detection.
Stage 3: SLM Analysis (Optional)
Uses Ollama with Qwen 2.5 Coder 0.5B for intelligent, context-aware vulnerability assessment. OWASP rules are passed as context to the model for comprehensive analysis.
๐ก๏ธ Vulnerabilities Detected
Based on OWASP LLM Top 10:
| Category | Description | Detection |
|---|---|---|
| LLM01 | Prompt Injection | Direct concatenation, missing delimiters, weak system prompts |
| LLM02 | Sensitive Information Disclosure | PII, credentials, API keys in prompts |
| LLM03 | Supply Chain Vulnerabilities | Vulnerable dependencies, untrusted models/data |
| LLM04 | Data and Model Poisoning | Poisoned training data, malicious fine-tuning |
| LLM05 | Improper Output Handling | eval(), exec(), subprocess, SQL/XSS from LLM output |
| LLM06 | Excessive Agency | Unrestricted file/network access, auto-execution |
| LLM07 | System Prompt Leakage | Extractable logic, secrets in system prompts |
| LLM08 | Vector and Embedding Weaknesses | RAG poisoning, embedding manipulation |
| LLM09 | Misinformation | Hallucinations, lack of factual grounding |
| LLM10 | Unbounded Consumption | No rate limiting, infinite loops, resource exhaustion |
๐ก Key Innovation: Differential Validation
PromptSentry tracks issues across commits and only blocks for previously identified unfixed issues:
- First scan: Detects issues and tracks them
- Fix and commit: Only checks if tracked issues are fixed
- No moving goalposts: New findings are noted but don't block
This prevents the frustrating experience of fixing one issue only to have the scanner find new nitpicks.
๐ CLI Commands
Setup
promptsentry init # Initialize PromptSentry
promptsentry install-hook # Install git pre-commit hook
promptsentry uninstall-hook # Remove the hook
Scanning
promptsentry scan file.py # Scan a single file (LLM enabled by default)
promptsentry scan . # Scan current directory
promptsentry scan --staged # Scan staged git files
promptsentry scan --no-llm # Disable LLM for faster scanning
Issue Management
promptsentry issues list # List tracked issues
promptsentry issues stats # Show statistics
promptsentry issues clear file.py # Clear issues for a file
promptsentry issues ignore ID # Ignore a specific issue
Configuration
promptsentry config show # Show current config
promptsentry config set scan.threshold 80 # Set blocking threshold
promptsentry config reset # Reset to defaults
Rules
promptsentry rules # List all detection rules
โ๏ธ Configuration
Configuration is stored in ~/.promptsentry/config.yaml:
scan:
threshold: 50 # Score to block (0-100)
min_confidence: 0.6 # Prompt detection threshold
file_extensions:
- .py
- .js
- .ts
llm:
model_name: qwen2.5-coder:0.5b # Ollama model
enabled: true # Enable LLM analysis by default
timeout: 30 # LLM request timeout (seconds)
hook:
enabled: true
block_on_issues: true
allow_bypass: true # Allow --no-verify
๐ฌ Demo Flow
# First commit - issues detected
$ git add chatbot.py
$ git commit -m "Add chatbot"
๐ PromptSentry: Scanning staged files...
โ Found 1 prompt in chatbot.py
โ COMMIT BLOCKED - 2 vulnerabilities found
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ด HIGH - Direct Concatenation
chatbot.py:15
Problem:
> prompt = "Translate: " + user_input
Fix:
> prompt = f"Translate: <input>{user_input}</input>"
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Fix and commit again
$ git commit -m "Fix: Add delimiters"
๐ PromptSentry: Checking fixes...
โ
Fixed: Direct Concatenation โ
๐ All vulnerabilities resolved!
โ
COMMIT ALLOWED
๐ง Development
# Clone repository
git clone https://github.com/Brightlord5/PromptGuard
cd PromptGuard
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
black promptsentry
ruff check promptsentry
๐ License
MIT License - see LICENSE for details.
๐ Acknowledgments
- OWASP LLM Top 10 for vulnerability categories
- Ollama for local LLM infrastructure
- Qwen for the efficient coder model
- Rich for beautiful terminal output
Made with โค๏ธ for secure AI development
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file promptsentry-0.1.5.tar.gz.
File metadata
- Download URL: promptsentry-0.1.5.tar.gz
- Upload date:
- Size: 63.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ccaceea90a2f73f25836154607cf97b9ee499ddf9aeab8736e53675ac4043aa
|
|
| MD5 |
934664234ebad7381dc166d0e5dfe7d8
|
|
| BLAKE2b-256 |
ec7480cd6dae9ba15b4d8f22c6960ee17e0fef27b7725fb301ed708c0e3d2038
|
File details
Details for the file promptsentry-0.1.5-py3-none-any.whl.
File metadata
- Download URL: promptsentry-0.1.5-py3-none-any.whl
- Upload date:
- Size: 74.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea7b6589458534560553aa82793d4fc649a4ad29e79e646f9f82fb609f7b0a72
|
|
| MD5 |
f32300bc39576cc9fa3fc20828b8dc96
|
|
| BLAKE2b-256 |
a7e00dd47d7eac98908f7ad17a4f903002849256a62b492ac4c69eb31334adc8
|