第13章. インジェクション
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
ウェブ・アプリケーションに対する最も一般的に知られている攻撃のタイプの一つは、SQL インジェクションである。SQL インジェクションは、特に SQL データベースを標的にしたインジェクション攻撃の一種であり、悪意のあるユーザが既存の SQL クエリに自分自身のパラメータを与えたり、SQL クエリをエスケープして自分自身のクエリを与えることを可能にする。当然のことながら、SQLインタプリタにはデフォルトでエスカレーションされたパーミッションが与えられているため、この攻撃は通常データベースを危険にさらす結果となる。
SQLインジェクションはインジェクションの最も一般的な形態だが、唯一の形態ではない。インジェクション攻撃には、 、インタプリタと、何らかの方法でインタプリタに読み込まれるユーザからのペイロードという2つの主要コンポーネントがある。つまり、インジェクション攻撃は、FFMPEG(ビデオ圧縮機)のようなコマンドライン・ユーティリティに対しても、(従来のSQLインジェクションのケースのように)データベースに対しても起こりうるということだ。
このような攻撃が機能するためにはどのようなアプリケーションアーキテクチャが必要なのか、そして脆弱なAPIに対するペイロードがどのように形成され、配信され得るのかをよく理解するために、インジェクション攻撃のいくつかの形態を見てみよう。
SQLインジェクション
SQLインジェクション は最も古典的なインジェクションの形態である(図13-1参照)。SQL文字列がHTTPペイロードの中でエスケープされ、エンドユーザに代わってカスタムSQLクエリが実行される。
伝統的に、 OSSパッケージの多くは、PHPとSQL(多くの場合MySQL)を組み合わせて構築されていた。歴史を通して最も参照されてきたSQLインジェクションの脆弱性の多くは、 PHPのビュー、ロジック、データコード間の補間に対する緩やかな見解の結果として発生した。旧来のPHP開発者は、SQL、HTML、PHPの組み合わせをPHPファイルに織り込んでいました。
図13-1. SQLインジェクション
ユーザがログインするための、古いタイプのフォーラム・ソフトウェアのPHPコード・ブロックの例を見てみよう:
<?phpif($_SERVER['REQUEST_METHOD']!='POST'){echo'<div class="row"><div class="small-12 columns"><form method="post" action=""><fieldset class="panel"><center><h1>Sign In</h1><br></center><label><input type="text" id="username" name="username"placeholder="Username"></label><label><input type="password" id="password" name="password" ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access