none
URL を暗号化したい RRS feed

  • 質問

  • ASP.NET MVC5で開発しております。ブラウザはIE11・Chrome・Safariを対象をしております。

    ユーザID等を含むURLでアクセスするような場合に、URLを暗号化するにはどのようにすればよいでしょうか?

    Web.config等に設定を行えばよいのでしょうか?

    2015年4月28日 5:46

回答

  • > 限られた環境下で、限られたユーザしか、アクセスできないサイトであるため、
    > セッションIDをURLに含めることで、セキュリティ上問題はないと、判断しております。
    > ただ....
    > セッションIDが第三者に容易に知られてしまうため、もし、
    > 悪意あるユーザが居た場合、セッションの乗っ取り等が発生しうる状況です。

    上記の「ただ....」より前と後で完全に矛盾してます。

    「ただ....」より前に述べられた環境だから URL にユーザー認証に使うセッション ID を埋め込んでも問題ないと判断してその方向に進むと決めたのに、よく考えてみたらやっぱりセキュリティ的に問題がありそうだという気がしてきたのでしょうか?

    セキュリティの懸念があるのなら、ASP.NET 標準のフォーム認証を使い、認証チケットの授受にはクッキーを使って、ログインする時に ID とパスワードを送信する際はもちろん、認証チケットの授受を行う際にも SSL を使うことをお勧めします。

    そうすると、先のスレッドにあったような IE8+ のセッション共有の問題は避けられませんが、セキュリティとどちらが重要かで判断するのでしょうね。

    とりあえず質問に回答します。

    > URL上のセッションIDの部分を何らかの方法で隠ぺいすることができるか?

    「隠ぺい」というのは https://xxx/xxxx/セッションID/xxx/.... という URL でセッション ID の部分を暗号化するという意味だと思いますが、できませんし、そもそも暗号化しても何の意味もないと思います。

    暗号化できたとしても、Web サーバーはそれを有効なセッション ID として受け付けるのですから、暗号化されたセッション ID を第三者に盗聴されてセッションハイジャックされたら何ともならないですよね。

    > ユーザID等サイトアクセスのキーとなる情報をURL末尾に付与する必要性が発生した場合、何らかの方法で隠ぺいすることができるか?

    そんなことをする必要は全くないはずです。どんな事情があるか知りませんが、そんなことは考えもしない方がいいと思います。

    シングルサインオンを実現するなら Active Directory を使ったドメイン環境で統合 Windows 認証を使うべきです。URL に ID、パスワードを埋め込むなんてのは、自分に言わせれば完全に見当違いだと思います。


    #質問者さんは会社の仕事で Web アプリの開発をされているのでしょうか? そうであれば、このような話は会社の上司、先輩などに聞く話だと思うのですが。会社として質問者さんをサポートする話ですよね。



    • 編集済み SurferOnWww 2015年4月28日 11:34 一部訂正
    • 回答としてマーク yhaaaa 2015年4月30日 0:19
    2015年4月28日 11:31
  • URL を暗号化したところで無意味であるという話は私も同意見です。
    URL だけで解決しようとしたら、セッションの乗っ取りは避けられません。
    (ワンタイム的なセッション ID にすれば URL 漏洩に対策できるかもしれませんが、ブラウザの戻るボタンが使えなくなるなどの弊害が大きいので、現実的ではないでしょう)

    個人的には変なこだわり、狭い視野を持ってしまっている現状で立ち止まって、何が大事なのか、それによって失うものは何か、現実的な工数で対応できるのか、将来にわたっても安定的なのかの再考を強く求めたいところです。

    • 編集済み AzuleanMVP 2015年4月28日 13:34 セッション漏洩の話はすでに書かれていたので略
    • 回答としてマーク yhaaaa 2015年4月30日 0:19
    2015年4月28日 13:31

すべての返信

  • > ユーザID等を含むURLでアクセスするような場合に、URLを暗号化するにはどのようにすればよいでしょうか?

    先のスレッド ↓  の話の続きですよね?

    https://social.msdn.microsoft.com/Forums/ja-JP/b6552df1-0110-421c-af7d-8f24cb494ee7/id?forum=aspnetja

    そうであれば、そこで以下のようにお願いしましたが、やっていただけないでしょうか?

    > 新たにスレッドを立てて質問する際は、質問内容にあった表題を付け、このスレッドと関連が
    > あることを書いて、何故暗号化したいかの理由(セッション ID には個人 ID、パスワードな
    > どの情報は含まれないので暗号化する意味はなさそうですがそれでも暗号化したいという理由)
    > を書いてください。

    前のスレッドの話と関係ない場合は、「ユーザID等を含むURL」というのを、もっと具体的に、何がどのように含まれていて、どのように暗号化したいのか、その理由、そしてできれば全体的なシナリオを含めてやりたいことを書いていただけないでしょうか。

    2015年4月28日 6:51
  • 度々の適格なご指摘、本当にありがとうございます。

    言葉足らずで、大変申し訳ありません.....。

    現状は以下のようなURL構成でサイトにアクセスするシステムがあります。

    https://xxx/xxxx/セッションID/xxx/....

    クッキーではなく、URL にセッション ID を埋め込む方法をとっています。

    理由は、以下のスレッドに記載させていただいております。

    https://social.msdn.microsoft.com/Forums/ja-JP/b6552df1-0110-421c-af7d-8f24cb494ee7/id?forum=aspnetja

    限られた環境下で、限られたユーザしか、アクセスできないサイトであるため、

    セッションIDをURLに含めることで、セキュリティ上問題はないと、判断しております。

    ただ....

    セッションIDが第三者に容易に知られてしまうため、もし、

    悪意あるユーザが居た場合、セッションの乗っ取り等が発生しうる状況です。

    また、将来的にシングルサインオン等を考えた際、URLにユーザID等を含める必要性が出てくる可能性があります。

    上記のことを踏まえたうえで、URLを暗号化することが容易に行えるのであれば、

    ご教授頂きたく、投稿させて頂きました。

    知りたいこと・実現したいこととしましては、

    ・URL上のセッションIDの部分を何らかの方法で隠ぺいすることができるか?

    ・ユーザID等サイトアクセスのキーとなる情報をURL末尾に付与する必要性が発生した場合、何らかの方法で隠ぺいすることができるか?

    を知りたいです。

    2015年4月28日 9:45
  • > 限られた環境下で、限られたユーザしか、アクセスできないサイトであるため、
    > セッションIDをURLに含めることで、セキュリティ上問題はないと、判断しております。
    > ただ....
    > セッションIDが第三者に容易に知られてしまうため、もし、
    > 悪意あるユーザが居た場合、セッションの乗っ取り等が発生しうる状況です。

    上記の「ただ....」より前と後で完全に矛盾してます。

    「ただ....」より前に述べられた環境だから URL にユーザー認証に使うセッション ID を埋め込んでも問題ないと判断してその方向に進むと決めたのに、よく考えてみたらやっぱりセキュリティ的に問題がありそうだという気がしてきたのでしょうか?

    セキュリティの懸念があるのなら、ASP.NET 標準のフォーム認証を使い、認証チケットの授受にはクッキーを使って、ログインする時に ID とパスワードを送信する際はもちろん、認証チケットの授受を行う際にも SSL を使うことをお勧めします。

    そうすると、先のスレッドにあったような IE8+ のセッション共有の問題は避けられませんが、セキュリティとどちらが重要かで判断するのでしょうね。

    とりあえず質問に回答します。

    > URL上のセッションIDの部分を何らかの方法で隠ぺいすることができるか?

    「隠ぺい」というのは https://xxx/xxxx/セッションID/xxx/.... という URL でセッション ID の部分を暗号化するという意味だと思いますが、できませんし、そもそも暗号化しても何の意味もないと思います。

    暗号化できたとしても、Web サーバーはそれを有効なセッション ID として受け付けるのですから、暗号化されたセッション ID を第三者に盗聴されてセッションハイジャックされたら何ともならないですよね。

    > ユーザID等サイトアクセスのキーとなる情報をURL末尾に付与する必要性が発生した場合、何らかの方法で隠ぺいすることができるか?

    そんなことをする必要は全くないはずです。どんな事情があるか知りませんが、そんなことは考えもしない方がいいと思います。

    シングルサインオンを実現するなら Active Directory を使ったドメイン環境で統合 Windows 認証を使うべきです。URL に ID、パスワードを埋め込むなんてのは、自分に言わせれば完全に見当違いだと思います。


    #質問者さんは会社の仕事で Web アプリの開発をされているのでしょうか? そうであれば、このような話は会社の上司、先輩などに聞く話だと思うのですが。会社として質問者さんをサポートする話ですよね。



    • 編集済み SurferOnWww 2015年4月28日 11:34 一部訂正
    • 回答としてマーク yhaaaa 2015年4月30日 0:19
    2015年4月28日 11:31
  • URL を暗号化したところで無意味であるという話は私も同意見です。
    URL だけで解決しようとしたら、セッションの乗っ取りは避けられません。
    (ワンタイム的なセッション ID にすれば URL 漏洩に対策できるかもしれませんが、ブラウザの戻るボタンが使えなくなるなどの弊害が大きいので、現実的ではないでしょう)

    個人的には変なこだわり、狭い視野を持ってしまっている現状で立ち止まって、何が大事なのか、それによって失うものは何か、現実的な工数で対応できるのか、将来にわたっても安定的なのかの再考を強く求めたいところです。

    • 編集済み AzuleanMVP 2015年4月28日 13:34 セッション漏洩の話はすでに書かれていたので略
    • 回答としてマーク yhaaaa 2015年4月30日 0:19
    2015年4月28日 13:31
  • >「隠ぺい」というのは https://xxx/xxxx/セッションID/xxx/....という URL でセッション ID の部分を暗号化するという意味だと思いますが、できませんし、そもそも暗号化しても何の意味もないと思います。

    知識不足で申し訳ありません。

    セッションハイジャックについても、もう少し理解して、社内で方針を検討したいと思います。

    >シングルサインオンを実現するなら Active Directory を使ったドメイン環境で統合 Windows 認証を使うべきです。URL に ID、パスワードを埋め込むなんてのは、自分に言わせれば完全に見当違いだと思います。

    こちらについても、社内で方針を検討したいと思います。

    ご指摘、ご回答ありがとうございました。

    2015年4月30日 0:34