「セキュリティ対策って、リリース前にやればいいか…」は危険です ⚠️

そんなふうに後回しにしていると、気づかないうちに脆弱性がコードに紛れ込んでしまいますよね。
今回は、SAST(Static Application Security Testing=静的アプリケーションセキュリティテスト)という考え方と、Pythonで手軽に導入できるツール Bandit を使って、コードを書いた瞬間に自動でセキュリティチェックを走らせる仕組みをご紹介します。
GitHub Actionsと組み合わせれば、プッシュするたびに自動でチェックが動く環境が作れます。「セキュリティは難しそう」が「これなら続けられそう!」に変わるはずです 😊
SASTってそもそも何?
SASTをひとことで言うと、「実行しなくてもコードの危ない部分を見つけてくれる検査ツール」です。
コードを動かす前、つまり開発段階で問題を発見できるのが最大の強み。早期発見は修正コストを大幅に下げてくれます。
- ✅ コードを実行せずに解析する
- ✅ 開発の早い段階で脆弱性を発見できる
- ✅ CI/CDパイプラインに組み込める
BanditをPythonプロジェクトに導入する
まずはBanditをインストールしましょう。インストールはたった1行です。
# Banditのインストール
pip install bandit
インストールが終わったら、さっそく試してみましょう。以下は意図的に脆弱なコードの例です。
# vulnerable_example.py
import subprocess
import hashlib
# 危険①:ユーザー入力をそのままシェルコマンドに渡している(コマンドインジェクション)
def run_command(user_input):
subprocess.call(user_input, shell=True) # Banditが警告を出すポイント
# 危険②:MD5は現在では脆弱なハッシュアルゴリズムとされている
def hash_password(password):
return hashlib.md5(password.encode()).hexdigest() # Banditが警告を出すポイント
このファイルに対してBanditを実行してみます。
bandit vulnerable_example.py
ポイントをまとめるとこんな感じです 👇
- shell=True の使用 → コマンドインジェクションのリスクとして警告
- hashlib.md5 の使用 → 弱いハッシュアルゴリズムとして警告
- 重大度(HIGH / MEDIUM / LOW)ごとに結果が分類される
GitHub Actionsに組み込んで自動化する
Banditを手動で実行するだけでも便利ですが、コードをプッシュするたびに自動チェックが走る仕組みを作れると最強です。
リポジトリの .github/workflows/ フォルダに以下のYAMLファイルを作成するだけでOKです。
# .github/workflows/bandit-sast.yml
name: SAST with Bandit
on:
push:
branches: [main, develop] # プッシュ時に自動実行
pull_request:
branches: [main] # PRのタイミングでも実行
jobs:
bandit-scan:
runs-on: ubuntu-latest
steps:
- name: リポジトリをチェックアウト
uses: actions/checkout@v3
- name: Pythonのセットアップ
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Banditのインストール
run: pip install bandit
- name: セキュリティスキャンを実行
run: bandit -r . -ll # -ll オプションで重大度MEDIUM以上のみ検出
これを設定しておくだけで、チーム全員のコードが自動的にセキュリティチェックされます。「うっかり危ないコードをマージしてしまった…」というミスを事前に防げますよね。
まとめ
今回は Bandit × GitHub Actions を使ったPythonのセキュリティ自動化をご紹介しました。
- 🔍 SASTはコードを実行せずに脆弱性を検出できる
- 🐍 BanditはPython専用の軽量SASTツール
- ⚙️ GitHub Actionsと組み合わせれば自動化まで数分で完成
セキュリティ対策は「後でやろう」ではなく、開発フローに最初から組み込むのが現代のスタンダードになっています。ぜひ今日のプロジェクトから試してみてください! 🚀





