問題タブ [code-access-security]
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.
asp.net - SharePoint 2007 リモート ファイル アクセス拒否 CAS
リモート サーバー上のファイルにアクセスする SharePoint 2007 内の PageLayout 内の ascx でコードを実行しています。つまり、File.Create("\servername\sharename\folder\file.txt")。このコードは、web.config で CAS 信頼が Full に設定されている SharePoint Web アプリケーション内で実行されます。File.Create は次の例外をスローします:-
System.UnauthorizedAccessException
パス '\\servername\sharename\folder\file.txt' へのアクセスが拒否されました。
共有はフル コントロールを持つ全員に共有され、NTFS アクセス許可はフル コントロールを持つ全員に設定されます。Web アプリケーション アプリケーション プールは、そのリソースにアクセスするための明示的なアクセス許可を持つドメイン アカウントで実行されています (これは必要ではありません)。
リモート マシンで Process Monitor を実行しましたが、サーバーにヒットが記録されませんでした。これは、SharePoint コード アクセス セキュリティの設定に問題があると思われます。上で述べたように、web.config の信頼は Full に設定されています。
CAS がまだリモート アクセスをブロックしている可能性はありますか? レビューする他の領域を考えられる人はいますか?
アップデート
もう少し情報...
アプリ プール アカウント ドメイン管理者を作成しようとしましたが、問題は引き続き発生します。同じ方法を使用してローカル マシン上のドライブにアクセスすると、問題なく動作します。アプリ プール アカウントを使用して、sharepoint の外で SnippetCompiler で同じコードを実行すると、正常に動作します。
これがお役に立てば幸いです。私が試すことができる調査やテストの方法が他に思いつくかどうか教えてください。
アップデート
これが問題に影響するかどうかはわかりませんが、ローカル サーバーは Windows Server 2003 を実行しており、リモート サーバーは Windows 2000 を実行しています。
アップデート
Web パーツを介してコードを実行しようとしましたが、正常に動作します。失敗しているプロジェクトで使用するファイル構造は次のとおりです。
次に、IIS には次の構造があります。
次に、PageLayouts 内で、次を使用してコントロールを参照します。
アップデート
謎が深まる…
SharePoint Web フロント エンド サーバー上の Internet Explorer (6 または 7) から sharepoint サイトにアクセスすると、例外が発生しません。
SP Web フロント エンド サーバーから Mozilla Firefox の sharepoint サイトにアクセスすると、例外が発生します。
どのブラウザからでも SharePoint サイトにリモートでアクセスすると、例外が発生します。
また、sharepoint サイトへのアクセス許可を持っている限り、サイトへのログオンに使用するユーザーに違いはありません。
何かご意見は?
アップデート
うーん、リモートで共有ポイント サイトにアクセスし、共有ポイント サイトがローカルで File.Create() を実行しようとすると (つまり、File.Create("C:\temp\abc.txt"))、動作することがわかりました。 . 共有ポイント ボックスから共有ポイント サイトにアクセスし、リモートで File.Create() を実行すると (つまり、File.Create("\ServerName\ShareName\FolderName\file.txt"))、機能します。
SharePoint サイトにリモートでアクセスし、SharePoint サイトに File.Create() をリモートで実行させようとした場合にのみ失敗します。ダブルホップ問題の一種。これは、NTLM / Kerberos の問題であると思われます。
現在、NTLM 認証を使用して実行しています。
他の誰かがこの種の問題を経験しましたか?
アップデート
ええ、これは NTLM の問題であり、ダブル ホップが許可されていないことは確かです。sharepoint サイトの認証を基本認証を使用するように変更したところ、機能しました。統合認証に戻しましたが、失敗しました。
ここで、ファームを移動して Kerberos を使用するか、問題を回避する別の方法を見つけるかを決定します。:-/
アップデート
SPSecurity.RunWithElevatedPrivileges を試してみてください。ただし、RunWithElevatedPrivileges はこのコンテキストで使用されることを意図しているのでしょうか。以前は、ネットワークにアクセスするファイルにアクセスするのではなく、SharePoint 内のリストやライブラリにアクセスするためにのみ使用していました。
何かご意見は?
アップデート
はい、SPSecurity.RunWithElevatedPrivileges は問題を解決します。:-)
security - ソリューションフレームワークを使用したSharepointでのCASポリシーの展開
SharePointソリューションメカニズムを使用してWebパーツを展開しています。今まではすべて正常に機能しましたが、manifest.xmlファイルにCASポリシーを追加すると、展開が正常に機能しません。CASポリシーを使用してソリューションを展開する場合、エラーは発生しませんが、ポリシーファイルは作成されず、dllはコピーされず、SafeControlsエントリはweb.configに追加されません。私のmanifest.xmlファイルは次のようになります:
その前に誰かがそのような問題を抱えていましたか?この時点でアイデアが足りなくなったので、提案を受け付けています。
.net - コード アクセス セキュリティに関するいくつかの質問
Amazon で 70-536 試験の準備用の本を購入しました。私は少し混乱しているいくつかの情報を見つけました。引用させてください-質問をインラインに配置します。
セキュリティ ポリシーがどのように使用されるかを理解するために、インターネットからダウンロードしたアセンブリを操作したいアプリケーション開発者について考えてみましょう。開発者はアセンブリを自分のローカル コンピューターにダウンロードしたので (?) 、マイ コンピューター ゾーン内で実行されます。
そうですか?コード グループのメンバーシップ (マイ コンピューター ゾーン) は、アセンブリにハードコーディングされた証拠に依存していると思います。この場合に必要な Zone: MyComputer 証拠をアセンブリが使用していることをどのように知ることができますか?
開発者のコンピューターは AD DS ドメインのメンバーであり、ドメイン管理者は、ローカル コンピューター上のアセンブリにすべてのアクセス許可セットを付与するエンタープライズ セキュリティ ポリシーでコード グループを作成しました。これは、コンピューター セキュリティ ポリシーがマイ コンピューター ゾーンのアセンブリに付与する FullTrust アクセス許可セットよりも制限が厳しいため、すべてのアクセス許可セットが優先されます。
ただし、開発者は、アセンブリを安全に実行できるかどうか確信が持てないため、インターネット アクセス許可セットを適用して、アセンブリがディスクに書き込んだり、ネットワーク経由で通信したりできないようにしたいと考えています。彼女は自分のコンピューターに管理者としてログオンしていませんが、.NET Framework 2.0 構成ツールを起動してユーザー セキュリティ ポリシーを変更することはできます。(標準ユーザーは、マシン セキュリティ ポリシーを変更することはできません。)ユーザー セキュリティ ポリシーを変更することにより、彼女はマイ コンピュータ ゾーン内のアセンブリをインターネット アクセス許可セットに制限できます。 彼女が実行するアセンブリは、同じコンピューターの他のユーザーに影響を与えることなく制限されます。
ユーザー ポリシー レベル ( All__Codeを親として) にネストされたコード グループ ' test ' を作成し、そのメンバーシップ条件を Zone: MyComputer に割り当てるとします。All__Codeのアクセス許可セットもFull TrustからNothingに変更する必要があるということですか?
敬具 PK
.net - 組み立ての証拠
次のコードの目的は何ですか?:
私の知る限り、CLRは自動的に(Windowsに要求します)、アセンブリがどこから実行されているか(ローカルマシン、インターネットなど...)に応じてゾーンを割り当てます。アセンブリのアクセス許可を減らすことを意図していたと推測していますが、2 つの証拠がある場合、特定のポリシー レベル内で合計される 2 つのコード グループもあります。
よろしくお願いしますPK
.net - 宣言的なセキュリティ要求 - SecurityAction.Demand はキャッシュされていますか?
ユーザーになりすます際に問題が発生しています。次のように宣言されたメソッドがあります。
呼び出しコードは次のとおりです。
デフォルト ユーザーは LocalTestGroup のメンバーではありません。トークンで示されるユーザーは、LocalTestGroup のメンバーです。
問題:
LocalTestGroupOnly() の最初の呼び出しは成功します。これは、トークンによって示されるユーザーが LocalTestGroup のメンバーであるためです。LocalTestGroupOnly() への 2 回目の呼び出し (デフォルト ユーザーとして) は失敗するはずです。これは、デフォルト ユーザーが「Test」ではなく、LocalTestGroup に属していないためです。問題は、この方法も成功することです。
プログラムを個別に実行すると、偽装の有無にかかわらず動作が正しくなります。「テスト」として偽装すると成功し、デフォルトユーザーとして呼び出すと失敗します。
ここの問題は何ですか?
.net - このコード アクセス セキュリティの例が壊れているのはなぜですか?
CASの価値が限られていることはわかっていますが、とにかく学びたいと思っています。
表示されている動作がわかりません。基本的なデフォルトの CAS は、かなり通常の環境ではまったく機能していないようです。
このサンプルクラスを見てください:
CASNotWorkingExample.exe
これをビルドし、「信頼されていない」ファイル共有の別のマシン (IP は 192.168.1.101) にexe を配置します。\\192.168.1.101\untrusted\CASNotWorkingExample.exe
次に、「拒否」が返されることを期待して、を使用して非管理コマンドプロンプトから実行します。そうではありません。「許可」を返します。
Windows は、セキュリティが疑わしいリモート EXE を扱っていることを認識しています。スタート メニューの [ファイル名を指定して実行...] ダイアログから同じコマンドを実行すると、通常のセキュリティ警告「発行元を確認できませんでした。よろしいですか、など」が表示されます。そのため、exe がローカル マシンで実行されていると誤って考え、ゾーンの割り当てを誤っているわけではありません。
さらに、.NET 2.0 構成ツール ([Runtime Security Policy] を右クリックし、[Evaluate Assembly...] を選択) を使用してまったく同じ exe を見ると、.NET が Internet_Zone 権限のみをアセンブリに割り当てていることがわかります。 . これらのアクセス許可には、FileIOPermission は含まれません (Isolated Storage は独自のアクセス許可です)。
代替テキスト http://img5.imageshack.us/img5/2256/casperms.jpg
他の人には役立つかもしれないが、これまでのところ私にはなかったデータ:
- MCTS 70-536 試験についてMS Pressの本を読んでいるときに、この問題に遭遇しました。第 11 章はすべて CAS に関するものです。レッスン 1 / 例 1 は、上で説明したように、私には失敗します。ここに表示されているのは、その簡略化された変形です。
- このような EXE が実際にディスクに書き込めることを確認しました。つまり、IsGranted チェックはおそらく正しいでしょう。
- 2 台のマシンは、Vista SP1 と WinXP を実行しています。どちらがクライアントでどちらがファイルサーバーであるかに関係なく、動作は同じであるため、Vista のものではありません。
- 標準の非特権ユーザーとして実行する場合と管理者として実行する場合の動作は同じです。
- AD ドメインで実行されていません。
- クライアントとファイルサーバーで同じユーザー名とパスワードを使用
net use
するため、資格情報を提供するために使用する必要なくファイルにアクセスできます。
私はこれがそれらの「arrrgh」の瞬間の 1 つになると確信しています.何が欠けているのですか?
.net - .NETコードアクセスセキュリティ:便利ですか、それとも複雑すぎますか?
「コードアクセスセキュリティ」は実際に使用されていますか?も参照してください。
これについて他の意見を聞きたいです...
デスクトップアプリケーション用のコードアクセスセキュリティのアイデアが好きです。しかし、.NETの存続期間中、CASが実際に私の利益のために何かをブロックしたという状況が実際に発生したことは一度もないことを認めなければなりません。
ただし、マップされたドライブ間で高速の.NETアプリケーションを共有するだけの簡単なことが、エンタープライズコードアクセスの悪夢になることが何度もありました。信頼できるパスルールを作成するためにcaspol.exeを分割する必要があり、何かが失敗した理由を明確に知る方法がないため、CASはセキュリティで提供するよりも開発および展開プロセスにはるかにフラストレーションを加えるように見えます。
CASが実際に害を及ぼすだけでなく、現在の実装とデフォルトに不満を持っている人が他にいる場合の状況を聞きたいと思います。
.net - 部分信頼環境 (SecurityPermission) で Marshal.GetHRForException を呼び出す
try..catch 内でストリームを読み取る IO コードがいくつかあります。IOException をキャッチし、キャッチ内でSystem.Runtime.InteropServices.Marshal.GetHRForException()を呼び出し て、HResult に基づいてさまざまなアクションを実行しようとします。このようなもの:
アセンブリは署名され、AllowPartiallyTrustedCallersAttributeでマークされています。
しかし、ASP.NET 内で trust="medium" を指定してこのコードを実行すると、次の例外が発生します。
いくつかの質問:
- GetHRForException が中程度の信頼では許可されていないアンマネージ コードを呼び出すため、例外が発生していると思います。正しい?
- この例外は、GetHRForException の実行時ではなく、メソッドが JIT されているときにスローされます - 正しいですか? (スタックトレースは私の方法を示していますが、IO 例外が発生していないことは 99% 確信しています)
- その場合、許可されていない GetHRForException (アンマネージ コード) を呼び出さないように、部分信頼環境で動作を変更する方法はありますか? つまり、コードが GetHRForException() を呼び出す必要があるかどうかを実行時に評価しながら、コンパイル時に JIT を成功させるにはどうすればよいでしょうか? このようなもの:
アクセス許可が利用可能かどうかをテストするためのランタイム メカニズムがあると思いますが、それを見つけることができませんでした。
編集:このブログ記事は答えですか?Microsoft の ShawnFa は、LinkDemand によって保護されたメソッドの周りで try ... catch(SecurityException) を実行できないと述べています。MethodA() が MethodB() を呼び出し、MethodB() が完全信頼の LinkDemand でマークされている場合、LinkDemand は MethodA が Jit されているかどうかでチェックされます。したがって、SecurityException を回避するには、Marshal.GetHRForException を別のメソッドに抽出する必要があります。あれは正しいですか?
私のコードに適用すると、MethodA() は Read を呼び出すコードである可能性があり、キャッチで GetHRForException() を呼び出そうとします。GetHRForException は MethodB() です。LinkDemand は、MethodA() が JIT されたときに評価されます。(この LinkDemand は、信頼度が中程度の ASP.NET シナリオでは失敗します)。GetHRForException を新しいメソッド MethodC() に移動し、命令型の permission.Demand() が成功した後にのみ条件付きで MethodC() を呼び出すと、理論的には JIT 時に SecurityException を回避できるはずです。 permission.Demain() が成功した後にのみ JIT されます。
c# - このセキュリティ警告はどういう意味ですか (.Net Process クラス)?
VSTS 2008 + .Net 2.0 + C# を使用しています。そして、ビルド後にコード分析を実行しています。次の紛らわしいセキュリティ警告が表示されました。ここに警告と関連コードがありますが、何が間違っているのでしょうか? セキュリティ警告が表示された場合、それを修正するにはどうすればよいですか?
警告: CA2122: Microsoft.Security: 'TestHtml()' は、LinkDemand を持つ 'Process.Start()' を呼び出します。この呼び出しを行うことで、'Process.Start()' が間接的にユーザー コードに公開されます。セキュリティ保護を回避する方法を明らかにする可能性のある次のコール スタックを確認してください。
c# - SecurityAttribute.Unrestrictedの問題
ここで説明されているように、このプロパティについて混乱しています。http://msdn.microsoft.com/en-us/library/system.security.permissions.securityattribute.unrestricted.aspx完全または非完全にすることができます。
私の混乱は、単純な理解での許可のためです。許可されたステータスと許可されていないステータスの2つだけが存在する必要があります。完全なものと完全でないものはどういう意味ですか?