非パブリックにより、中程度の信頼が反映されてアクセス許可エラーが発生する
-
06-07-2019 - |
質問
これまでのところ、中程度の信頼で実行されているWebサイトに関連する問題に遭遇したことがないという点で、たぶん幸運だったに違いありません。私はイントラネットアプリを開発したことがあるか、たまたま完全な信頼で運営されているホスティング会社を使用したことがあります。しかし、最近のプロジェクトで使用するように依頼されたホストは中程度の信頼度で実行されるため、アプリでこれを実行しようとしています。いくつかの質問-Windows XPで開発しています。そこにあるIISは中程度の信頼(デバッグしやすい)に構成できますか、それともweb.config設定ですか?このテーマに関する豊富な情報があり、学習曲線は急です。
第二に、多くのコードをいじって削除した後、この行が許可エラーを引き起こしていると思います:
Type.GetFields(BindingFlags.InstanceまたはBindingFlags.NonPublicまたはBindingFlags.Public)のFieldInfoとしての各FieldInfoについて
誰でもこれが可能性のある候補であることを明確にできますか、特に。その非公開フラグ?これは<!> ampのコピーです。コードを貼り付けたので(コーディングホラーはこのリスクを強調しました)、私は考えたこともありませんでした。ループは、オブジェクトのパブリックフィールドと非パブリックフィールドの両方の各フィールドを通過するものと想定しています-そして、保護されたフィールドは中程度の信頼の反映で禁止されていることを読みました。
乾杯、ロブ。
解決
申し訳ありませんが、非公開でのリフレクションは完全な信頼と同等です。
どういうわけか完全な信頼は持っていないが、非公開のリフレクションがあった場合、それを利用して自分のコードの信頼レベル(書き込み可能な文字列など)を変更できます。
他のヒント
はい、XP上のWebサイトは中程度の信頼で実行するように設定できます:
<!> lt; system.web <!> gt;セクションに以下を追加します。
<!-- Case is important: it's Medium, not medium -->
<trust level="Medium"/>
そしてあなたはそこにいます。
ほとんどのホストは、サイトをわずかに高い<!> quot; Medium <!> quot;で実行します。信頼設定、デフォルト以外のいくつかの追加の権利-彼らの技術者は、もしあればどんな違いがあるかをあなたに伝えることができるはずです。
ご覧になる場合:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web_mediumtrust.config
適用されるデフォルト設定が表示されます。
反射は、 GetFields ページ:
要求されたフィールドが非パブリックであり、呼び出し元に現在のアセンブリ外の非パブリックオブジェクトを反映するReflectionPermissionがない場合、このメソッドはnull参照(Visual BasicではNothing)を返します。
これはnullを返す可能性があるため、繰り返し処理を開始する前にnullをチェックするか、FieldInfoがnull / nothingでないことを使用前にチェックする必要があります。
誰も答えていないので、これをクローズとしてフラグを立てるだけでなく、再コーディングを試みるのは問題が多すぎることを証明しただけです。このプログラムは悪く書かれていませんが、オブジェクトマッピングにリフレクションを非常に使用しています。正直なところ、完全な信頼をサポートしているホスティング会社を見つけるのは簡単です。