- PR -

SecurityException

投稿者投稿内容
けい
常連さん
会議室デビュー日: 2001/09/12
投稿数: 48
投稿日時: 2002-01-21 23:36
C#等で作ったプログラムをネットワークディレクトリから直接実行しようとすると、
System.Security.SecurityException
が投げられて、デバッカが起動してしまうのですが
(VS.NETの入ってない環境ではエラーダイアログ)、
これってどうにかならないのでしょうか?
もちろん、ローカルにコピーしてから実行すれば何も問題ないのですが...
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-01-22 16:36
そのコードの中で何をしようとしていますか?たとえば、ローカルディスクにファイルを作ろうとしたり、ネットワークアクセスしようとしたりは軒並みCode Access Securityの餌食です。ローカルのプログラムはFullTrustですので、何でもできます。

つまり、「セキュリティ>機能/便利さ」にシフトしたMSの姿勢の表れが、その例外なんだと思ってます。"and, it's a good thing!"
けい
常連さん
会議室デビュー日: 2001/09/12
投稿数: 48
投稿日時: 2002-01-23 20:43
ファイルの読み書きはしてませんが、
外部のWebサービスを呼び出しているんで、そのせいですね。

こういったことをするプログラムは全部ローカルに
コピーしなきゃいけないってのは、面倒ですね。
イントラネットくらい信じてもいいと思うのですが(^^;
プログラムになんらかの署名をしておけば...なんてことは?
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-01-24 11:17
引用:

けいさんの書き込み (2002-01-23 20:43) より:
こういったことをするプログラムは全部ローカルにコピーしなきゃいけないってのは、面倒ですね。



もちろんそんな必要はありません。そのアセンブリが属するコードグループに対するPermissionSetを変更したり、新しいコードグループを作ればよいのです。

引用:

けいさんの書き込み (2002-01-23 20:43) より:
イントラネットくらい信じてもいいと思うのですが(^^;
プログラムになんらかの署名をしておけば...なんてことは?



管理ツールの中にある、Microsoft .NET Framework Configurationツールを見れば大体わかると思います。デフォルト構成では、IEのセキュリティゾーンごとに違うポリシーが割り当てられ、さらにMyComputerゾーンの中で、MicrosoftまたはECMAの鍵で署名されているコードに特別なポリシーが割り当てられています。

そこで、1)イントラネットゾーンのセキュリティ構成を変える、2)新しいコードグループを作って、適切なPermissionSetを与える、という方法で、特定のサイト、アセンブリなどを信頼したり、逆に信頼しなかったりすることが可能です。

Code Access Securityについて、Introduction的な文献が世の中にないんですよね。.NET Frameworkの中でも最も重要な機能の1つだと思うんですが...。
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-01-24 19:13
引用:

私の書き込み (2002-01-24 11:17) より:
Code Access Securityについて、Introduction的な文献が世の中にないんですよね


と思ったらありました。
http://msdn.microsoft.com/library/?url=/library/en-us/dv_vbvcstechart/html/vbtchSecurityConcernsForVisualBasicNETProgrammers.asp?frame=true
けい
常連さん
会議室デビュー日: 2001/09/12
投稿数: 48
投稿日時: 2002-01-24 20:57
> Microsoft .NET Framework Configuration
ってのは見つからないのですが、Beta2だからでしょうか? (RCとか?)

とりあえず、Code Access Securityというキーワードで検索していたら、
CasPolってコマンドラインツールを見つけたので、
よく分からないまま、
>caspol -ag 1.2 -zone Intranet FullTrust
を実行するとUNC指定でExceptionを出さないようになりました。

> と思ったらありました。
ありがとうございます。読んでみます。
(英語を読むには少々時間が... )

http://www.microsoft.com/JAPAN/developer/net/dnBDA/authaspdotnet.asp
の下の方に少しだけ書かれているようなのですが、まだ(?_?)状態です。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2002-01-29 10:12
コードアクセスセキュリティの話はMSDNマガジンの2001年3月号に概要が紹介されています。
http://www.ascii.co.jp/pb/msdn/bn_no12.html
ここの「.NETにおけるセキュリティ:Common Language Runtimeによるコードアクセス権の
実現」という記事です。

セキュリティを変更することで、ネット上にあるdllやexeを呼び出して実行することが
できるようになりますね。これで、ソフトウェアのバージョンアップはネット上で一括管理、
なんてことも可能のはず。
Officeの.NETバージョンはそんな形になるのかな、なんて考えています。
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-01-29 15:01
引用:

shuさんの書き込み (2002-01-29 10:12) より:
セキュリティを変更することで、ネット上にあるdllやexeを呼び出して実行することが
できるようになりますね。



セキュリティを変更しなくても、デフォルトの構成で、自分とおなじ場所からDLLをダウンロードしたり、自分とおなじ場所にあるファイルを読むことは可能です。

一般に、知らないところから好きなようにDLLやEXEをダウンロードして実行できるようにすべきではないと思います。マクロウィルスの二の舞ですから。

そうなると、たとえばIEのTrusted Zoneの重要性が増すわけですが、これを正しく構成しないと動作しないアプリケーションが氾濫すると、「VBでC/S」な時代への逆行ですから、これもあまりお勧めできません。そうすると、実際にはかなり限定されたライブラリしかコードの中で利用できないということにもなります。ま、Active Directoryという選択肢はありますけど。

そして同時に、これらのセキュリティ構成は、開発者に対して、「セキュリティを意識した開発環境」での開発を促すことにつながります。開発環境では動いたのに、客先の実行環境では動かない、ということが続出しかねないからです。

Shuさんご紹介の記事を書いたKeith Brownが以前から言っていることですが、開発者は開発にあたって、自分のマシンにAdministratorとしてログオンしていてはいけない、ということだそうです。もっとも限定された権限しかもたないユーザーで開発やテストを行うべきだ、ということです。インストールなどの、特権が必要な作業は、RunAsコマンドを使ってAdminになって実行すればいいわけですので。

つまるところ、ようやく文化的にもUNIXな世界に追いついてきたし、追いつかなければならないところにきた、ということでしょうね。

スキルアップ/キャリアアップ(JOB@IT)