2026.02.27
投稿日:2026.02.27 最終更新日:2026.02.27
Pythonで開発したWebアプリケーションやシステムに、セキュリティ上の脆弱性がないか確認したい。
社内にセキュリティ専門家がおらず、何をどう調べればいいか分からないまま対応を任されている、という方もいるのではないでしょうか。
Bandit、Safety、Snyk、pip-auditといったツールで基本的なチェックはできます。
ただ、ツールが拾えるのは「既知の問題」だけです。
複雑なロジックに潜む脆弱性や、誤検知の判別は、ツールだけでは追いきれません。
企業のシステムで本格的にやるなら、自動ツールと専門家の手動レビューを組み合わせた「ハイブリッド診断」が一番手堅い方法です。
この記事では、Python脆弱性診断の基本から、ツールの使い方と限界、専門業者への依頼まで、セキュリティ担当者が知っておきたいことをまとめています。
セキュリティサービス事業部 コンサルタント/プログラマーからシステム運用を経て情報セキュリティ全般の業務に従事。現在は培った情報セキュリティの経験を活かしお客様の課題に向き合った企画やマーケティングを担当。
目次
Python脆弱性診断とは、Pythonで開発したアプリケーションやシステムに潜むセキュリティ上の問題を洗い出し、リスクを評価する作業のことです。
Pythonは今やWebアプリケーションからAI・機械学習、データ分析まで幅広い分野で使われており、診断すべき対象もその分広くなっています。
Pythonコード本体から依存ライブラリ、Webフレームワーク、API、機械学習モデルまでがチェックの対象です。
特にPythonプロジェクトでは、pip経由で外部ライブラリを大量に組み込むのが普通なので、自社のコードに問題がなくても使っているライブラリに既知の脆弱性があれば、そこが攻撃の入口になります。
「診断を受けていないこと自体がリスクとして見られる」という場面も増えています。
本番リリース後に脆弱性が見つかると修正コストは開発段階の10〜100倍になることがあり、個人情報保護法やPCI DSSでも脆弱性対策は義務として求められています。

では、実際にどう診断するか。
大きく2つのアプローチがあります。
自己診断ツールを使う方法と、専門業者に依頼する方法です。
まず、診断の手法を押さえておきましょう。
大きく「ソースコード診断(静的解析)」と「動的診断(Webアプリケーション診断)」の2種類があります。
ソースコード診断(静的解析)は、コードを動かさずに直接解析する方法です。
SQLインジェクション、XSS、バッファオーバーフローなどをコーディングレベルで検出でき、開発中から使えるのがメリット。
「SAST」とも呼ばれます。
動的診断(Webアプリケーション診断)は、実際に動いているアプリに外部から疑似攻撃を仕掛けるブラックボックステストです。
「DAST」とも呼ばれ、実行時の挙動や設定ミスを検出できます。
ただし、コード内部の問題は見えません。
| 比較項目 | ソースコード診断(静的解析) | 動的診断(Webアプリケーション診断) |
|---|---|---|
| 診断対象 | ソースコード | 稼働中のアプリケーション |
| 手法 | コードを直接解析 | 外部から疑似攻撃 |
| 検出範囲 | コーディングレベルの脆弱性、危険なAPI利用 | 実行時の挙動、認証・サーバ設定の問題 |
| 実施タイミング | 開発段階 | テスト環境・本番環境 |
| メリット | 開発段階で早期発見、低コストで修正 | 実行時の挙動を確認、設定ミスを検出 |
| デメリット | 実行時の問題は検出できない | コード内部の詳細は不明、開発段階では使えない |
それぞれに得意・不得意があるので、組み合わせて使うと網羅性が上がります。
IFTでは自動ツール+専門家の手動レビューを組み合わせた「ハイブリッド診断」を提供しており、Webアプリとして動作するPythonシステムでは、ソースコード診断と動的診断を組み合わせることも可能です。
SASTを自分でやるなら、ツールを使うのが現実的です。
よく使われる4つのツールの特徴と使い方、共通する限界も確認しておきましょう。
| ツール名 | 種別 | 対象 | 特徴 |
|---|---|---|---|
| Bandit | 静的解析 | Pythonコード | コード内のセキュリティ問題を検出 |
| Safety | ライブラリスキャン | 依存ライブラリ | 既知の脆弱性・悪性パッケージを検知 |
| Snyk | ライブラリ・コード | 依存ライブラリ・コード | AI搭載ツール。CI/CD利用に対応 |
| pip-audit | ライブラリスキャン | 依存ライブラリ | 脆弱性検出と自動修正に対応 |
BanditはPythonコードのセキュリティ問題を検出するツールです。
pip install banditでインストール後、bandit -r ./で実行。
重大度・信頼度・該当箇所(ファイル名と行番号)が出力されます。
Safetyは依存ライブラリの既知の脆弱性・悪性パッケージを検知します。
pip install safety→safety scanで使えますが、商用利用の場合はFree planの制約(単一ユーザー限定)を事前に確認してください。
Snykは依存ライブラリ・コード・インフラ設定ファイルをまとめてスキャンするAI搭載ツールで、CI/CD環境に組み込めます。
Free planには月間テスト上限があるので、実運用前に確認しておきましょう。
pip-auditはPython Packaging Authority提供のツール。
–fixオプションで自動修正もできますが、自動テストと組み合わせて使うのが無難です。
「BanditとSafety入れれば、それで十分じゃないか」
たしかに、導入はすぐに終わります。
ただ、ツールには越えられない限界があります。
「業務の流れ」から生まれる問題は検出できません。
複雑な条件分岐や状態遷移に潜む問題は、ツールでは見落としやすく、専門家の目が必要です。
静的解析は実行時の文脈を持たないので誤検知(False Positive)が増えやすく、結果の仕分けに手間がかかります。
既知のデータベースに載っていない脆弱性(ゼロデイ)にも対応できません。
まず試してみたいなら、BanditとPip-auditの2つで十分です。
SafetyやSnykはCI/CDに組み込む段階で検討するとよいでしょう。
「自分でツール使えば済む話で、業者に頼む必要ある?」
頼む価値はあります。
ツールが見落とす問題を、手動レビューで拾えるからです。
ビジネスロジックの脆弱性の検出、誤検知の判別、診断後の修正コンサルまで、ツールにはできないことをカバーしてもらえるのが大きな違いです。
IFTのソースコード診断では、OWASP Top 10準拠のハイブリッド診断(自動ツール+専門家の手動レビュー)を提供。Python対応で、90%以上のシステムで脆弱性を発見しています。
診断は大きく3つのステップで進みます。
まずPythonコードを提出し、使用しているフレームワーク(Django、Flask、FastAPIなど)や開発環境をヒアリングして準備を整えます。
次に、自動スキャンで広範囲をチェックしたあと、専門家が手動で確認。
ツールが見落としがちなビジネスロジックの問題や、フレームワーク固有のリスクもここで拾います。
診断後は、発見された脆弱性と修正方法をまとめたレポートを納品。
「どこに問題があって、どう直すか」を専門家と一緒に確認し、修正後は3カ月以内であれば無償で再診断します。

診断の方法が分かったところで、次は「何を診断するか」です。
Pythonには言語特有の脆弱性があり、さらにOWASP Top 10に含まれるWebアプリ共通の脆弱性も注意が必要です。
技術的な話が続きますが、詳細は開発担当者に確認すれば問題ありません。
「eval」「pickle」「SQLインジェクション」「XSS」——こうしたキーワードが自社の対策として挙がっているかの確認に役立ててください。
まずPython固有のものから見ていきます。
言語仕様とエコシステムに由来するリスクで、代表的なものは以下の5つです。
それぞれ詳しく見ていきましょう。
「うちのコードでは使っていない」と思っていても、組み込んだライブラリの内部でeval()が呼ばれているケースがあります。
eval()やexec()は文字列をPythonコードとして直接実行する関数で、ユーザー入力をそのまま渡すとファイル削除やシステムコマンドの実行など意図しない操作が起きます。
使用は極力避け、安全な代替手段(ast.literal_eval等)を選びましょう。
どうしても使う必要がある場合は、入力サイズの制限と受け付ける文字種の絞り込みをセットで設計してください。
eval/execと並んで見落とされやすいのが、Pickle。
機械学習モデルの配布やデータ保存でよく使われるだけに、リスクを意識しないまま使っているケースが多いです。
Pickleは、Pythonオブジェクトを保存・転送する仕組みです。
問題は、外部から受け取ったPickleデータを読み込むと悪意あるコードがそのまま実行されてしまう点。
Python公式ドキュメントでも「信頼できないデータをunpickleしてはならない」と明記されています。
外部入力にはJSONなど安全な形式を使いましょう。
ファイルアップロード機能や外部APIとの連携部分は特に注意が必要です。
少し地味に見えるかもしれませんが、ReDoSも無視できません。
ReDoS(正規表現DoS)は、処理に時間がかかる正規表現パターンを悪用してサーバーに負荷をかける攻撃です。
複雑な繰り返しを含むパターンに長い文字列を入力すると、処理時間が指数的に膨れ上がりサービスが止まることがあります。
対策は3つ——バックトラッキングが起きにくいシンプルなパターン設計、入力値の長さ制限、タイムアウト設定です。
コードの書き方ではなく、設定の問題も見過ごせません。
DjangoやFlaskは便利な反面、設定ミスが大きな脆弱性につながります。
DjangoでDEBUG=Trueのまま本番環境へデプロイすると、エラー時にソースコードや環境情報が外部に表示されます。
FlaskでSECRET_KEYが短すぎたりコードに直書きされていると、セッションを偽造されます。
設定値は環境変数で管理し、コードに直接書かないことが基本です。
Pythonプロジェクトでは、数十〜数百のライブラリを組み合わせて開発するのが普通です。
こうしたライブラリに既知の脆弱性が発見されても、アップデートを後回しにすると攻撃に悪用されます。
pip-auditやSafetyで定期的にスキャンし、問題が見つかったライブラリはすぐ更新する習慣をつけましょう。
「Python特有の問題さえ気をつければ、あとは大丈夫?」
Python特有ではありませんが、OWASP Top 10でも繰り返し挙がるWebアプリ共通の脆弱性として押さえておきましょう。
SQLインジェクションは、フォームなどから不正な文字列を入力してSQL命令を操作する攻撃です。
対策の基本はプリペアドステートメント(パラメータ化クエリ)の使用。
ORMを使っていれば多くの場合は自動で対応されていますが、生SQLを書く箇所は要確認です。
XSS(クロスサイトスクリプティング)は、ページに悪意あるスクリプトを埋め込んで訪問者の情報を盗む攻撃です。
DjangoやFlaskのテンプレートは自動でエスケープされますが、テンプレートを使わずHTMLを生成する箇所は手動対応が必要です。
認証・認可の不備は、セッション管理の甘さやパスワードの平文保存、権限チェックの漏れなどが原因です。
多要素認証の導入、ログイン失敗時のレートリミット、権限チェックの徹底がセットの対策になります。

脆弱性の種類が分かったところで、では実際にサービスを選ぶときは何を確認すればいいか。
判断のポイントは以下の3点です。
実は、ハイブリッド診断かどうかという1点だけで、診断の深さがまったく変わります。
自動ツールだけでは誤検知が多く、「業務の流れ」から生まれる脆弱性を見逃すからです。
自動スキャン+専門家の手動レビューを組み合わせたハイブリッド診断を選びましょう。
OWASP Top 10に基づいた診断かどうかも確認しておくと、基準の網羅性を担保できます。
「うちのWebシステムのセキュリティ、本当にこれで大丈夫なのかな…?」 「Webアプリのセキュリティ対策、何から手をつければいいんだろう…?」 Webアプリケーションの開発や運用に携わっていると、こんな不安を感じることはありませんか? セキュリティ対策は、今や避けて通れない重要な課題ですよね。
ハイブリッド診断であることを確認したら、次はPython特有の対応範囲です。
使っているフレームワーク(Django、Flask、FastAPIなど)に対応しているかは必ず確認してください。
フレームワークごとに固有のリスクがあるので、それを理解した上で診断してもらえるかどうかが重要です。
AI・機械学習モデルを扱っているなら、モデルの改ざんやデータポイズニングまで診断対象に含まれるかも見ておきましょう。
APIの脆弱性対応や、使用ライブラリを公的データベースと照合しているかどうかも確認しておくとよいでしょう。
フレームワーク対応を確認したら、最後に見ておきたいのが診断後のサポートです。
脆弱性の詳細・リスクレベル・該当箇所・修正方法がきちんと書かれたレポートかどうかを確認しましょう。
社内にリソースがない場合は、修正コンサルや再診断が無料かどうか、セキュアコーディング研修の有無も選定の材料になります。
診断実績・第三者認証の有無もあわせて確認しておきましょう。
IFTは、全20言語対応でPythonに完全対応したソースコード診断サービスを提供しています。
OWASP Top 10準拠のハイブリッド診断により90%以上のシステムで脆弱性を発見。
Django、Flask、FastAPI等の主要Webフレームワーク、機械学習モデル、各種APIまで診断可能です。
3カ月以内1回無償再診断、修正方法のコンサルティング、セキュアコーディング研修も提供。
診断実績1,000件以上、15年以上の経験、官公庁・大手企業での採用実績、ISO27001認証・プライバシーマーク取得等の第三者認証も保有しています。
Python脆弱性診断は、一度やって終わりではなく、システムを安全に保ち続けるための継続的な作業です。
この記事で解説した内容を振り返っておきましょう。
まず今日できることから始めるなら、pip-auditを走らせてみてください。
インストールから結果が出るまで5分かかりません。
企業のシステムで本格的に取り組むなら、IFTのPython対応ソースコード診断をご活用ください。
ハイブリッド診断で深いところまで網羅し、修正コンサルから3カ月以内の無償再診断まで一貫してサポートします。