safety是一个依赖项安全扫描,主要是发现项目环境下的依赖模块是否是存在漏洞的版本。
pip install safety
扫描整个环境
safety check
仅检查当前项目的依赖项
safety check -r requirements.txt
检查某一个依赖项
echo "insecure-package==0.1" | safety check --stdin
但是需要一个漏洞库,官方免费的漏洞库是每一个月更新一次,需要最新最及时的可以选择购买一个月99$的服务。https://pyup.io/safety/
第一次运行的时候会自动请求,建议添加--cache
参数来缓存数据库,避免每次扫描都需要联网查询。网络不好的话可以自己下载:https://github.com/pyupio/safety-db/tree/master/data。目录下insecure.json文件,使用的时候用参数`--db`来指定文件。
safety check --db="C:\Users\user\Desktop\python code audit\safetydata" -r requirements.txt --full-report
在线的检查依赖项:https://pyup.io/tools/requirements-checker/
一个关于漏洞依赖的小型展示网站:https://pyupio.github.io/safety-db/
safety的其他参数:https://github.com/pyupio/safety/blob/master/safety/cli.py
静态代码扫描,食用简单,精准度一般。
bandit -r path/to/your/code
如果有漏洞存在,会显示类似如下情况
>> Issue: [B605:start_process_with_a_shell] Starting a process with a shell, possible injection detected, security issue.
Severity: High Confidence: High
Location: .\code_audit\views.py:94
More Info: https://bandit.readthedocs.io/en/latest/plugins/b605_start_process_with_a_shell.html
93 ip = request.GET.get('ip')
94 flag = os.system('ping -n 1 %s' %ip)
95 return HttpResponse('<p>%s</p>' %(flag)) #127.0.0.1&&whoami
项目地址:https://github.com/PyCQA/bandit
面向现代DevOps团队的开源工具,可以快速扫描应用程序中的多种漏洞,比如凭据泄露,静态代码扫描,依赖审查等。
docker pull shiftleft/sast-scan
使用docker扫描python项目
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app --type python
运行后会在扫描的目录下生成一个report目录,里面有生成的报告。而且可以跟CI/CD集成。
AppScan CodeSweep是VSCode的一个代码扫描插件,每次保存文件的时候插件会根据规则检查代码是否符合安全标准。但是只会对当前文件扫描。
搜索CodeSweep
安装,左侧活动栏就会出现一个新的图标,点击就可以查看检查到的问题和下面的代码规则。