問題タブ [partial-trust]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - Visual Studio 内から部分信頼で MSTest を実行する
MSTest を部分信頼で実行できるようにしたいと考えています。これにより、単体テストが呼び出すコードでできることとできないことを構成できます。
私が解決しようとしている問題は、ファイル システム、データベース、システム クロック、その他の外部リソースが使用されている場合に、自動化された (単体) テストが失敗するようにすることです。部分信頼で実行することで、AppDomain が実行できるアクションと実行できないアクションの種類を構成できます。これにより、使用されているリソースを正しく抽象化していないコード内の場所を検出できます。
これを達成する他の方法がある場合は、お知らせください。
wpf - HostScript を介した XBAP での部分信頼 JavaScript オブジェクト アクセス: コールバックでの SecurityException
WPF 4 で追加された XBAP スクリプト相互運用機能で問題が発生しました。これには、次の組み合わせが含まれます。
- .NET からスクリプト オブジェクトのメンバーにアクセスする
- JavaScript から呼び出されたコールバックで .NET コードを実行する
- 部分信頼での実行
これは「任意の 2 つを選択する」シナリオのようです...これら 3 つすべてを実行しようとすると、SecurityException
.
たとえば、1 と 3 を組み合わせるのは簡単です。これをホスティング Web ページのスクリプトに入れることができます。
そして、たとえば、私の WPF コード ビハインドのボタン クリック ハンドラーで、これを行うことができます。
これは、部分信頼展開でも問題なく機能します。(私は、Visual Studio 2010 の WPF ブラウザー アプリケーション テンプレートによって提供される既定の ClickOnce セキュリティ設定を使用しています。これは、インターネット ゾーンで実行されているかのように XBAP をデバッグします)。
2 と 3 を組み合わせることもできます。私の .NET メソッドを JavaScript から呼び出せるようにするには、残念ながらデリゲートを渡すだけではなく、次のようにする必要があります。
そして、次のような JavaScript メソッドを宣言できます。
そして今、たとえば、WPF ボタン クリック ハンドラーで、これを行うことができます。
したがって、私の WPF コードは ( を介してBrowserInteropHelper.HostScript
) 私の JavaScriptCallMethod
関数を呼び出し、それが今度は私の .NET コードを呼び出します。具体的には、MyMethod
私の CallbackClass によって公開されたメソッドを呼び出します。(または、属性を持つデフォルト メソッドとしてコールバック メソッドをマークすることもでき[DispId(0)]
ます。これにより、JavaScript コードを簡素化できます。スクリプトは引数自体をメソッドとして扱うことができます。どちらの方法でも同じ結果が得られます。)
MyMethod
コールバックが正常に呼び出されました。デバッガーで、JavaScript (42) から渡された引数が正しく通過していることを確認できます (適切に int に強制変換されています)。CallMethod
そして、メソッドが戻ると、残りの関数のおかげで、返された文字列が HTML UI に表示されます。
2 と 3 を実行できます。
しかし、3つすべてを組み合わせるとどうなりますか?ReturnSomething
コールバック クラスを変更して、最初のスニペットである関数から返されたものと同じように、スクリプト オブジェクトを操作できるようにしたいと考えています。最初の例が成功したので、そのようなオブジェクトを扱うことが完全に可能であることがわかっています。だからあなたは私がこれを行うことができると思うでしょう:
次に、JavaScript を次のように変更します。
そして、前と同じように、WPF ボタンのクリック ハンドラーからメソッドを呼び出します。
これにより、JavaScriptCallMethod
関数が正常に呼び出され、 C# メソッドが正常に呼び出されますが、そのメソッドがプロパティMyMethod
を取得しようとすると、. コールスタックは次のとおりです。arg.Foo
SecurityException
RequestFailed
これは、例外によって報告されたトレース全体です。上記のCallbackClass.MyMethod
では、Visual Studio は [Native to Managed Transition] と [AppDomain Transition] の 2 つのロットを表示しています。これがスタック全体です。(明らかに、現在は別のスレッド上にいます。このコールバックは、[スレッド] パネルでワーカー スレッドとして記述されているもので発生しています。メイン スレッドがまだ WPF ボタン クリック ハンドラ内にあり、JavaScript への呼び出しを待っていることがわかります。CallMethod
返す関数。)
ComBinder
どうやら問題は、DLR が完全な信頼を要求する で JavaScript オブジェクトをラップしてしまったことです。しかし、JavaScript メソッドを経由HostScript
して呼び出した前のケースでは、オブジェクトが返され、 forHostScript
でラップされていSystem.Windows.Interop.DynamicScriptObject
ました。
このDynamicScriptObject
クラスは、WPF の XBAP スクリプトの相互運用性に固有のものです。通常の DLR タイプの一部ではなく、 で定義されていPresentationFramework.dll
ます。私が知る限り、それが行う仕事の 1 つは、C# のdynamic
キーワードを使用して、完全な信頼を必要とせずに JavaScript プロパティにアクセスできるようにすることです。カバーします。
私が知る限り、問題は、他のインスタンス ( など)DynamicScriptObject
から返されるオブジェクトに対してのみこれらのラッパーを取得することです。コールバックでは、そのラッピングは発生しないようです。私のコールバックでは、単純な古い COM 相互運用シナリオで C# が通常提供する一種の動的ラッパーを取得しています。この時点で、完全な信頼が要求されます。DynamicScriptObject
HostScript
完全な信頼で実行すると問題なく動作します。これは、上記のリストの「1 と 2」の組み合わせになります。しかし、私は完全に信頼したくありません。(1、2、3 が必要です。) また、コールバックの状況以外では、JavaScript オブジェクト メンバーに問題なくアクセスできます。ほとんどの場合、JavaScript オブジェクトに問題なくアクセスできることには一貫性がないように思えますが、コールバックで同一のオブジェクトにアクセスすることは禁止されています。
これを回避する方法はありますか?それとも、コールバックで何か面白いことをしたい場合、コードを完全に信頼して実行する運命にあるのでしょうか?
c# - 部分信頼: ジェネリック型引数なしでジェネリック型をインスタンス化する方法
Silverlight 用の再利用可能なライブラリを作成しています。System.Type
ライブラリには内部ジェネリック型が含まれており、このジェネリック型の新しいインスタンスを作成する必要がありますが、ある時点でジェネリック型引数を使用できず、ジェネリック引数を表すオブジェクトしかありません。リフレクションを使用してインスタンスを作成しようとしましたが、このクラスは内部クラスであり、Silverlight は実質的に部分信頼で実行されるため、これは失敗します。
これが私がこれまでに試したことです:
これは私の内部タイプです。派手なものはありません:
Nullable<T>
内部型を生成できるファクトリを作成するために、構造体をファクトリとして悪用することさえ試みました。ただし、デフォルトでNullable<T>
は null 参照に変換されます。
ご想像のとおり、API を汚染するため、この型を公開したくありません。私は現在アイデアがありません。私のオプションは何ですか?この内部型を作成するにはどうすればよいですか?
c# - アセンブリによってページごとに ASP.NET のさまざまな信頼レベル?
2 つの Web アプリケーション (事前にコンパイルされたサイト) があり、1 つはファースト パーティであり、完全な信頼で実行されます。もう 1 つはサード パーティであり、部分的な信頼 (または特定のアクセス許可) で実行する必要があります。
TrustedAssembly.Web.Pages.MyPage
完全信頼の既定の AppDomain で実行する必要があります。
UntrustedAssembly.Web.Pages.SomePage
部分信頼 AppDomain で実行する必要があります。
さらに、TrustedAssembly.Web.Pages.MyPage
動的に読み込まUntrustedAssembly.Web.Controls.SomeControl
れる場合、ページが完全信頼の下で実行されている間に、部分信頼および/または特定のアクセス許可でコントロールを実行することは可能ですか?
逆に、たとえばUntrustedAssembly.Web.Controls.SomePage
動的にロードする場合TrustedAssembly.Web.Controls.MyControl
、ページが部分信頼で実行されているときに、コントロールを完全信頼で実行することは可能ですか?
更新/参考: これは .NET 4 です
iis - Asp .Net 4.0 での部分/完全信頼モードの検証
Msdn のフォーラムで同様の質問を見つけましたが、回答がありません (ここで確認できます)。Net 4.0 には廃止されたメソッドが付属していました
代わりにAppDomain.CurrentDomain.PermissionSetを使用することをお勧めします
ただし、PermissionSetには完全信頼モードも必要です。
当然の質問です。Asp .Net 4.0 で、アプリケーションがフルまたはミディアム トラスト モードであるかどうかを確認するにはどうすればよいでしょうか。
appfabric - WindowsServerAppFabricキャッシング
私は現在、部分的な信頼で実行する必要があるASP.NETMVCサイトで作業しています。現在、高信頼状態のときにAppFabricに接続する際に問題が発生しています。完全に信頼して実行する場合は問題ありません。web_hightrust.configファイルに必要な権限は何ですか。
失敗するメソッドは次のようになります。
ご覧のとおり、接続を確立するのに十分だと思うものでメソッドに注釈を付けましたが、失敗します。
どんなアイデアでもありがたいです。
asp.net - DLL を展開するだけで中程度の信頼環境で SQL Server CE を使用できますか
SQL Server CE 4.0 データベースを使用する ASP.NET 4.0 アプリケーションを作成しました。これはすべて、中程度の信頼 (ホストと同じ信頼構成) を使用して私の開発環境で動作しています。このマシンで、インストール プロセスを完了しました (MSI をダウンロードしてインストールしました)。現在、このソリューションを Web ホスティング会社にデプロイしようとしています。
実行中のコードは次のとおりです (これは、Altairis メンバーシップ プロバイダーのそのままのコピーです。
上記の例では、db
is DbConnection
、およびcmd
isDbCommand
次のエラーが表示されます。
[InvalidOperationException: セキュリティ透過メソッドで CAS アサートを実行できません] System.Security.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken, CodeAccessPermission demand, StackCrawlMark& stackMark, Int32 create) +0
System.Security.CodeAccessSecurityEngine.Assert(CodeAccessPermission cap, StackCrawlMark& stackMark) +61
System.Security.CodeAccessPermission.Assert() +28
System.Data.SqlServerCe.KillBitHelper.GetKillBit() +231
System.Data.SqlServerCe.KillBitHelper..cctor() +56[TypeInitializationException: 'System.Data.SqlServerCe.KillBitHelper' の型初期化子が例外をスローしました。]
System.Data.SqlServerCe.KillBitHelper.ThrowIfKillBitIsSet() +0
System.Data.SqlServerCe.SqlCeProviderFactory..cctor() +41[TypeInitializationException: 'System.Data.SqlServerCe.SqlCeProviderFactory' の型初期化子が例外をスローしました。]
[TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。]
System.RuntimeFieldHandle.GetValue(RtFieldInfo field, Object instance, RuntimeType fieldType, RuntimeType declaringType, Boolean& domainInitialized) +0
System.Reflection.RtFieldInfo.InternalGetValue(Object obj, Boolean doVisibilityCheck、Boolean doCheckConsistency) +180
System.Reflection.RtFieldInfo.GetValue(Object obj) +8
System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow) +232
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +88
DatabaseExtensionMethods.cs:19 の Altairis.Web.Security.DatabaseExtensionMethods.CreateDbConnection(ConnectionStringSettings 設定)
Altairis.Web.Security.TableMembershipProvider.ValidateUser(String username, String password) in TableMembershipProvider.cs:361
逆コンパイラを使用してコードを調べたところ、SQL Server CE の内部がレジストリ エントリを探してからコードを実行しようとしているようですAssert()
。
DLL を展開するだけで、SQL Server CE 4.0 を部分信頼環境で使用でき\bin
ますか??
.net - 部分信頼の AppDomain でイベントをサブスクライブできないのはなぜですか?
デフォルト (完全信頼) の AppDomain で、サンドボックス AppDomain を作成し、その中のイベントをサブスクライブしたいと考えています。
サブスクリプションが失敗し、「タイプ 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=4.0.0.0...' のアクセス許可の要求が失敗しました」というメッセージが表示されます。
(AppDomainStarter の定義については、別の質問に対する私の回答を参照してください。)
ApplicationBase
C:\Tempは、ドメインを含むアセンブリを含むフォルダーではないことに注意してください。これは意図的なものです。私の目標は、新しい AppDomain 内に 2 番目のサードパーティの信頼されていないアセンブリを読み込むことです。この 2 番目のアセンブリは C:\Temp (または他の場所、場合によってはネットワーク共有) にあります。Domain
ただし、2 番目のアセンブリを読み込む前に、新しい AppDomain 内にクラスを読み込む必要があります。これは成功しますが、何らかの理由で AppDomain 境界を越えてイベントをサブスクライブできません (メソッドを呼び出すことはできますが、イベントをサブスクライブすることはできません)。
UPDATE : 明らかに、サンドボックス AppDomain でイベントをサブスクライブする場合、サブスクライバー メソッドとサブスクライバーを含むクラスの両方がパブリックである必要があります。例えば:
しかし、私はまだイベントにサブスクライブできません。新しいエラーは、「ファイルまたはアセンブリ 'TestApp、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。指定されたファイルが見つかりません」です。
新しい AppDomain の ApplicationBase として「間違った」フォルダ「C:\Temp」を指定したため、これはある意味では理にかなっていますが、「TestApp」アセンブリが両方の AppDomain に既に読み込まれているため、ある意味でこれはまったく意味がありません。 . CLR が既に読み込まれているアセンブリを見つけられない可能性はありますか?
さらに、アセンブリを含むフォルダーへのアクセス許可を追加しても違いはありません。
に別の値を使用して問題を「修正」できますAppDomainSetup.ApplicationBase
。
これにより例外は排除されますが、AppDomain の目的は、独自のアセンブリを含むフォルダーとは別のフォルダーから信頼されていないアセンブリを読み込むことであるため、この "解決策" を使用できません。したがって、loc
自分のアセンブリを含むフォルダーではなく、信頼されていないアセンブリを含むフォルダーである必要があります。
wpf - XBAP-特定のメソッドに対してのみ完全な信頼を付与できますか?
イントラネットアプリケーションにXBAPを使用することを検討していますが、アプリケーション全体を完全信頼に設定することは避けたいと思います。
基本的に、完全な信頼が必要なメソッド呼び出しがいくつかありますが(DriveInfo.GetDrivesなど)、99の完全な信頼は必要ないため、アプリの残りの部分を部分的な信頼で実行したいと思います。アプリの%。
特定のメソッド呼び出しを完全に信頼する方法や、完全な信頼の許可が必要な部分を別のアセンブリに分割して、アプリの大部分を部分的な信頼に保つ方法はありますか?
ありがとう!