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验证, 文件上传安全, 文件安全验证, 文件签名验证, 网络信息收集, 网络威胁情报, 网络安全, 网络安全扫描, 调试辅助, 逆向工具, 钓鱼攻击防御, 隐私保护