C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[11]: C#を用いてインターネット(TCP通信等)


(過去ログ 42 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■22020 / inTopicNo.1)  C#を用いてインターネット(TCP通信等)
  
□投稿者/ taguchi (37回)-(2008/07/15(Tue) 09:39:37)

分類:[C#] 

taguchiです。
以前こちらのサイトで大変お世話になったものです。

今回も、少々躓いてしまいました。
毎度大変恐縮ですが、どうか良きアドバイスをお願いいたします。


今回C#(VS2005)を用いてインターネット(TCP通信等)を介した形で基幹系処理を行いたいと考えているのですが、可能でしょうか?

例えば、SQLSERVERが存在するサーバにクライアントからインターネットを介してアクセスを行い、基幹系業務を行うといったような形です。

クライアントは、もちろんドットプリンター等でいわゆる基幹系印刷(得意先台帳等の連続帳票出力)も行いたいと考えています。

通常ですと、LAN上にSQLSERVER、クライアントアプリケーションを配置し、ODBC通信等で実現出来ますが、インターネット上となるとこの形で実現するのはやはり不可能なのかと考えています。

もちろん、インターネットを介していますのでセキュリティー等の脆弱性は存在する事となりますが、現段階では考慮しない事とします。

単純にウェブ上でのデータ表示等であればASP.NET等を使用すれば実現できるのでしょうが、クライアントで連続帳票出力を実現するには、クライアントにクリスタルレポート等で出力するC#等のアプリケーションが必要なのかと考えております。

何か事例、参考になるサイト等ありましたら紹介願えませんでしょうか?

不躾な質問で大変恐縮ですが、どうかよろしくお願いいたします。
引用返信 編集キー/
■22037 / inTopicNo.2)  Re[1]: C#を用いてインターネット(TCP通信等)
□投稿者/ 黒龍 (104回)-(2008/07/15(Tue) 11:11:49)
つVPN
引用返信 編集キー/
■22045 / inTopicNo.3)  Re[1]: C#を用いてインターネット(TCP通信等)
□投稿者/ はつね (808回)-(2008/07/15(Tue) 11:44:40)
はつね さんの Web サイト
No22020 (taguchi さん) に返信
> 今回C#(VS2005)を用いてインターネット(TCP通信等)を介した形で基幹系処理を行いたいと考えているのですが、可能でしょうか?

可能です。
ただし、セキュリティをどのように考えているかにもよりますが、VPNなどの仮想通信網をインターネット上に構築
して、社内LANのようにしちゃった方がアプリは何も考慮しなくていいのでラクです。
VPNはルータ製品でサポートしているものがあるので、そうするとOSレベルでも意識しなくていいのでラクです。

そうすれば、

> 通常ですと、LAN上にSQLSERVER、クライアントアプリケーションを配置し、ODBC通信等で実現出来ますが、
> インターネット上となるとこの形で実現するのはやはり不可能なのかと考えています。

も可能です(ODBCによる速度性能などの問題は除く)。

引用返信 編集キー/
■22049 / inTopicNo.4)  Re[2]: C#を用いてインターネット(TCP通信等)
□投稿者/ taguchi (38回)-(2008/07/15(Tue) 12:01:12)
黒龍さん、はつねさん
アドバイスありがとうございました。

> ただし、セキュリティをどのように考えているかにもよりますが、VPNなどの仮想通信網をインターネット上に構築
> して、社内LANのようにしちゃった方がアプリは何も考慮しなくていいのでラクです。
> VPNはルータ製品でサポートしているものがあるので、そうするとOSレベルでも意識しなくていいのでラクです。

おっしゃる通りVPNを構築し、直に接続するか、もしくはターミナルサーバに接続すれば実現は可能だと思います。

説明不足で申し訳なかったのですが、今回使用するインターネットというのは、VPN等の仮想LANではなく、
不特定多数(実際には会員のみ)のクライアントからアクセスさせるために、使用ネットワークは、
純粋なインターネット接続のみとしております。

たとえば、ネットゲームのように、クライアントをダウンロードして実行させるような形式が出来ればと考えております。

よろしくお願いいたします。
引用返信 編集キー/
■22050 / inTopicNo.5)  Re[3]: C#を用いてインターネット(TCP通信等)
□投稿者/ 黒龍 (110回)-(2008/07/15(Tue) 12:08:48)
セキュリティは最初は考えたくないって人が多いのですが趣味じゃないのなら
リスクとして見込んでおくべきだと思いますよ。
また、事例も見つかりにくい(というかない)と思います。
引用返信 編集キー/
■22057 / inTopicNo.6)  Re[4]: C#を用いてインターネット(TCP通信等)
□投稿者/ taguchi (39回)-(2008/07/15(Tue) 13:43:32)
黒龍さん

アドバイスありがとうございます。

セキュリティーの問題をこの時点で持ち出すと、おそらく話にならないかなぁと思ったので、現段階では考慮しないとさせて頂いた次第です。
セキュリティーは、おそらく突き詰めてゆくとキリが無いですし、そのあたりはSSL等でなんとかなるんじゃないか?と楽観的に考えておりました。

> また、事例も見つかりにくい(というかない)と思います。

やはり厳しいのでしょうか・・・。

引用返信 編集キー/
■22070 / inTopicNo.7)  Re[5]: C#を用いてインターネット(TCP通信等)
□投稿者/ ちゃっぴ (130回)-(2008/07/15(Tue) 15:18:01)
ちゃっぴ さんの Web サイト
Internet からの DB への直接続はやめましょう。

Internet と DB の間に server を一つ置き、そいつを proxy のような感じで動作させます。
その server 上に置く application は Web service がいいですね。Firewall を気にする必要がないので。こんな感じ。

Client - Internet - Web server - DB server

Web server は NIC 2 枚さしてそれぞれ、Internet 側と DB Server 側に接続し、適切に routing 設定を施します。
引用返信 編集キー/
■22072 / inTopicNo.8)  Re[6]: C#を用いてインターネット(TCP通信等)
□投稿者/ ちゃっぴ (131回)-(2008/07/15(Tue) 15:32:51)
ちゃっぴ さんの Web サイト
> セキュリティーは、おそらく突き詰めてゆくとキリが無いですし、そのあたりはSSL等でなんとかなるんじゃないか?と楽観的に考えておりました。

一般的に利用されている SSL は client と server 間の通信を第三者に傍受されないように保護する仕組みです。それだけでは client が悪意のある攻撃者である場合、その通信を防ぐことはできません。

もっとも、client へ証明書を install して SSL client 認証を併用することにより、証明書が install されていない client をはじくことができますが、これはほとんど利用されていないです。これならば、VPN の代わりとして代用できます。

Security が不要と言い切る前にまずはこのあたりの知識を正しく身に着けるべきです。
もしくは、外部の信頼できるところに security review を依頼する。

今回構築する system は Internet に直接接続されるとのことなので、アホのように攻撃受けますよ。一度、Internet から送られてくる通信を覗いてみると非常に怖いことが実感できるでしょう。

先ほど、私が提案した構成でも Web Server は Internet から直接攻撃を受けますので、これでもか!というくらいの secuirty 対策が必要です。基盤・application ともに。

あと、SSL を利用するとして、client 認証を併用しない場合、対象の Web Service が brute force attack されて情報漏洩する可能性が高いので、厳しい password policy と lockout 機構が必要ですね。
引用返信 編集キー/
■22073 / inTopicNo.9)  Re[7]: C#を用いてインターネット(TCP通信等)
□投稿者/ ちゃっぴ (132回)-(2008/07/15(Tue) 15:39:37)
ちゃっぴ さんの Web サイト
そういや昔こんなの書いたの思い出した。

Web application を host する secure な network 構成
http://blogs.wankuma.com/tyappi/archive/2007/09/09/94931.aspx

Web application が Web Service へ変わっただけですので取るべき構成は一緒です。
引用返信 編集キー/
■22079 / inTopicNo.10)  Re[8]: C#を用いてインターネット(TCP通信等)
□投稿者/ taguchi (40回)-(2008/07/15(Tue) 16:06:13)
2008/07/15(Tue) 16:10:31 編集(投稿者)

ちゃっぴさん
アドバイスありがとうございます。

>Internet と DB の間に server を一つ置き、そいつを proxy のような感じで動作させます。
>その server 上に置く application は Web service がいいですね。Firewall を気にする必要がないので。こんな感じ。
>
>Client - Internet - Web server - DB server

この構成は理解出来るのですが、C#としてクライアントからデータベースには、どのような作りで通信を行えばよいかご教授願えれば助かります。または、具体的に説明のあるサイト等ありましたら教えていただけませんでしょうか。

よろしくお願いいたします。
引用返信 編集キー/
■22084 / inTopicNo.11)  Re[9]: C#を用いてインターネット(TCP通信等)
□投稿者/ ちゃっぴ (136回)-(2008/07/15(Tue) 16:17:44)
ちゃっぴ さんの Web サイト
No22079 (taguchi さん) に返信
> >Client - Internet - Web server - DB server
>
> この構成は理解出来るのですが、C#としてクライアントからデータベースには、どのような作りで通信を行えばよいかご教授願えれば助かります。または、具体的に説明のあるサイト等ありましたら教えていただけませんでしょうか。

Client applicatin からは直接 DB へ接続しません。
Web service を動かしている Web Server を通じて DB から情報を引っ張ってきます。
流れとしては下記のような感じかな。

1. Client から Web server へ Web service の method を call
2. Web service は client から送られてきた要求を基に DB から情報 (Dataset) を取得
3. Web service は DB から送られてきた情報 (Dataset) を client application に返す

あ、この前に認証が入りますのでその点よろしく。
こんな仕様を満たす Web service を作成してやればよいでしょう。

今回、DB server と client の間に Web server の層を作ったのは、被害の局所化を狙ってのものです。Web service は DB の情報を何でも返せるものを作ってしまうとこの構成の意味が激減しちゃいます。

なので、Web service には DB 上で本当に必要な情報のみしか扱えないように厳しく制限を掛ける必要があります。その点には注意してください。
引用返信 編集キー/
■22086 / inTopicNo.12)  Re[10]: C#を用いてインターネット(TCP通信等)
□投稿者/ ちゃっぴ (137回)-(2008/07/15(Tue) 16:30:28)
ちゃっぴ さんの Web サイト
もう一言。

DB からの情報取得には stored procedure を利用してくださいね。
SQL injection 食らったら目も当てられないので。
引用返信 編集キー/
■22091 / inTopicNo.13)  Re[11]: C#を用いてインターネット(TCP通信等)
□投稿者/ taguchi (41回)-(2008/07/15(Tue) 16:50:53)
ちゃっぴさん

詳細なアドバイスありがとうございました。

WebServiceというもの自体がいまいちピンと来ていませんが、
この辺りに目星をつけて調べていけば出来そうな気がしてきました。

セキュリティーに関しましては、当然企業情報ですので、
漏洩の無いように構築していきたいと思います。

ありがとうございました。
またよろしくお願いいたします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -