Skip to main content

Security scanner for URLs, browser extensions, IDE plugins, and software packages using BrowserTotal

Project description

BrowserTotal Scanner

A Python SDK for security scanning URLs, browser extensions, IDE plugins, and software packages using BrowserTotal.

Installation

pip install browsertotal-scanner

After installation, install Playwright browsers:

playwright install chromium

Quick Start

import asyncio
from browsertotal_scanner import scan_url, scan_extension, BrowserStore

async def main():
    # Scan a URL
    result = await scan_url("https://example.com")
    print(f"URL Status: {result.status.value}, Score: {result.score}")

    # Scan a Chrome extension
    result = await scan_extension("cjpalhdlnbpafiamejdnhcphjbkeiagm", BrowserStore.CHROME)
    print(f"Extension: {result.name}, Status: {result.status.value}")

asyncio.run(main())

Features

  • URL Scanning: Analyze websites for security threats
  • Browser Extensions: Scan extensions from Chrome, Firefox, Edge, Opera, Safari, and Brave
  • IDE Plugins: Scan VS Code, Open VSX, and JetBrains plugins
  • Package Registries: Scan npm, PyPI, WordPress plugins, and more
  • AI Analysis: Optional AI-powered threat detection
  • Progress Tracking: Monitor scan progress with callbacks
  • Async Support: Built with asyncio for efficient concurrent scanning

Supported Platforms

Category Platforms
Browser Extensions Chrome, Firefox, Edge, Opera, Safari, Brave
IDE Extensions VS Code Marketplace, Open VSX, JetBrains
Package Registries npm, PyPI, WordPress
Other Hugging Face, AppSource, PowerShell Gallery, Salesforce AppExchange

Usage

Using the Scanner Class

For multiple scans, use the BrowserTotalScanner class to reuse the browser instance:

import asyncio
from browsertotal_scanner import BrowserTotalScanner, ScannerOptions, BrowserStore

async def main():
    options = ScannerOptions(
        headless=True,
        timeout=420000,
        disable_ai=True  # Set to False for AI analysis
    )

    async with BrowserTotalScanner(options) as scanner:
        # Scan multiple targets
        url_result = await scanner.scan_url("https://example.com")
        ext_result = await scanner.scan_extension("ext-id", BrowserStore.CHROME)
        npm_result = await scanner.scan_npm_package("lodash")

asyncio.run(main())

Convenience Functions

For one-off scans:

from browsertotal_scanner import (
    scan_url,
    scan_extension,
    scan_vscode_extension,
    scan_jetbrains_plugin,
    scan_npm_package,
    scan_pypi_package,
    scan_wordpress_plugin,
)

# Each function creates and closes its own browser instance
result = await scan_url("https://example.com")
result = await scan_extension("extension-id", "chrome")
result = await scan_vscode_extension("publisher.extension")
result = await scan_jetbrains_plugin("plugin-id")
result = await scan_npm_package("package-name")
result = await scan_pypi_package("package-name")
result = await scan_wordpress_plugin("plugin-slug")

Progress Tracking

Monitor scan progress with a callback:

from browsertotal_scanner import scan_url, ScanProgress

def on_progress(progress: ScanProgress):
    print(f"[{progress.phase.value}] {progress.message}")

result = await scan_url("https://example.com", on_progress=on_progress)

Configuration Options

from browsertotal_scanner import ScannerOptions

options = ScannerOptions(
    headless=True,          # Run browser in headless mode (default: True)
    timeout=420000,         # Timeout in milliseconds (default: 420000)
    wait_for_results=True,  # Wait for scan completion (default: True)
    disable_ai=True,        # Skip AI analysis for faster scans (default: True)
    user_data_dir=None,     # Custom browser profile directory
)

Environment Variables

  • BROWSERTOTAL_URL: Override the BrowserTotal base URL (default: https://browsertotal.com)

Result Types

UrlScanResult

@dataclass
class UrlScanResult:
    url: str
    status: ScanStatus  # safe, suspicious, malicious, unknown, error
    score: int
    threats: list[ThreatInfo]
    categories: list[str]
    scan_url: str
    timestamp: str
    raw: dict[str, Any]

ExtensionScanResult

@dataclass
class ExtensionScanResult:
    extension_id: str
    name: str
    status: ScanStatus
    score: int
    permissions: list[str]
    threats: list[ThreatInfo]
    scan_url: str
    timestamp: str
    raw: dict[str, Any]

PackageScanResult

@dataclass
class PackageScanResult:
    package_name: str
    platform: str
    name: str
    version: str
    status: ScanStatus
    score: int
    dependencies: list[str]
    threats: list[ThreatInfo]
    scan_url: str
    timestamp: str
    raw: dict[str, Any]

Requirements

  • Python >= 3.9
  • Playwright >= 1.40.0

License

MIT License - see LICENSE for details.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

browsertotal_scanner-1.0.0.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

browsertotal_scanner-1.0.0-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file browsertotal_scanner-1.0.0.tar.gz.

File metadata

  • Download URL: browsertotal_scanner-1.0.0.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for browsertotal_scanner-1.0.0.tar.gz
Algorithm Hash digest
SHA256 2383e590b29dda1574bad978876bb8f87f5b6e1b5767f4edeedf7e5214fade6c
MD5 301c398675e4f69f686cbb9d53e8fae4
BLAKE2b-256 c9cc6275a62d321fd09a111cdee9a2e7627d6ad901b92f4ec0ec681a67bd6222

See more details on using hashes here.

File details

Details for the file browsertotal_scanner-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for browsertotal_scanner-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e6bd0108f443f889dbd217e58aa59a9ba22719fe49ff2a20eff00a062147f716
MD5 5cbcf9538b96e4bbf480f827899c7a9e
BLAKE2b-256 392aaf2b79a24eb298d91fc987bde53684efaca4c702af0e77ac4c5d1b4f7816

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page