こちら記事を読んでいた際に疑問な箇所があり質問させて頂ました。
テーブルのIDカラムに乱数を用いるメリットとして、以下のように説明がありました
このようにitemのIDの値が整数の場合、値の予測が簡単であるため、外部からの攻撃を受けやすくなります。
しかし、そもそもURLのパラメーターには機密情報を含めることはセキュリティ上ないと思う為、こちら何故問題なのかが分からない状況です。
どなたか、こちらの疑問点につきまして、ご助言頂けましたら幸いです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
質問者さんの感覚は正しいと思います。仮に秘密情報で他の人が見てはいけないものであれば、IDのランダム化ではなく、認可制御として実装すべきものです。
また、脆弱性を作り込みにくくする際に重要なこととして、シンプルさを保つことは重要です。「こちらの方がちょっと安全になる」からといって、ソフトウェアを複雑にしてしまうと、バグが増える要因になりますし、ひいては脆弱性の原因になります。
そもそも、一連番号のIDを避けるべきなのであれば、DjangoやRuby on Railsがはじめからそのように実装されているはず(べき)です。DjangoやRailsのようにメジャーなフレームワークがバージョンを重ねても一連番号のIDを用いていることは、世界中の多くで「それで差し支えない」と認められている証拠です。
なので、セキュリティ要件を満たしている限り、フレームワークは「あるがままに」使うことをおすすめします。
以下の記事は、「デフォルトをさらに安全にしようとしたら致命的な脆弱性が混入した」例です。このようなケースを私は多く見てきました。シンプルさを保つということはとても重要です。
投稿2021/10/16 04:53
総合スコア11705
0
URLに含めるかどうかは関係ありません。
ID
などのAPIのパラメータ値はクライアント側に秘匿することはできません。
それが仮に1
からの連番のようなものであれば「次」は2
であると容易に推測できます。
そこで例えば攻撃者は値を2
としたリクエストを送り、2
に紐づいた結果を得ることができるかもしれません。
これを推測しにくいUUID
にすることで、このような攻撃に強くなります。
推奨:ユーザIDをシーケンシャルに生成しない。
ユーザIDが連番になっていると、別ユーザのユーザIDを容易に推測可能なので、たとえばリバースブルートフォース攻撃によりアカウントを奪われる可能性が高まります。
なお、いわゆるID
をUUID
化すべきかはケースバイケースでしょう。
たとえばユーザーID
などはそうすべきでしょうが、都道府県ID
のような推測されても問題ないものはその必要はないでしょう。
追記
同じような質問が見つかったので提示しておきます。
Django 2.x: Is using the Primary Key of a Model in the URL pattern a security concern?
おおむね、IDが連番であることによるセキュリティ上の懸念は考えられるが
そもそもそのIDが指すモノに対する取得、閲覧、変更などの認可制御を適切に処理する仕組みがあるのでそれを使うべき。
といった回答がついています。
また安全なウェブサイトの作り方の1.11 アクセス制御や認可制御の欠落
にも同様な記載がされていました。
これも、認可制御が実装されていないために生じる脆弱性です。データベースを検索するための注
文番号が、ログイン中の利用者に閲覧を許可された番号であるかどうかを常に確認するように実装し
てください。
UUID化のメリットとしては「他のIDの推測を回避できる」点くらいです。
よってコピーサイトの作成などを目的としたデータの一括取得対策にはなるでしょう。
ただしIDの指すモノに対するセキュリティはシステムで用意された認可制御を用いるべきです。
投稿2021/10/16 03:29
編集2021/10/17 01:29総合スコア38341
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/16 04:13
2021/10/16 04:33
2021/10/16 04:58 編集
2021/10/16 05:20 編集
2021/10/16 05:26 編集
2021/10/16 05:49
2021/10/16 05:58
2021/10/16 08:35
2021/10/16 08:40 編集
2021/10/17 01:30
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/16 05:12
2021/10/16 07:02
2021/10/16 08:41