- PR -

セキュリティ例外

1
投稿者投稿内容
ジルカ
会議室デビュー日: 2006/06/02
投稿数: 9
投稿日時: 2006-09-15 15:48
いつも拝見させていただいております。

ASP.NET2.0(VB)で、Binディレクトリに厳密名が設定されているDLLを配置し、それを使用すると以下のエラーが発生します。

--------------------------------------------------------------------------------
セキュリティ例外
説明: このアプリケーションはセキュリティ ポリシーで許可されていない操作を実行しようとしました。このアプリケーションで必要なアクセス許可を取得するには、システム管理者に相談するか、構成ファイルでアプリケーションの信頼レベルを変更してください。

例外の詳細: System.Security.SecurityException: アセンブリは部分的に信頼されている呼び出し元を許可しません。
--------------------------------------------------------------------------------

(厳密名が設定されていないDLLを使用してもエラーにはなりませんでした。)

初歩的な質問ですみませんが、web.configの設定が足りていないのか、サーバー上の制約(例えば、.Net Frameworkの設定)によるものなか、わかりますでしょうか。


試しに、web.configに<trust level="Full" originUrl=""/>を追加しましたが、エラーとなりました。
--------------------------------------------------------------------------------
構成にエラーがあります。
説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。

パーサー エラー メッセージ: この構成セクションはこのパスでは使用できません。これはサイト管理者が、継承された構成ファイルから <location allowOverride="false"> を使用して、このセクションへのアクセスをロックしたときに発生します。
--------------------------------------------------------------------------------

以上、よろしくお願いいたします。


[ メッセージ編集済み 編集者: ジルカ 編集日時 2006-09-15 15:52 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-09-15 17:39
記憶が曖昧ですけど、このエラーって厳密名が付いてるアセンブリから厳密名が付いていないアセンブリを参照しようとすると出るやつだったような。

アセンブリかクラスになんかの属性をつけて回避できたような気がするけど・・・忘れた(回避させちゃっていいのかどうかは別問題だと思いますが)

思い出したらまた書き込みます。

外してたらスミマセン。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-09-15 18:08
引用:

ジルカさんの書き込み (2006-09-15 15:48) より:
試しに、web.configに<trust level="Full" originUrl=""/>を追加しましたが、エラーとなりました。
-------------------------------------------------------------------------------構成にエラーがあります。
説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。

パーサー エラー メッセージ: この構成セクションはこのパスでは使用できません。これはサイト管理者が、継承された構成ファイルから <location allowOverride="false"> を使用して、このセクションへのアクセスをロックしたときに発生します。
-------------------------------------------------------------------------------


なんで trust要素 をいじるんだろって思ったんだけど、きっとこれ見てなんとなくやったんですよね?
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=331823&SiteID=7
同じSecurityExceptionであっても、内容は違いますよね?

構成エラーになってる理由は「継承された構成ファイルから <location allowOverride="false">」だからかと。machine.configか上のweb.configでそうゆう設定になってるはずです。

で、ちと思い出したんですが、
<Assembly: Security.AllowPartiallyTrustedCallers()>
多分コレ。厳密名をつけたアセンブリにこの属性を追加。

http://search.microsoft.com/results.aspx?mkt=ja-JP&setlang=ja-JP&q=AllowPartiallyTrustedCallers
この辺を漁っといた方がいいかもしれませんね。
ジルカ
会議室デビュー日: 2006/06/02
投稿数: 9
投稿日時: 2006-09-15 18:32
かめたろさん、ありがとうございます。

<Assembly: Security.AllowPartiallyTrustedCallers()>
は、厳密名をつけたアセンブリにこの属性を追加することが前提になりますが、このアセンブリが自分で作成したものではない場合はどうしたらいいでしょうか。
使用するDLLは、iTextSharpになります。

やはりGACに登録しないといけないのでしょうか。
http://www.microsoft.com/japan/msdn/security/guidance/secmod116.mspx
をみると、
---------------------------------------------------------------
ASP.NET は厳密な名前のアセンブリをドメイン中立のアセンブリとして読み込むので、アセンブリは GAC 内にインストールされていなければなりません。ASP.NET のWeb アプリケーションによって呼び出される厳密な名前のアセンブリはすべて、GAC 内にインストールされている必要があります。
---------------------------------------------------------------
と書いてあります。

ちなみに、運用するサーバーはレンタルサーバーなので、DLLをbin/に置いて運用するのが目的です。



かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-09-15 20:02
オレ、あいまいで中途半端な知識しか持ち合わせていないんで、、、
ズバッと回答できませんが

引用:

<Assembly: Security.AllowPartiallyTrustedCallers()>
は、厳密名をつけたアセンブリにこの属性を追加することが前提になりますが、このアセンブリが自分で作成したものではない場合はどうしたらいいでしょうか。
使用するDLLは、iTextSharpになります。


iTextSharpに厳密名がついてるんですかね。
iTextSharpってソースコードも公開してませんでしたっけ?
勝手にカスタマイズして使ったらダメなのかなぁ
ダメなのであれば呼び出し元のアセンブリに厳密名をつければOKじゃないかなぁ。厳密名付きアセンブリから厳密名付きアセンブリへの参照は問題ないはず・・・

引用:

やはりGACに登録しないといけないのでしょうか。
http://www.microsoft.com/japan/msdn/security/guidance/secmod116.mspx
をみると、
---------------------------------------------------------------
ASP.NET は厳密な名前のアセンブリをドメイン中立のアセンブリとして読み込むので、アセンブリは GAC 内にインストールされていなければなりません。ASP.NET のWeb アプリケーションによって呼び出される厳密な名前のアセンブリはすべて、GAC 内にインストールされている必要があります。
---------------------------------------------------------------
と書いてあります。


この説明、1.1のことですよね。2.0ではこんなの気にしなくてよくなったんじゃなかったかなぁ・・・。どっかでそんな情報をみたような

追加-----------------------
http://www.microsoft.com/japan/msdn/net/books/ProgNetFramework/progFramework03.aspx
ここに、「3.7 | 厳密名付きアセンブリをプライベートに配布する」てのがあります。厳密名を付けたからって必ずGACに配置しなきゃいけないわけじゃないって内容。でもこのページ、どのバージョンのことについて述べているのか分からないですね。適当言ってスミマセン。でもオレ、1.1で厳密名つきのプライベート配置で実際動かしちゃってます。どういうケースのときがまずいんだろうか?

あと、参考までに「セキュリティ ガイドライン : .NET Framework 2.0」
http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/pagguidelines0003.aspx


[ メッセージ編集済み 編集者: かめたろ 編集日時 2006-09-16 01:17 ]
1

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