Bandit是一种旨在查找Python代码中常见安全问题的工具。
它处理每个文件 从中构建AST 然后针对AST节点运行适当的插件。
当它扫描完成所有文件之后将生成报告。
以下安装部署过程基于Windows操作系统,假设已经安装并设置好了以下软件。
“Python 3.7.8 AMD64”
“64-bit Git for Windows”
最便捷的安装方式是通过pip直接安装.whl文件,但是截止到写作本文时,最新的1.6.2版本是在2019年07月02日发布的,其后的代码更新并没有反应到.whl当中。
因此接下来,先通过pip安装,再更新源代码文件。
先从以下地址下载Bandit源代码,当前最新版本是2020年05月18日的Commit为b78c938的版本。
https://github.com/PyCQA/bandit
下载完成后将”bandit-master.zip”文件置于D盘根目录下。
执行以下命令。
CD /D D: python -m venv bandit-env bandit-envScriptsactivate pip install bandit RD /S /Q bandit-envLibsite-packagesandit 7z x bandit-master.zip XCOPY /E bandit-masterandit bandit-envLibsite-packagesandit
到这里就安装好了。
下面是涉及到的几个程序的帮助信息。
bandit
Usage: bandit [-h] [-r] [-a {file,vuln}] [-n CONTEXT_LINES] [-c CONFIG_FILE] [-p PROFILE] [-t TESTS] [-s SKIPS] [-l] [-i] [-f {csv,custom,html,json,screen,txt,xml,yaml}] [--msg-template MSG_TEMPLATE] [-o [OUTPUT_FILE]] [-v] [-d] [-q] [--ignore-nosec] [-x EXCLUDED_PATHS] [-b BASELINE] [--ini INI_PATH] [--exit-zero] [--version] [targets [targets ...]] Bandit - a Python source code security analyzer 位置参数: targets 要测试的源文件或目录 可选参数: -h, --help 显示此帮助消息并退出 -r, --recursive 在子目录中查找和处理文件 -a {file,vuln}, --aggregate {file,vuln} 按漏洞(默认)或文件名汇总输出 -n CONTEXT_LINES, --number CONTEXT_LINES 每个问题输出的最大代码行数 -c CONFIG_FILE, --configfile CONFIG_FILE 可选的用于选择插件和覆盖默认值的配置文件 -p PROFILE, --profile PROFILE 要使用的配置文件 默认执行所有测试 -t TESTS, --tests TESTS 以逗号分隔的要运行的测试ID列表 -s SKIPS, --skip SKIPS 以逗号分隔的要跳过的测试ID列表 -l, --level 仅报告给定严重级别或更高级别的问题 (-l for LOW, -ll for MEDIUM, -lll for HIGH) -i, --confidence 仅报告给定置信级别或更高级别的问题 (-i for LOW, -ii for MEDIUM, -iii for HIGH) -f {csv,custom,html,json,screen,txt,xml,yaml}, --format {csv,custom,html,json,screen,txt,xml,yaml} 指定输出格式 --msg-template MSG_TEMPLATE 指定输出消息模板 仅可用于"--format"自定义 请参阅"自定义格式"部分以获取可用值列表 -o [OUTPUT_FILE], --output [OUTPUT_FILE] 将报告写入文件 -v, --verbose 输出额外的信息 例如排除和包含的文件 -d, --debug 打开调试模式 -q, --quiet, --silent 仅在出现错误的情况下显示输出 --ignore-nosec 不要跳过带有"# nosec"注释的行 -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS 从扫描中排除的路径的逗号分隔列表 已支持"glob patterns"匹配模式 请注意这些是除配置文件中提供的排除路径之外的其他路径 (default: .svn,CVS,.bzr,.hg,.git,__pycache__,.tox,.eggs,*.egg) -b BASELINE, --baseline BASELINE 要比较的基线报告的路径 仅接受JSON格式的文件 --ini INI_PATH 提供命令行参数的".bandit"文件的路径 --exit-zero 即使找到结果也以状态码0退出 --version 显示程序的版本号并退出 自定义格式 ---------- 可用标签: {abspath}, {relpath}, {line}, {test_id}, {severity}, {msg}, {confidence}, {range} 用法示例: 默认模板: bandit -r examples/ --format custom --msg-template "{abspath}:{line}: {test_id}[bandit]: {severity}: {msg}" 提供与以下相同的输出: bandit -r examples/ --format custom 标签也可以采用 python string.format() 样式的格式: bandit -r examples/ --format custom --msg-template "{relpath:20.20s}: {line:03}: {test_id:^8}: DEFECT: {msg:>20}" 发现并加载了以下测试: --------------------- B101 assert_used B102 exec_used B103 set_bad_file_permissions B104 hardcoded_bind_all_interfaces B105 hardcoded_password_string B106 hardcoded_password_funcarg B107 hardcoded_password_default B108 hardcoded_tmp_directory B110 try_except_pass B112 try_except_continue B201 flask_debug_true B301 pickle B302 marshal B303 md5 B304 ciphers B305 cipher_modes B306 mktemp_q B307 eval B308 mark_safe B309 httpsconnection B310 urllib_urlopen B311 random B312 telnetlib B313 xml_bad_cElementTree B314 xml_bad_ElementTree B315 xml_bad_expatreader B316 xml_bad_expatbuilder B317 xml_bad_sax B318 xml_bad_minidom B319 xml_bad_pulldom B320 xml_bad_etree B321 ftplib B322 input B323 unverified_context B324 hashlib_new_insecure_functions B325 tempnam B401 import_telnetlib B402 import_ftplib B403 import_pickle B404 import_subprocess B405 import_xml_etree B406 import_xml_sax B407 import_xml_expat B408 import_xml_minidom B409 import_xml_pulldom B410 import_lxml B411 import_xmlrpclib B412 import_httpoxy B413 import_pycrypto B501 request_with_no_cert_validation B502 ssl_with_bad_version B503 ssl_with_bad_defaults B504 ssl_with_no_version B505 weak_cryptographic_key B506 yaml_load B507 ssh_no_host_key_verification B601 paramiko_calls B602 subprocess_popen_with_shell_equals_true B603 subprocess_without_shell_equals_true B604 any_other_function_with_shell_equals_true B605 start_process_with_a_shell B606 start_process_with_no_shell B607 start_process_with_partial_path B608 hardcoded_sql_expressions B609 linux_commands_wildcard_injection B610 django_extra_used B611 django_rawsql_used B701 jinja2_autoescape_false B702 use_of_mako_templates B703 django_mark_safe
bandit-baseline
Usage: bandit-baseline [-h] [-f {txt,html,json}] targets [targets ...] Bandit Baseline - Generates Bandit results compared to a baseline 位置参数: targets 要测试的源文件或目录 可选参数: -h, --help 显示此帮助消息并退出 -f {txt,html,json} 指定输出格式 可以添加其他Bandit参数 例如严重性过滤 (-ll) 并将其传递给Bandit程序
bandit-config-generator
Usage: bandit-config-generator [-h] [--show-defaults] [-o OUTPUT_FILE] [-t TESTS] [-s SKIPS] Bandit Config Generator 此工具用于生成可选的配置文件。 该配置文件可用于包含或跳过测试并覆盖插件的值。 当用于存储输出配置文件时此工具将输出包含所有插件及其默认设置的模板。 任何未覆盖的设置都可以从配置文件中安全的删除并将使用默认值。 Bandit程序将首选配置文件中的设置而不是内置值。 可选参数: -h, --help 显示此帮助消息并退出 --show-defaults 显示每个插件的默认设置值但不输出配置文件 -o OUTPUT_FILE, --out OUTPUT_FILE 输出文件以保存配置文件 -t TESTS, --tests TESTS 要运行的测试名称列表 -s SKIPS, --skip SKIPS 要跳过的测试名称列表
Bandit使用Python标准库中的ast模块来分析你的Python代码。
ast模块仅能解析在其导入源的解释器版本中有效的Python代码。
这也就是说,如果你的目标Python代码计划在Python 2.7环境下运行,那么就应该使用基于Python 2.7环境部署的Bandit程序对其进行分析,其他版本同理。
最新评论