Home

Awesome

Flake8 Secure Coding Standard Plugin

PyPI - Python Version PyPI version CI Build CodeQL pre-commit.ci status Coverage Status

flake8 plugin that enforces some secure coding standards.

Installation

pip install flake8-secure-coding-standard

Flake8 codes

CodeDescription
SCS100Use of os.path.abspath() and os.path.relpath() should be avoided in favor of os.path.realpath()
SCS101Use of eval() and exec() represent a security risk and should be avoided
SCS102Use of os.system() should be avoided
SCS103Use of shell=True in subprocess functions or use of functions that internally set this should be avoided
SCS104Use of tempfile.mktemp() should be avoided, prefer tempfile.mkstemp()
SCS105Use of yaml.load() should be avoided, prefer yaml.safe_load() or yaml.load(xxx, Loader=SafeLoader)
SCS106Use of jsonpickle.decode() should be avoided
SCS107Use of debugging code should not be present in production code (e.g. import pdb)
SCS108assert statements should not be present in production code
SCS109Use of builtin open for writing is discouraged in favor of os.open to allow for setting file permissions
SCS110Avoid using os.popen() as it internally uses subprocess.Popen with shell=True
SCS111Use of shlex.quote() should be avoided on non-POSIX platforms
SCS112Avoid using os.open() with unsafe file permissions
SCS113Avoid using pickle.load() and pickle.loads()
SCS114Avoid using marshal.load() and marshal.loads()
SCS115Avoid using shelve.open()
SCS116Avoid using os.mkdir and os.makedirs with unsafe file permissions
SCS117Avoid using os.mkfifo with unsafe file permissions
SCS118Avoid using os.mknod with unsafe file permissions
SCS119Avoid using os.chmod with unsafe file permissions (W ^ X for group and others)

Plugin configuration options

This plugin supports some configuration options that may either be specified directly on the command line with a flag using the option name as --name or by specifying them in one of flake8's configuration files (ie. pyproject.toml, setup.cfg, .flake8, etc.).

Available options:

Option nameOption typeDefault valueRelated error code
os-open-modemode-like0 (off)SCS112
os-mkdir-modemode-like0 (off)SCS116
os-mkfifo-modemode-like0 (off)SCS117
os-mknod-modemode-like0 (off)SCS118

Mode-like options

Mode-like options are configuration options for errors/warnings that relate to some function that accepts a mode parameter (or similar) that control some file or directory permissions. For those kind of options, the plugin understands a variety of values that must be specified as string. They will then be parsed into a list of allowed mode values:

Example of values (for pyproject.toml):

    [tool.flake8]
    os-open-mode = '0'            # check disabled
    os-open-mode = 'no'           # check disabled
    os-open-mode = '493'          # all modes from 0 to 493 (=0o755)
    os-open-mode = '0o755'        # all modes from 0 to 0o755
    os-open-mode = '0o755,'       # only 0o755 (notice the comma)
    os-open-mode = '0o644,0o755'  # only 0o644 and 0o755

You can also specify those options directly on the command line:

python3 -m flake8 --os-open-mode='0o755'

Pre-commit hook

See pre-commit for instructions

Sample .pre-commit-config.yaml:

-   repo: https://github.com/PyCQA/flake8
    rev: 4.0.0
    hooks:
    -   id: flake8
        additional_dependencies: [flake8-secure-coding-standard]