SafeAI 🔒
Security analyzer for AI-generated code
SafeAI is a Python library that analyzes source code for security vulnerabilities commonly found in AI-generated code. It helps developers identify and fix security issues before they reach production.
🚀 Features
- 11 Security Rules: Comprehensive detection of common vulnerabilities
- AI-Focused: Specifically designed for AI-generated code patterns
- Multiple Output Formats: Text, JSON, and table output
- CLI Interface: Easy-to-use command-line tool
- Severity Levels: HIGH, MEDIUM, LOW classification
- Extensible: Easy to add custom security rules
📦 Installation
pip install safeai-scanner
🎯 Quick Start
Basic Usage
# Scan a single file
safeai scan main.py
# Scan a directory
safeai scan ./myproject
# Get detailed output
safeai scan ./myproject --format table
# Export results to JSON
safeai scan ./myproject --format json --output report.json
Command Line Options
# Filter by severity
safeai scan ./myproject --severity HIGH,MEDIUM
# Ignore specific directories
safeai scan ./myproject --ignore tests,docs,venv
# Fail CI/CD pipeline if issues found
safeai scan ./myproject --fail-on-error
# List all available rules
safeai list-rules
# Show version
safeai version
🔍 Security Rules
SafeAI includes 11 security rules specifically designed for AI-generated code:
Critical (HIGH) Severity
- PY001:
eval()/exec()usage - Code injection risk - PY002: Hardcoded secrets - API keys, tokens, passwords
- PY003: SQL injection - String concatenation in SQL queries
- PY004: Command injection -
os.system(),subprocesswithshell=True - PY005: Unsafe deserialization -
pickle.loads(),yaml.load()without Loader
Medium (MEDIUM) Severity
- PY006: Path traversal - File operations without path validation
- PY007: Missing input validation - Functions without parameter validation
- PY008: Assert for security - Security checks using
assert(can be disabled) - PY009: Insecure HTTP -
requestswithverify=False
Low (LOW) Severity
- PY010: Weak cryptography - MD5, SHA1, DES usage
- PY011: Missing exception handling - Critical operations without try/except
📋 Example Output
$ safeai scan vulnerable_code.py
⚠️ Found 3 security issues in vulnerable_code.py:
🔴 [PY001] Using eval() or exec() can be unsafe
Line 3: result = eval(expr)
Recommendation: Avoid using eval() and exec(). Use safe alternatives or thoroughly validate input data.
🔴 [PY002] Hardcoded secrets or tokens detected in code
Line 6: api_key = "sk-1234567890abcdef"
Recommendation: Use environment variables or configuration files to store secrets.
🟡 [PY010] Using weak cryptographic algorithms
Line 15: hash_value = hashlib.md5(data).hexdigest()
Recommendation: Use modern cryptographic algorithms: SHA-256 instead of MD5/SHA1.
🐍 Python API
from safeai import CodeAnalyzer
# Initialize analyzer
analyzer = CodeAnalyzer()
# Analyze code string
code = "result = eval('1 + 1')"
issues = analyzer.analyze_code(code)
# Analyze file
issues = analyzer.analyze_file("main.py")
# Analyze directory
results = analyzer.analyze_directory("./myproject")
# Get rules information
rules = analyzer.get_rules_info()
🔧 Configuration
Ignore Patterns
SafeAI automatically ignores common directories:
__pycache__,.git,.pytest_cachevenv,env,.venv,.envnode_modules,.tox,.noxbuild,dist,*.egg-info
Custom Ignore Patterns
safeai scan ./myproject --ignore custom_dir,another_dir
🛠️ Development
Setup Development Environment
# Clone repository
git clone https://github.com/whickybravo388/safeai.git
cd safeai
# Install in development mode
pip install -e .
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
ruff check .
# Run type checking
mypy safeai/
Adding Custom Rules
from safeai.rules.base import BaseRule
class CustomRule(BaseRule):
id = "CUSTOM001"
description = "Custom security rule"
severity = "MEDIUM"
recommendation = "Fix this issue"
def check(self, code: str, ast_tree=None):
# Your detection logic here
if "dangerous_pattern" in code:
return self._create_issue(
line=1,
column=0,
code_snippet="dangerous_pattern",
details="Custom issue detected"
)
return None
📊 CI/CD Integration
GitHub Actions
name: Security Scan
on: [push, pull_request]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.9"
- name: Install SafeAI
run: pip install safeai
- name: Run security scan
run: safeai scan . --fail-on-error
GitLab CI
security-scan:
stage: test
image: python:3.9
script:
- pip install safeai
- safeai scan . --fail-on-error
🤝 Contributing
We welcome contributions! Please see our Contributing Guide for details.
Development Workflow
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run the test suite
- Submit a pull request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Inspired by tools like Bandit and Safety
- Built with Rich for beautiful terminal output
- Uses Python's built-in
astmodule for code analysis
📞 Support
- 📧 Email: whickybravo388@gmail.com
- 🐛 Issues: GitHub Issues
🔄 Changelog
v0.1.0 (2024-01-XX)
- Initial release
- 11 security rules for Python
- CLI interface with multiple output formats
- Comprehensive test suite
- Full documentation
Made with ❤️ by the SafeAI Team
Metadata
Release files for safeai-scanner 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| safeai_scanner-0.1.1.tar.gz | 31.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| safeai_scanner-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 52.2 kB
Release files / safeai_scanner-0.1.1.tar.gz
| Download URL | safeai_scanner-0.1.1.tar.gz |
|---|---|
| Size | 31.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d4df1f37896938077e1bf5568a7b303662747af70dc046dbd9d883f7071ae0d4
|
|
BLAKE2b-256 checksum How to use checksums |
0f2258ea387036576a32e591032375c4234b7a92ea385ae71923b9c6d76ec5ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / safeai_scanner-0.1.1-py3-none-any.whl
| Download URL | safeai_scanner-0.1.1-py3-none-any.whl |
|---|---|
| Size | 20.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
45e8ed05f0706f191be31753c13a0b4b0e653309047a34fc436aa184e754f8e4
|
|
BLAKE2b-256 checksum How to use checksums |
43b3d8cbf23ff33d69cd375b37cd32c2bc964a62f144ed1014beef86cba29a51
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|