パスパラメータ
- 一意なリソースを識別するための情報を入れる
例
comment_id
がパスパラメータに該当する(Qiita API v2より抜粋)
GET /api/v2/comments/:comment_id
クエリパラメータ
https://example.com/list?query_parameter=1&query_parameter=2
- ? 以降がクエリパラメータ
-
? + 変数名 = 変数の値
という形式 - パラメータが複数ある場合は
&
でつなぐ - 特定のリソースを操作して取得する際に必要な情報は、クエリパラメータに入れる
- 検索系に使用する
- GETのみで使用できる(POSTでは使用できない)
- クエリパラメータは、以下に記録されていることが多い
- Webサーバのアクセスログ
- ファイヤーウォールログ
- プロキシサーバのキャッシュやログ
- ブラウザのキャッシュや履歴
クエリパラメータの用途
- ユーザーが入力したパラメータの送信(検索条件など)
- Webページ間のパラメータの受け渡し
- Webアプリケーションへのパラメータ付きリンク
見られて困る情報はクエリパラメータを使わない
- 見られて困る情報例
- パスワード
- Webメールのメール内容などの個人用データ
- 名前,年齢,住所などの個人情報
- Webアプリケーション内部のデータ構造
- Webサーバ内部のフルパスなどの各種システム情報
- 見られて困る情報と困らない情報を分類するべき
- Webアプリケーション設計時に注意する
リクエストボディ
- 追加、更新する際の内容を入れる
- POSTとPUT
- idやパスワードなど、漏洩したら困る情報を付与する
- リクエストボディはログなどには記録されないため、GETよりPOSTのほうが安全
実行するAPI.
https://example.com/members/
リクエストボディ.
{
name:"yamada taro",
age:20
}
リクエストボディの用途
- 見られて困る情報を隠すため、クエリパラメータではなくリクエストボディを使う
- ユーザーID、パスワードなど
SQLインジェクションとは?
- SQLの呼び出し方に不備がある場合に発生する脆弱性
- 非常に影響の大きな脆弱性なので、絶対に混入しないようにすることが求められる
どういう影響を受けるか
- DBの全ての情報が外部から盗まれる
- DBの内容が書き換えられる
- 認証を回避される
- IDとパスワードを用いずにログインされる
- DBサーバ上のファイルの読み出し、書き込み、プロウラムの実行などが行われる
対策
- エスケープ処理を実施する
- プログラムで使う特殊の記号を普通の文字をとして扱う
- \(円記号)をつけることで、特殊文字を「普通の文字」として認識できる
- 例) "(ダブルクォーテーション) → "
参考文献