AI-powered web vulnerability scanner based on OWASP Top 10
Project description
AIScanner 🔍
AIScanner is an AI-powered web vulnerability scanner that automatically crawls URLs and flags security risks based on the OWASP Top 10.
✨ Features
- 🌐 Recursive web crawler — follows internal links up to a configurable depth
- 🧠 Technology detection — identifies WordPress, React, Angular, Vue, Django, Bootstrap, jQuery, Next.js, and more
- 🛡️ OWASP Top 10 checks — detects XSS, SQL Injection exposure, missing CSRF tokens, sensitive data exposure, and open redirects
- 🎯 Severity classification — each risk is tagged CRITICAL / HIGH / MEDIUM / LOW / SAFE
- 📄 JSON output — results are saved to
crawl_results.json - 💬 Language detection — detects the page language (English, French, Spanish, …)
📦 Installation
pip install AIScanner
Requires Python 3.9 or higher.
🚀 Quick Start
As a CLI tool
After installation, the aiscanner command is available globally:
aiscanner
You will be prompted to enter a URL:
🔎 Enter URL to crawl: https://example.com
As a Python library
from AIScanner import WebAnalyzer, WebCrawler
# Analyze a single URL
analyzer = WebAnalyzer(".")
result = analyzer.analyze("https://example.com")
print(result["language"]) # e.g. "English"
print(result["tech_stack"]) # e.g. ["Bootstrap", "jQuery"]
for risk in result["risks"]:
print(f"[{risk['severity']}] {risk['owasp_id']}: {risk['name']}")
# Crawl an entire site (max 2 levels deep)
crawler = WebCrawler(".", analyzer, max_depth=2)
results = crawler.run("https://example.com")
# results is a dict: { url -> analysis_result }
🧩 Project Structure
src/AIScanner/
├── __init__.py # Public API
├── exceptions.py # Custom exceptions
├── logger.py # Pre-configured logger
└── crawler/
├── __init__.py
├── crawl.py # WebCrawler — recursive URL crawler
└── web_analyzer.py # WebAnalyzer — tech detection + OWASP checks
🛡️ OWASP Checks Performed
| OWASP ID | Check | Severity |
|---|---|---|
| A01 | Broken Access Control — Form without CSRF protection | MEDIUM |
| A02 | Sensitive Data Exposure — password/credit card/SSN in page text | CRITICAL |
| A03 | XSS — inline <script> tags found |
HIGH |
| A03 | SQL Injection exposure — SQL error strings in page | HIGH |
| A05 | Missing X-Frame-Options / Content-Security-Policy | LOW |
| A10 | Open Redirect — ?redirect= or ?next= parameters |
MEDIUM |
⚙️ Configuration
| Parameter | Default | Description |
|---|---|---|
max_depth |
2 |
How many link levels deep to crawl |
base_path |
"." |
Directory where crawl_results.json is saved |
🔧 Development Setup
git clone https://github.com/prodip1023/AIScanner.git
cd AIScanner
# Install with dev dependencies
pip install -e ".[testing]"
# Run tests
pytest -v tests/
# Lint
flake8 src
# Type check
mypy src
📤 Publishing (maintainers)
# 1. Bump version in pyproject.toml and src/AIScanner/__init__.py
# 2. Commit and tag
git tag v0.1.0
git push origin v0.1.0
# GitHub Actions will automatically build and publish to PyPI
📄 License
Apache 2.0 © 2024 prodip1023
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 aiscanner-0.1.0.tar.gz.
File metadata
- Download URL: aiscanner-0.1.0.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02a131740da8f44c930b17373583b0e3e7c191b40f29c3910ff33fde67a53e05
|
|
| MD5 |
1cc3b0e778251bf5883a78387fc739c9
|
|
| BLAKE2b-256 |
13183d98bb782da1cff6c361aa09397c8675debacd37ed5ac576261c85106ef4
|
File details
Details for the file aiscanner-0.1.0-py3-none-any.whl.
File metadata
- Download URL: aiscanner-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7798ac788ffbb7b01b6e6bee76ea7e7f907b10e0ade7ff55b24fe9b5fc24411a
|
|
| MD5 |
669dcec54bbc9153f02fe1ab601813e3
|
|
| BLAKE2b-256 |
59032f60ce97ada97e228c0b29d172c339040eccb330e2fca8bd14b8ad65d471
|