質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Q&A

解決済

3回答

3035閲覧

URLパラメータ改ざんの対策について

nakanohitobot

総合スコア48

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

0グッド

0クリップ

投稿2022/02/15 09:29

以下のように、URLやURLパラメータに、レコードの主キー(今回はID)を含む場合について

https://testsite.com/inputdata/1 https://testsite.com/inputdata?id=1

URLの1を別の数値に変更して、ユーザーが任意のデータにアクセス出来てしまうかと思いますが、
ログインしているユーザーによって、アクセスできるデータの制限を行いたいです。

この場合、どのような対策を行えばよいでしょうか?
URLのIDの数値をハッシュ化して、推測しずらいようにするのが手かと思いますが、偶然当たってしまう場合もありえますよね?

ハッシュ化に加えて、ログインしているユーザーを何らかの形で保存しておいて(セッション変数とかになるのでしょうか…)
サーバー到達時に、ユーザーのチェックも行い、アクセスできるデータの制限を行うべきなのでしょうか?

もし差し支えなければ、こういうケースでは、具体的にどういった対応をされているか、教えていただきたいです。
よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

大前提:サービス側が感知してないURLは全て404などとして処理
次点:「許可」「権限」を明確にしてそれに該当しなければ403などとして処理

URLを難読・複雑化してもあまり意味はありません。

「ユーザーログイン」があるのでしたら、おおよそ間違いなくセッションを利用して画面表示の制御などしているはずなので、「ユーザー自身のアクセス権限」を明確化することです。
何が良くて、何がダメなのかをはっきりさせるわけです。

例えばteratail
ユーザ情報画面はログイン者が自分のページにアクセスすれば編集ボタンが表示されますが、それ以外は参照のみです。
あくまでこれは画面内の要素単位で行われているものを、画面単位(もしくはカテゴリやディレクトリ単位)で行うことになります。
ユーザ情報画面の例で言うと、参照はユーザIDがURLにつきますが、編集はhttps://teratail.com/users/setting/profileと全てのユーザが同じURLで自分の情報のみを編集できます。

投稿2022/02/15 09:39

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakanohitobot

2022/02/15 11:40

ご回答ありがとうございます。 なるほど、terarailは良い例ですね。 ・編集 ログインしている当人しか出来てはいけないので、セッションで管理している。 だからURLに情報をもたせる必要はなく、/profileで共通しているということですね。 これですとURLの改ざんが不可能になりますね。 ・閲覧 誰でもアクセスできていいため、URLに情報をもたせて、users/{id}の形になっているということですね。 URLを改ざんされたとしても、存在するユーザーIDなら問題はないと。 試しに、存在しないユーザーIDを入力すると、404になります。 これが「サービス側が感知してないURL」とおっしゃる例ですね。 これと、ご教授いただいた内容を参考に、私が提示しました例で考えますと、 URLに、アクセス権がないIDが入力された場合、403として処理するのが最適でしょうか。 teratailの/profileのように、IDをもたせないURLにしておきたいところですが、複数のデータにアクセス可能な場合は、どうしても、判別が必要になるので。
m.ts10806

2022/02/15 21:17

最適かどうかというのは結局はアプリケーションの仕様によります。 例えば、アクセス的には403だけど、利用者にはなぜアクセスできないかを知らせたくないためあえて404を表示するとか、なくはないです(ログは運営しか見れないので403を残す)
nakanohitobot

2022/02/16 01:14

なるほど、403だとそのIDのデータは存在していることがわかってしまいますしね。 あえて404にすることも検討してみます。
guest

0

ハッシュ化に加えて、ログインしているユーザーを何らかの形で保存しておいて(セッション変数とかになるのでしょうか…)
サーバー到達時に、ユーザーのチェックも行い、アクセスできるデータの制限を行うべきなのでしょうか?

そのとおりです。

投稿2022/02/15 09:32

編集2022/02/15 09:33
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakanohitobot

2022/02/16 01:12 編集

ご回答ありがとうございます。認識していた通りで良かったです。
guest

0

セッションとクッキーで対応してください

投稿2022/02/15 10:32

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakanohitobot

2022/02/15 11:40

ご回答ありがとうございます。やはりその対応になりますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問