-1

私はコードのスニペットを持っています:

public void MyMethod()
{
   DirectoryEntry de; 
   ...
   de.AuthenticationType = AuthenticationTypes.Secure;
   ...
}

そのFxCopは窒息します

CA2122:リンク要求のあるメソッドを間接的に公開しないでください

解決策:LinkDemandを持つMyMethod()呼び出し。 この呼び出しを行うことにより、は間接的にユーザーコードに公開されます。 DirectoryEntry.AuthenticationType.set(AuthenticationTypes)
DirectoryEntry.AuthenticationType.set(AuthenticationTypes)

情報:LinkDemandによって保護されているメソッドを、セキュリティチェックを実行しないメソッドでラップしないでください。LinkDemandは、呼び出しスタック内のすべての呼び出し元のアクセス許可をチェックするのではなく、直接の呼び出し元のアクセス許可をチェックします。この場合、ラッパーメソッドの権限がチェックされます。ラッパーメソッド自体が、コールスタックの上位にある呼び出し元のアクセス許可をチェックしない場合、悪意のあるコードが、アクセス許可がなくても、ラップされた関数を実行できる可能性があります。」

この問題を「修正」するために、どこかに何かを追加することにしました。ただし、現在顧客に対して機能しているコードが自発的に顧客に対して機能しなくなる場合は、追加できません。

注:を追加するのか、どこに追加するのか(FxCopにはその情報は含まれていません)、行き止まりの場合はコードセキュリティの秘密の世界を深く掘り下げたくありません。

に「セキュリティチェック*」を追加するとMyMethod、現在動作しているコードが動作しなくなる可能性はありますか?


私は、誰かが許可を持っていない場合今書かれているように、コードは機能しないと思います。言い換えると:

directoryEntry.AuthenticationType = AuthenticationTypes.Secure

誰かが正しい「許可」を持っていない場合、すでに失敗します。コールスタックの上位に「セキュリティチェック」を追加しても、その事実は変わりません。障害をより早くトリガーするだけです。その場合、セキュリティチェックを追加しても問題ありません。

一方、次の場合:

public void MyMethod() {...}

MyMethod();

現在は動作しますが

[SecurityCheck(...)]
public void MyMethod() {...}

AD.MyMethod()

失敗し始めます、そして私はそれを本当に追加することができません。

特に誰もが使用するライブラリコードでは。


私がこれを自分でテストできない理由は、問題が発生する状況を再現する方法を誰も知らないからです。

これは、ほとんどの人がユーザー名とパスワードを使用してADに接続し、プロパティを読み取ろうとして、ActiveDirectoryに対して資格情報を確認する場合と似ています。ユーザー名/パスワードが正しい場合でも、プロパティの読み取りが許可されない場合があります。その失敗のケースを再現するようにActiveDirectoryを構成することを私以外の誰も知らないことを賭けたいと思います。

私の場合、コードのセキュリティが失敗するように設定する方法を誰も知らないと思います。

4

1 に答える 1

0

誰かが許可を持っていないと、今書かれているコードは機能しないと思います

これは LinkDemand には当てはまりません。これは、直接の呼び出し元がターゲットのアクセス許可を所有することのみを必要とします。これが、FxCop が潜在的な問題を警告している理由です。悪意のある呼び出し元が、このメソッドを使用して DirectoryEntry メソッドを間接的に呼び出す可能性があります。

これに対する最適な修正方法は、使用している .NET Framework のバージョンなど、いくつかの要因によって異なります。初期の .NET バージョンでは、LinkDemand または無制限の DirectoryServicesPermission に対する完全要求をメソッドに追加します。FxCop が満足している場合、この特定の問題についてはほぼ完了です。ただし、一部の呼び出し元がメソッドを呼び出せなくなる可能性があります。これが問題である場合は、保護を解除する前に、DirectoryEntry の使用を評価し、悪意のある呼び出し元によって悪用される可能性があるかどうかを判断する必要があります。

最近の .NET バージョンでは、事態はさらに複雑になります。これについてサポートが必要な場合は、ターゲットにしている .NET のバージョンと、部分的に信頼された呼び出し元をサポートする必要があるかどうかを指定してください。

于 2011-11-28T15:56:00.260 に答える