Sumair-Motwani/Security-scanner

GitHub: Sumair-Motwani/Security-scanner

一个基于 Flask 的轻量级网络安全工具,通过 URLhaus 威胁情报实时检测恶意 URL 并对文件上传进行类型验证与签名校验。

Stars: 0 | Forks: 0

# 安全扫描器 - 安装与配置指南 ## 项目概述 一款专业的网络安全工具,用于检测恶意 URL 并验证文件上传,防范网络钓鱼、勒索软件和恶意软件攻击。 ## 功能特性 ✓ 使用 URLhaus 数据库进行实时 URL 威胁检测 ✓ 带有 MIME 类型验证的文件上传校验 ✓ 速率限制以防止滥用 ✓ CSRF 保护 ✓ 安全响应头实现 ✓ 文件签名验证(Magic bytes) ✓ 专业的安全优先设计 ## 前置条件 - Python 3.8 或更高版本 - pip (Python 包管理器) - Git (可选,用于克隆代码库) ## 安装步骤 ### 第 1 步:创建项目文件夹 ``` mkdir security-scanner cd security-scanner ``` ### 第 2 步:创建虚拟环境 (推荐) ``` # 在 Windows 上 python -m venv venv venv\Scripts\activate # 在 macOS/Linux 上 python3 -m venv venv source venv/bin/activate ``` ### 第 3 步:安装依赖项 ``` pip install -r requirements.txt ``` 重要提示:在 Windows 上,安装 `python-magic` 需要额外的设置: ``` pip install python-magic-bin ``` 在 macOS 上 (使用 Homebrew): ``` brew install libmagic pip install python-magic ``` 在 Linux 上 (Ubuntu/Debian): ``` sudo apt-get install libmagic1 pip install python-magic ``` ### 第 4 步:创建项目结构 在您的项目目录中创建以下文件夹: ``` security-scanner/ ├── app.py ├── requirements.txt ├── templates/ │ └── index.html ├── uploads/ └── README.md (this file) ``` ### 第 5 步:运行应用程序 ``` python app.py ``` 您应该会看到类似如下的输出: ``` WARNING in app.run: This is a development server. Do not use it in production deployments. Running on http://127.0.0.1:5000 ``` ### 第 6 步:访问应用程序 打开您的 Web 浏览器并访问: ``` http://localhost:5000 ``` ## 使用方法 ### URL 扫描器 1. 在“输入要扫描的 URL”字段中粘贴可疑的 URL 2. 点击“扫描 URL” 3. 扫描器将对照已知的恶意软件数据库进行检查 4. 结果将显示该 URL 是安全、危险还是无法验证 ### 文件扫描器 1. 点击“选择要扫描的文件”并选取一个文件 2. 点击“扫描文件” 3. 系统会验证文件类型并检查是否存在危险的扩展名 4. 结果将提示该文件是安全的还是被阻止的 ## 已实现的安全特性 ### 1. 文件验证 - 允许文件类型的白名单 (图片、PDF、文档) - 危险扩展名的黑名单 (.exe、.bat、.dll 等) - 文件签名验证 (Magic bytes) - 最大文件大小限制 (25MB) ### 2. URL 验证 - URL 格式验证 - 与 URLhaus 威胁情报 API 集成 - API 调用的超时保护 - 安全的错误处理 ### 3. Web 安全 - CSRF Token 保护 (Flask-WTF) - 速率限制 (URL 扫描每分钟 10 次请求,文件扫描每分钟 5 次) - 安全响应头: - X-Content-Type-Options: nosniff - X-Frame-Options: SAMEORIGIN - X-XSS-Protection - Strict-Transport-Security - Content-Security-Policy ### 4. 输入验证 - 使用 werkzeug.utils.secure_filename 进行安全的文件名处理 - URL 长度验证 (最多 2048 个字符) - 文件大小验证 - 空文件检测 ### 5. 日志与监控 - 用于调试的错误日志记录 - 文件扫描的时间戳记录 - 用于安全审计的请求追踪 ## 文件结构说明 ### app.py 包含以下内容的主 Flask 应用程序: - 带有 URLhaus API 集成的 URL 扫描端点 - 带有 MIME 验证的文件扫描端点 - 安全中间件和响应头 - 速率限制配置 - 错误处理器 ### templates/index.html 带有以下功能的前端界面: - URL 输入和扫描界面 - 文件上传和扫描界面 - 实时结果显示 - 专业的安全主题设计 - 移动端响应式布局 ### uploads/ 用于临时存储已上传文件以供扫描的目录。 ## 自定义选项 ### 更改端口 在 app.py 中,修改最后一行: ``` app.run(debug=False, host='127.0.0.1', port=8080) # Change 5000 to your port ``` ### 调整速率限制 在 app.py 中,找到 @limiter.limit 装饰器: ``` @limiter.limit("10 per minute") # Change this value def scan_url(): ``` ### 添加更多允许的文件类型 在 app.py 中,修改 ALLOWED_EXTENSIONS 集合: ``` ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'svg', 'pdf', 'txt', 'doc', 'docx', 'pptx'} ``` ### 修改最大文件大小 在 app.py 中: ``` app.config['MAX_CONTENT_LENGTH'] = 50 * 1024 * 1024 # 50MB ``` ## 故障排除 ### 问题:"ModuleNotFoundError: No module named 'flask'" 解决方案:确保您的虚拟环境已激活,并且依赖项已安装 ``` pip install -r requirements.txt ``` ### 问题:"python-magic" 安装失败 解决方案:首先安装系统依赖项 (因平台而异,请参阅安装步骤 3) ### 问题:端口 5000 已被占用 解决方案:在 app.py 中更改端口,或者终止占用端口 5000 的进程 ``` # Windows netstat -ano | findstr :5000 taskkill /PID /F # macOS/Linux lsof -i :5000 kill -9 ``` ### 问题:文件上传不工作 解决方案:确保 "uploads" 目录存在: ``` mkdir uploads ``` ## 部署注意事项 ### 针对生产环境: 1. 设置 debug=False (已完成) 2. 使用生产级 WSGI 服务器,例如 Gunicorn: pip install gunicorn gunicorn app:app 3. 使用带有正规 SSL 证书的 HTTPS 4. 将 secret key 转移到环境变量中: app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') 5. 在 Flask 前端使用反向代理 (Nginx) 6. 配置合适的日志记录 ### 环境变量: 创建一个 .env 文件: ``` FLASK_ENV=production SECRET_KEY=your-secure-random-key-here ``` ## 测试应用程序 ### 测试 URL (安全): ``` https://www.google.com ``` ### 测试 URL (恶意 - 将会被拦截): ``` https://test.malware.org ``` ### 测试文件: - 使用合法的图片文件 (PNG, JPG) - 系统将阻止带有危险扩展名的文件 ## API 端点参考 ### POST /api/scan-url 请求: ``` { "url": "https://example.com" } ``` 响应 (安全): ``` { "safe": true, "reason": "URL appears safe", "source": "URLhaus" } ``` 响应 (危险): ``` { "safe": false, "reason": "Malware detected: malware", "source": "URLhaus" } ``` ### POST /api/scan-file 表单数据: ``` file: ``` 响应: ``` { "safe": true, "filename": "document.pdf", "message": "File is safe", "timestamp": "2024-01-15T10:30:00" } ``` ## 重要提示 1. 应用程序需要网络连接才能进行 URL 扫描 (URLhaus API) 2. 文件扫描在本地执行,不会上传到外部服务 3. 速率限制可防止滥用,但频繁扫描时可能需要等待间隔 4. 文件签名虽经过验证,但并非 100% 万无一失 - 使用时请务必谨慎 5. 保管好 SECRET_KEY 并在生产环境中进行更改 ## 项目统计 - 代码行数:~400 - 安全特性:8+ - 速率限制:已配置 - 支持的文件类型:8 种格式 - 最大文件大小:25MB - API 集成:URLhaus 威胁情报 ## 许可证与致谢 这是您原创的网络安全项目,可用于教育和专业用途。 ## 支持与调试 通过修改 app.py 启用 debug 日志记录: ``` logging.basicConfig(level=logging.DEBUG) ``` 有关 URLhaus API 的问题,请访问: https://urlhaus-api.abuse.ch/v1/ 为网络安全毕业设计创建 版本 1.0
标签:AMSI绕过, API限流, CSRF防护, DAST, Flask框架, Go语言工具, GraphQL安全矩阵, Magic Bytes, Python开发, URLhaus, XML 请求, 企业安全工具, 勒索软件检测, 后端开发, 威胁检测, 安全响应头, 安全开发, 安全扫描器, 恶意URL检测, 恶意软件分析, 文件MIME验证, 文件上传安全, 文件安全验证, 文件签名验证, 网络信息收集, 网络威胁情报, 网络安全, 网络安全扫描, 调试辅助, 逆向工具, 钓鱼攻击防御, 隐私保护