最小特権アクセスの強制、ユーザー入力のサニタイジング、データベースに対する手続き内容の制限は、SQLインジェクションとそれに続くデータ漏洩の防止に有用です。
この記事を読み終えると、以下のことができるようになります。
関連コンテンツ
是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!
記事のリンクをコピーする
構造化照会言語インジェクション(SQLi)は、コードインジェクション攻撃の1つであり、攻撃者はSQLデータベースにある機密情報を取得、操作、破壊することができます。これらの攻撃は、SQLクエリフィールドに特殊なコマンドを挿入することで機能します。コマンドが実行されると、攻撃者は自身を正規ユーザーであるかのように身元を詐称したり、保護されたデータを閲覧または取得したり、さらにはサーバーのルートアクセス権を取得することが可能になります。
多くの場合、攻撃者は、正当なコードと信頼できないコードを適切に区別できないようにアプリケーションプログラミングインターフェース(API)の脆弱性を悪用してSQLiを実行します。変更されたコマンドやクエリを検出する機能がない場合、これらのAPIによってWebアプリケーションファイアウォール(WAF)や認証対策をすり抜けるなどの、悪意のあるリクエストが実行されてしまいます。
通常、SQLiは以下の3つのいずれかの手法で行われます:
良性SQLクエリーと悪性SQLクエリーの実例については、SQLインジェクションとは?を参照してください。
SQLインジェクションは最も一般的なAPIの脅威の1つではありますが、適切な予防戦略を講じることで効果的に回避することができます。SQLインジェクションを防ぐための有用なアプローチには、データベースに対する手続き内容の制限、データベース入力のサニタイジング、最小特権アクセス権の強制などがあります。
SQLインジェクションは、データ入力やデータベース関数を操作する攻撃者の能力に大きく依存します。これらの入力を制限し、実行可能なデータベースに対する手続きの種類を制限することで、組織は不正または悪意のあるクエリのリスクを最小限に抑えることができます。その方法には次のようなものがあります:
悪意のあるコードを排除するためには、SQLデータベースに対するユーザー入力を定期的に監視、検証、サニタイズする必要があります。入力の検証は、データが事前に定義された基準に従って適切に検査およびフォーマットされることを保証し、入力のサニタイズは、無効または安全でない文字を削除し、必要に応じて再フォーマットすることで、入力を修正(または「サニタイズ(浄化)」)します。入力検証を確実にする方法には、以下のようなものがあります:
最小特権アクセスとは、保護対象のリソースに対するアクセス権を、役割を果たすために必要な分だけユーザーに与えるという原則です。例えば、データベースの管理者レベルの権限を与えるユーザー数を制限したり、後で取り消すことを前提に一時的な管理者レベルのアクセス権を与えることもできます。
盗んだ認証情報を使用してデータベースに侵入した攻撃者も同様に、保護対象のデータの閲覧、修正、窃盗、破壊に必要な権限が制限されるため、ロールベースレベルでユーザーアクセスを制限することは、情報漏えいの影響を最小限に抑えるために有用です。同じ理由から、企業は複数のWebサイトやアプリケーションで使用するデータベースへの共有アクセスを制限する必要があります。
Cloudflareは、企業がSQLi攻撃に対する耐性を高めるための強力なアプリケーションとAPIセキュリティ製品群を用意しています:
利用開始
Webアプリケーションセキュリティについて
一般的な脅威
VPNリソース
セキュリティ用語集
ラーニングセンターナビゲーション