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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

747閲覧

Windowsフォームアプリにおけるサーバ接続情報の保管方法について

yukidaruma.

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/11/03 05:28

編集2018/11/03 12:29

前提・質問内容

WindowsフォームアプリからActiveDirectory認証やWCFサービスの呼び出しを行おうとしています。
ADやWCFサービスへの接続時、接続先のサーバ情報をクライアント側で保管する必要があるかと思いますが、ユーザにサーバ情報を知られたくない場合、どのように保管するのが良いでしょうか。
クライアントPCがADドメインに参加していなる状態、していない状態の両パターンで一般的なケースやこうするべきという方法がありましたらご教示いただきたいです。(どちらか一方だけでもご回答いただければ助かります)

■前提
・作成したアプリは不特定多数のユーザに配布する前提です。
・また、ここで指すサーバ情報はホスト名やIPアドレスでユーザ情報は含みません。

■補足
大前提として知りたいのは、上述のようなアプリを作成しようとした際にどうしたらセキュリティを担保できるかというところになります。
「そもそもサーバ情報(ホスト名やIPアドレス)知られてもXXな理由で問題ない」などあればご意見いただけますと幸いです。

調べたこと

①app.configに記述し、暗号化する
下記サイトを参考に暗号化する方法も検討しましたが、暗号化と複合化するPCが同一である必要があるので難しいのかなと思っています。

【C#プログラミングレッスン】- 暗号化編 configファイルの暗号化

②プログラム内に直接記述する
exeを逆コンパイルされる恐れを考えると避けた方が良いのかなと思っています。

補足情報(FW/ツールのバージョンなど)

・開発OS:Windows10 Pro
・開発環境:Visual Studio 2017 Professional
・フレームワーク:.NET Framework 4.6.1

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/11/03 06:22

前のスレッド https://teratail.com/questions/152650 の話の続きで、ユーザー名&パスワードを送信するときの話ですか? そうではなくて、単純に接続先の IP アドレスやホスト名の話ですか? そこを、即ちどういう情報かを明確にしてください。
yukidaruma.

2018/11/03 06:34

>SurferOnWww様 コメントありがとうございます。構築するシステムという意味では続きになりますが、認証情報の件とは別の話になります。質問内容に追記しましたが、ユーザ情報は含まず、IPアドレスやホスト名を指しています。
guest

回答3

0

構築するシステムという意味では続きになりますが、認証情報の件とは別の話になります。質問内容に追記しましたが、ユーザ情報は含まず、IPアドレスやホスト名を指しています。

であれば、最終的に「構築するシステム」は Active Directory ドメイン環境ということですので、イントラネット内でシングルサインオンになるのでは? であれば、セキュリティ面ではあまり神経を使わなくても良いと思うのですが・・・

投稿2018/11/03 08:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yukidaruma.

2018/11/03 10:01

仮にドメイン参加していないPCからのアクセスだったとした場合はいかがでしょうか?例えば外部のユーザにVPN接続させて社内ネットワーク内のAD環境下のサーバにアクセスする場合など。
退会済みユーザー

退会済みユーザー

2018/11/03 10:47

そういう風に範囲を広げるのではなく、最初からどういう環境・条件なのかしっかり書いてもらえないと議論にならないと思うのですが。
yukidaruma.

2018/11/03 12:41

そうですね。確かにADドメイン環境下なのかどうか前提の記載が漏れていましたので質問内容に追記させていただきました。 大きな意味では別スレッドの件の続きではありますが、本スレッドに関しては一旦切り離して考えていただけると幸いです。他の方は別スレッドでのやり取りをご覧になっていないというのと、まだ要件定義・設計段階ということもあり「Aの時はX」「Bの時はY」のようなケースを把握できると助かります。teratailのルールまたはポリシーとしてケース分けする場合は別スレッドを立てるべきということであればそうさせていただきます。
退会済みユーザー

退会済みユーザー

2018/11/03 12:50

そういうゴールが見えない話であれば私はお付き合いできませんので撤退します。
yukidaruma.

2018/11/04 00:03

ゴールが見えないですか?本スレッドにおけるゴールは質問内容に記載している通り「Windowsフォームアプリにおいてサーバ情報をどのように保管するか」または「他にご意見がないか」というのをご教示いただくことです。もちろんご回答いただくかどうかは自由ですし、こちらの質問の仕方がSurferOnWww様のポリシーに反するのであればお答えいただけないのは仕方ないと思います。ここまでコメントいただきありがとうございました。
退会済みユーザー

退会済みユーザー

2018/11/04 01:47 編集

> ゴールが見えないですか?本スレッドにおけるゴールは質問内容に記載している通り「Windowsフォームアプリにおいてサーバ情報をどのように保管するか」または「他にご意見がないか」というのをご教示いただくことです。 見えません。そもそも、それをゴールとは言いません。それに対する答えを出すことがゴールのはず。 答えは条件・環境によって変わってくるというのは理解できますよね? ならば、あなたが期待する答を得るために条件・環境を提示するのはあなたの責任範囲というのは理解できませんか? 回答者があれこれ考えて回答してくれると期待しているとすると、それは期待しすぎです。 例えばの話をすると、インターネットに公開されているサイトの URL(ホスト名&IP アドレス情報)はどこに保存しておくかという質問があったとします。 一般的にはインターネットに公開されているサイトの URL は秘密でも何でもないはず。業務上見る必要があれば堂々と自分の PC のブラウザのお気に入りに登録しておけば?・・・という答が最初に出てくると思います。 でも、アクセスしている先が他人に知られるのはマズイという事情があれば、それはあなたにとっては秘密という話になる。そういう事情があれば、上の答えは求める答えになっていない。 でもそんな事情は他人には分からない。事情も千差万別のはず。そんなことは考える気もしない。だから撤退するということです。
退会済みユーザー

退会済みユーザー

2020/01/21 14:32 編集

今頃になってマイナス評価を付けた人、理由を書こう。今頃になって匿名でそういうことをするのは卑怯者だよ
guest

0

ベストアンサー

クライアントからは通信すれば接続先はわかりますので、隠す意味はあまりありません。
VPN接続をすれば少々マシにはなりますが、完全ではありません。
サーバー側でWebサービスを公開する以上、セキュリティ対策はサーバー側で十分に行う必要があります。
接続先程度を必要以上に隠すと、開発者がセキュリティ知識に乏しいと思われる恐れすらあります。
私が作るクライアントでは、Webサービスの接続先をユーザーが変更できるようにしています。

どうしたらセキュリティを担保できる

XXな理由で問題ない

そもそも、セキュリティに関しては「こうすれば安全」なんて方法はありません。
そんな方法があるならハッカーもクラッカーも存在していません。

投稿2018/11/03 06:28

hihijiji

総合スコア4150

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

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

yukidaruma.

2018/11/03 06:51

hihijiji様、ご回答ありがとうございます。 >サーバー側でWebサービスを公開する以上、セキュリティ対策はサーバー側で十分に行う必要があります。 やはりそういう考え方なんですね。事実、セキュリティ知識に乏しいため本件質問させていただいており、このようなご回答いただけると大変助かります。 >そもそも、セキュリティに関しては「こうすれば安全」なんて方法はありません。 >そんな方法があるならハッカーもクラッカーも存在していません。 ちょっと極端な書き方でしたね。仰る通り「絶対安全」は無いと思っています。ただ、「一般的にこういう対策を取る」というものがあればご教示いただければと思っていた次第です。
guest

0

既に解決されているようですが、自分のために回答を記載しておきます。
個人的な意見であるため、あまり真に受けないようにしてください。
※WCFについてあまり詳しくないので、誤っていたらごめんなさい。

(組織外に漏れるのは良くないですが)接続先の情報については特に漏れても問題ないと考えています。
それよりも通信している内容が漏れるのは良くない認識です。

WCFにおいて、サーバーコントラクト上で状態を保持できるものがあります。
その中で認証情報を保持させるような場合、通信経路の安全性に配慮する必要があります。
Bindingの種類が多数あり、それぞれに適用できるSecurityがあります。
記憶が確かなら、WSHttpBindingのMessageSecurityでWindows認証を使用することで、環境にとらわれることなく、通信経路をある程度保護することが可能だったと記憶しています。また、クロスドメイン環境でも行けた気がします。
※MessageSecurityで電文は暗号化された(強度不明)認識です
※TransportSecurityを適用したかったのですが、ドメイン全体で信頼された証明書が必要または、クライアントへの証明書(オレオレ証明書)のインストールが必要(または公的機関による証明書が必要)だったので、あきらめた記憶があります

投稿2020/01/21 18:12

testset

総合スコア221

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問