この文書は2016年以降更新されていません

クエリのパラメーター化に関するチートシート

OWASP 作成
ジャンプ先: 移動検索
Cheatsheets-header.jpg

最終改訂日 (yy/mm/dd):2014/11/21

はじめに

SQL インジェクションは、最も危険度が高い Web 脆弱性の 1 つです。その危険性の高さから、SQL インジェクションは OWASP トップ 10 の最上位項目となっています。SQL インジェクションが重大な脅威である理由は、この攻撃の場合、悪意のある攻撃者のコードにより 、データの窃盗やデータの変更、さらに場合によっては基礎の OS へのコマンドインジェクションができるように、Web アプリケーションの SQL ステートメントの構造を変えてしまうことが可能だからです。このチートシートは、「SQL インジェクション対策に関するチートシート」の派生著作物です。

パラメーター化されたクエリの例

SQL インジェクションを防止する最良の方法は、パラメーター化されたクエリを使用することです。次の表に、ほとんどの一般的な Web 開発言語でパラメーター化されたクエリを構築する方法を実際のコードサンプルによって示します。以下のコードサンプルは、Web アプリケーション内でのデータベースクエリ構築時の SQL インジェクション防止方法を Web 開発者向けに示すことを目的とするものです。

プリペアドステートメントの例

ストアドプロシージャの例

SQL インジェクションの脆弱性が発生する可能性がある場所は、Web アプリケーション内に記述された SQL だけではありません。ストアドプロシージャを使用しており、この中で SQL を動的に作成している場合も、SQL インジェクションの脆弱性が発生する可能性があります。このような動的 SQL をセキュリティで保護するために、このような動的 SQL についても、バインド変数を使用してパラメーター化してください。さまざまなデータベースにおけるストアドプロシージャでのバインド変数の使用例をいくつか以下に示します。

参考資料


Authors and Primary Editors

Jim Manico - jim [at] owasp.org
Dave Wichers - dave.wichers [at] owasp.org
Neil Matatal - neil [at] owasp.org


Other Cheatsheets

Developer Cheat Sheets (Builder)

Assessment Cheat Sheets (Breaker)

Mobile Cheat Sheets

OpSec Cheat Sheets (Defender)

Draft Cheat Sheets