目次
PyCharm での単一ファイルまたはプロジェクト ディレクトリのスキャン
※今後の技術共有や即時アップデート、よりタイムリーな技術情報や学習技術資料は、公式アカウントCTO Plusにて公開してまいりますので、公式アカウント: CTO Plusをフォローしてください。
前回の記事では、Python コードのセキュリティ脆弱性をスキャンするために特に使用されるツールとして Bandit を紹介しました。コード セキュリティの脆弱性スキャンは、ソフトウェアのセキュリティを確保するための重要なリンクの 1 つです。ソフトウェア開発プロセス中に、多くの潜在的なセキュリティ脆弱性が存在します。これらの脆弱性をタイムリーに検出して修復するには、専門的なセキュリティ スキャン ツールを使用する必要があります。Bandit は、コードなどのコード内の潜在的なセキュリティ リスクをチェックするのに役立ちます。インジェクション、XSS攻撃、SQLインジェクション、機密情報の漏洩など。
この記事では、この人気のあるコード セキュリティ脆弱性スキャン ツールである Bandit の Python 3.11 バージョンを紹介し、Bandit の特徴、使用法、プロジェクトでの適用シナリオを紹介し、実際のケースを通じてその使用法と効果を示します。
この記事「Python コード スキャン: エンタープライズ レベルのコード セキュリティ脆弱性スキャン バンディット」は、「コード標準とスキャン」シリーズの最後の記事です。ご自身の状況に応じて過去の記事を読むことができます。同時に、フォローアップも行ってください。パブリック アカウントCTO Plus
「エンタープライズレベルの Python コードの静的スキャン - コード仕様、ロジック、文法、セキュリティ チェック、自動コード配置の概要」
「Python コード スキャン: 新世代 Python リンター ツール Ruff」
「Python コード スキャン: Python コードの品質を向上させるアーティファクト - pylint の詳細な説明と使用ガイド」
「Python コードスキャン: 軽量 Python 静的コード解析ツール pyflakes」
「Python コード スキャン: Python コードの仕様とエラー チェックのための強力なツール - flake8 の詳細な説明と実践」
「Python コード スキャン: mypy の静的型チェックに最適な選択」
「Python コード スキャン: Python コードの冗長性を自動的に削除する - オートフレークの使用に関するヒントと例」
「Python コード スキャン: Python コードの書式設定のための強力なツール - yapf の詳細な説明とベスト プラクティス」
「Python コード スキャン: ワンクリックで Python コードをフォーマットする黒魔術 - 黒の使用法チュートリアル」
「Python コードスキャン: import 文自動仕分けツール - isor の使用ガイドと使用例」
「Python コード スキャン: Python コード スタイルを自動的に修復するツール - autopep8 の詳細な説明と例」
「Python コード スキャン: エンタープライズ レベルのコード セキュリティ脆弱性スキャン バンディット」
バンディットとは何ですか?
Bandit は、Python コードのセキュリティ問題を検出するために使用される Python ベースのコード セキュリティ脆弱性スキャン ツールです。これにより、開発者はコード内のセキュリティの脆弱性を迅速に発見して修復し、ソフトウェアのセキュリティを向上させることができます。Bandit は、標準ライブラリの AST モジュールを使用して、Python ソース コードを Python 構文ノードで構成されるツリーに解析します。Bandit を使用すると、ユーザーはカスタム テストを作成できます。テストが完了すると、Bandit はソース コードのセキュリティ レポートを生成します。
特徴
Python Bandit には次の特徴があります。
1. 静的コード分析: Python Bandit は、ソース コードを静的に分析することでセキュリティの脆弱性をチェックし、コードを実行せずに潜在的なセキュリティ問題を見つけることができます。
2. カスタマイズされたルール (複数の脆弱性検出ルール): Python Bandit は、コード インジェクション、XSS 攻撃、SQL インジェクションなどを含む一連のデフォルト ルールを提供し、カスタム ルールもサポートしています。プロジェクトのニーズに基づいて独自のルールを定義し、特定のセキュリティ要件を満たすことができます。
3. 高度な検出: Python Bandit は、コード インジェクション、XSS 攻撃、機密情報の漏洩、脆弱なパスワードなど、さまざまな一般的なセキュリティ問題を検出できます。一連のアルゴリズムとパターン マッチング技術を使用して、検出精度を向上させます。
4. レポートの生成: Python Bandit は、各セキュリティ問題の説明、場所、推奨される修正を含む詳細なレポートを生成できます。これらのレポートは、セキュリティ問題を迅速に特定して解決するのに役立ちます。
5. 簡単な統合と柔軟な構成オプション: Bandit は、自動スキャンを容易にするために、他のツール (CI/CD ツール、エディター プラグイン - PyCharm など) と統合できます。同時に、Bandit はプロジェクトのニーズに応じてカスタマイズできる豊富な構成オプションを提供します。
このツールのソースコードと原理については後ほど詳細に分析します。公式アカウントCTO Plusのフォロー記事も歓迎です。ご質問がある場合は、バックグラウンドでメッセージを残してください。
インストールと構成
Python Bandit の使用は非常に簡単で、次の手順に従うだけです。
1. Python Bandit のインストール: Python Bandit は、以下に示すように pip コマンドを通じてインストールできます。
pip インストールバンディット
インストールが完了すると、D:\env311\Scripts ディレクトリに実行可能ファイル Bandit.exe が表示されます。
バンディットの構成
Bandit はデフォルトでは構成を必要としません。プロジェクトの実際のニーズに応じて構成を行う必要がある場合は、bandit.yaml という名前の構成ファイルを渡すことができます。このファイルをプロジェクトのルート ディレクトリに作成し、ルールとルールを指定できます。チェックする必要があるルール その他の設定オプション。簡単な構成ファイルの例を次に示します。
include:
- "*.py"
exclude:
- "tests/*"
plugins:
blacklist_calls: # 检测黑名单函数调用
functions:
- os.system
- subprocess.Popen
上記の設定ファイルでは、 include はチェックする必要があるファイルを指定し、 exclude はチェックから除外する必要があるファイルまたはディレクトリを指定し、 plugins はチェックする必要があるルールとブラックリスト関数呼び出しを指定します。
Pycharm設定外部ツール
Bandit は、PyCharm の外部ツールとしてインストールできます。「環境設定」を開き、「ツール」>「外部ツール」に移動します。そこで、次の構成で新しいツールを追加します。他の構成オプションについては、公式ドキュメントを参照してください。私の構成オプションは次のとおりです。
構成が完了したら、PyCharm で autopep8 ツールを使用できるようになります。
練習を使用する
Bandit を使用してコードのセキュリティの脆弱性をスキャンするときに考慮すべきベスト プラクティスをいくつか示します。
1. バージョン管理との組み合わせ: Bandit のスキャン操作をバージョン管理システムと組み合わせて使用することをお勧めします。これにより、コードの送信前または継続的統合環境でスキャン操作を実行でき、コード内のセキュリティ問題をタイムリーに発見して修正するのに役立ちます。
2. エディター プラグインとの連携: Bandit は、多くの一般的なエディター (VS Code、PyCharm など) とのプラグイン統合を提供します。対応するプラグインをインストールすると、エディターでコードのセキュリティの脆弱性をリアルタイムに確認し、タイムリーなフィードバックを提供してコードの品質を向上させることができます。
3. 定期的なスキャンと更新: コードのセキュリティの脆弱性は動的な問題であり、新しい脆弱性や攻撃方法が常に出現しています。したがって、Bandit を定期的に使用してコードのセキュリティの脆弱性をスキャンし、Bandit のツールとルールを適時に更新してコードのセキュリティを確保することをお勧めします。
4. 他のツールと組み合わせる: Bandit は優れたコード セキュリティ脆弱性スキャン ツールですが、これが唯一のオプションではありません。実際の使用では、他のセキュリティ スキャン ツール (OWASP ZAP、SonarQube など) と組み合わせて包括的なスキャンを実行し、コードのセキュリティをさらに向上させることができます。これらの他のセキュリティ チェック ツールについては、後ほど SDLC 製品の開発プロセスで詳しく紹介しますので、 CTO Plus の背後にある技術記事にご期待ください。
コマンドラインパラメータ
ここでは、Bandit ツールの一般的に使用されるコマンド ライン パラメーターをいくつかまとめます。その他については、公式ドキュメントを参照してください。
--recursive: ディレクトリ内のすべてのファイルを再帰的に処理します。
--exclude=<パターン>: 除外するファイルまたはディレクトリのパターンを設定します。
--configfile=<ファイル>: 設定ファイルを指定します。
次に、いくつかの使用方法と例を紹介します。
単一のファイルをチェックする
次のコマンドを使用して、単一の Python ファイルをスキャンしてセキュリティの脆弱性を見つけることができます。
バンディット /path/to/file.py
これにより、セキュリティ脆弱性の問題と潜在的なリスクがファイルに出力されます。
ディレクトリ全体を確認してください
次のコマンドを使用して、ディレクトリ全体にあるすべての Python ファイルのセキュリティ脆弱性をスキャンできます。
Bandit --recursive /path/to/directory
これにより、ディレクトリを再帰的に走査し、すべての Python ファイルをスキャンしてセキュリティの脆弱性を探します。
PyCharmでの単一ファイルまたはプロジェクト ディレクトリのスキャン
これにより、指定されたパスにあるすべての Python ファイルがスキャンされ、対応するセキュリティ レポートが生成されます。Bandit の出力には、脆弱性レベル、脆弱性の種類、脆弱性の説明、コードの場所などの情報が含まれます。開発者は、出力結果に基づいてコード内のセキュリティ問題を迅速に発見し、修正できます。
使用例
次の内容を含む example.py という名前の Python ファイルがあるとします。
import os
def execute_command(command):
os.system(command)
command = input("Enter a command: ")
execute_command(command)
このコードにはセキュリティ上の脆弱性があり、ユーザーが入力したコマンドは実行のために os.system 関数に直接渡され、コード インジェクションの危険性があります。
Bandit を使用して、コードのセキュリティ脆弱性をスキャンできます。コマンドは次のとおりです。
山賊の例.py
上記のコマンドを実行すると、Bandit は次の結果を出力します。
[メイン] INFO プロファイルには、tests/*、*.py、*.pyw、*.cgi、*.fcgi、*.pyi、*.rpy、*.wsgi、*.cpx、*.pxd、*.pyx、が含まれます。 *.pyd、*.so、*.dll、*.pyc、*.pyo
[メイン] 設定を使用した情報: .bandit
[メイン] Python 3.9.1 で実行されている情報
[メイン] INFO 読み込みプラグイン
[メイン] ロードされた情報プラグイン: BanditBasics、BanditCall、BanditImports、BanditImportsBanned、BanditImportsBlacklist、BanditImportsEnvironment、BanditImportsStdlib、BanditNodeVisitor、BanditPreloader、BanditPythonVersion、BanditSecurityGuard、BanditSecurityNodeVisitor、BanditSecurityPreloader、BanditSecuritySyntaxCheck、 BanditSyntaxCheck、BanditUast、BanditVisitor、BanditVisitorBase、BanditVisitorFactory、BanditVisitorPreloader
[メイン] OS Posix で実行されている情報
[main] 情報 [bandit.core.manager] 問題 [B607:blacklist_calls] サブプロセス モジュールに関連するセキュリティへの影響の可能性を考慮してください。
[main] 情報 [bandit.core.manager] 問題 [B607:blacklist_calls] os.system 関数に関連するセキュリティへの影響の可能性を考慮してください。
[main] 情報 [bandit.core.manager] 問題 [B701:blacklist] 安全でない可能性のある関数の使用 - 代わりに、より安全な 'subprocess.run' の使用を検討してください。
上記の結果からわかるように、Bandit はコード内のセキュリティの脆弱性を検出し、対応する警告メッセージを表示しました。
Bandit の出力によると、コード内のブラックリスト関数呼び出しに問題があることがわかり、代わりにより安全な関数を使用することが推奨されています。
アプリケーションシナリオ
Python Bandit は、多くのプロジェクト、特にユーザー入力や機密データの処理を伴うプロジェクトに適用できます。以下は、私がまとめた Python Bandit のいくつかのアプリケーション シナリオです。
1. Web アプリケーション: Python で書かれた Web アプリケーションの場合、Python Bandit は XSS 攻撃、SQL インジェクション、コード内のコマンド インジェクションなどのセキュリティ問題をチェックするのに役立ちます。
2. コード レビュー (コード セキュリティ): API を開発およびデプロイする際、Python Bandit は、機密情報の漏洩、権限の問題、クロスサイト リクエスト フォージェリ (CSRF) など、コード内のセキュリティの脆弱性をチェックするのに役立ちます。
3. データ処理: ユーザーのパスワードやクレジット カード情報などの機密データを扱うプロジェクトの場合、Python Bandit はコード内のセキュリティ問題をチェックしてデータのセキュリティを確保するのに役立ちます。
4. オープンソース プロジェクト: Python で書かれたオープンソース プロジェクトの場合、Python Bandit はコード内のセキュリティ問題をチェックしてプロジェクトの品質と信頼性を向上させるのに役立ちます。
要約する
Python Bandit は、Python コードのセキュリティ脆弱性をチェックするのに役立つ強力なツールです。コードを静的に分析して潜在的なセキュリティ問題を見つけ、詳細なレポートを生成します。レポートの推奨事項を使用してコード内のセキュリティ問題を修正し、コードの品質と信頼性を向上させることができます。Web アプリケーション、API 開発、データ処理、オープン ソース プロジェクトなどのシナリオでは、Python Bandit はコードのセキュリティを確保する上で重要な役割を果たします。
参考文献
- Bandit へようこそ — Bandit ドキュメント
- GitHub - PyCQA/bandit: Bandit は、Python コード内の一般的なセキュリティ問題を見つけるために設計されたツールです。
- Python コード仕様: エンタープライズ レベルのコード静的スキャン - コード仕様、ロジック、構文、セキュリティ チェック、およびコード仕様の自動配置 (1)_pycharm コード仕様のチェック_SteveRocket のブログ - CSDN ブログ
- https://blog.csdn.net/zhouruifu2015/article/details/129877179
Pythonコラム
https://blog.csdn.net/zhouruifu2015/category_5742543
詳細情報 · WeChat パブリック アカウント [ CTO Plus ] を検索し、フォローして詳細情報を入手し、一緒に学び、コミュニケーションしましょう。
公開アカウントの説明については、次のリンクを参照してください。
さらなる興奮を求めて公式アカウントをフォローして一緒に学び成長していきましょう
標準ライブラリ シリーズ - 推奨書籍:
推奨
読書: