クエリ文字列の定義
クエリ文字列は、指定されたパラメータに値を割り当てるURLの一部です。 通常、クエリ文字列は疑問符(?)で始まり、その後にキーと値のペアが続きます。 各ペアはアンパサンド(&)で区切られ、各ペア内でキーと値は等号(=)で結合されます。
URL内:
https://www.example.com/page?param1=value1¶m2=value2
クエリ文字列は ?param1=value1¶m2=value2
クエリ文字列は、応答をカスタマイズするためにサーバーにデータを送信します。 たとえば、クエリ文字列は検索語を伝達したり、製品の並べ替え順序を示したり、複数ページのアイテムリストの現在のページ番号を表示したりします。
クエリ文字列の脆弱性
- 情報開示。 クエリ文字列は、ブラウザのアドレスバー、ブックマーク、閲覧履歴、参照ログに表示されます。 機密データ(パスワード、認証トークン、または個人を特定できる情報)がクエリ文字列で渡される場合、URLにアクセスできるすべての人に公開される可能性があります。
- URLの長さの制限。 ブラウザとサーバーには、多くの場合、最大URL長が約2000文字に設定されています。 クエリ文字列内の大量のデータにより、URLがこれらの制限を超え、サーバーエラーまたはデータの切り捨てが発生する可能性があります。
- Webサーバーログの公開。 Webサーバーは通常、クエリ文字列を含むアクセスされたURLを記録します。 クエリ文字列内の機密情報が適切に保護されていない場合、サーバーログに保存され、データ漏えいの原因となる可能性があります。
- 悪意のある情報操作。 アプリケーションがクエリ文字列を検証またはサニタイズせずにクエリ文字列に作用する場合、ユーザーまたは攻撃者はクエリ文字列を簡単に変更および悪用できます。
- 非効率的なデータ送信。 クエリ文字列を介して大量のデータを送信することは、はるかに大きなペイロードを処理できるPOSTリクエストを使用するよりも効率が悪いです。
- クロスサイトスクリプティング(XSS)。 ウェブアプリケーションが、クエリ文字列のデータを検証またはエスケープせずにウェブページに表示すると、XSS攻撃に対して脆弱になる可能性があります。 攻撃者は、ユーザーのブラウザで実行されるクエリパラメータを介して悪意のあるスクリプトを挿入できます。
- SQLインジェクション。 アプリケーションが、適切な検証とパラメータ化なしに、データベースクエリで生のクエリ文字列データを使用している場合、SQLインジェクション攻撃に対して脆弱である可能性があります。
- CSRF(クロスサイトリクエストフォージェリ) 重要な操作にクエリ文字列を使用すると、攻撃者が悪意のあるURLを作成しやすくなります。このURLを無防備なユーザーがクリックすると、ログインしているユーザーに代わってWebサイトで望ましくないアクションが実行される可能性があります。