7

コードアクセスセキュリティに関するこの記事について読んだばかりです。その中にそのような例があります:

using System.Security.Permissions;
public class MyFileAccessor 
{
  public MyFileAccessor(String path, bool readOnly)
  {
    path = MakeFullPath(path); // helper fcn
    FileIOPermissionAccess desiredAccess = readOnly
      ? FileIOPermissionAccess.Read
      : FileIOPermissionAccess.AllAccess;
    FileIOPermission p = new FileIOPermission(desiredAccess, path);
    p.Demand();
    // 
    ••• 
    open the file
   }
   // •••
}

FileIOPermissionAccessタイプを使用せず、コードにp.Demand()のようなコードをまったく含めなかった場合はどうなりますか?言い換えれば、私が何か悪いことをしたいのなら、なぜ私はそれについて許可を求める必要があるのですか? 冗談じゃないですか?または私はそれを間違えましたか?

4

3 に答える 3

7

ええ、そうです、例はちょっとした冗談です、あなたは自分でこのようなものを書くことは決してないでしょう。欠落しているのは、本当に重要な部分である//ファイルを開くコードです。その現実的なバージョンは、たとえば、CreateFile()をピンボークします。

重要なのは、WindowsはCASについて何も知らないということです。したがって、このようなユーティリティ関数を提供し、CASルールを適用する場合は、呼び出し元のコードに必要な権限があることを確認する必要があります。もちろん、この種のコードは実際には.NETFrameworkにのみ属します。FileStream.Init()を見て、CreateFile呼び出しの前にFileIOPermissionが要求されていることに注意してください。

于 2010-10-18T16:56:58.543 に答える
4

ファイルアクセス(たとえば、を使用FileStream)は自動的にを要求しFileIOPermissionます。そして、これはすべての標準クラスに当てはまります。許可が必要なアクションを実行すると、自動的に要求されます。ここで.NETFrameworkのセキュリティを確認してください。したがって、サンプルコードは役に立たず、ファイルのアクセス許可を明示的に要求することはありません。APIを開発し、誰も変更できないようにコードが署名されている場合は合理的です。

さらに読んでください、ここにその記事からの引用があります:

現在、現実の世界では、ファイルにアクセスするためにMyFileAccessorのようなクラスを作成することはありません。代わりに、適切なセキュリティチェックを実行するようにすでに設計されているSystem.IO.FileStreamなどのシステム提供のクラスを使用します。これらはコンストラクターで行われることが多く、前​​に説明したパフォーマンスとセキュリティへの影響がすべて含まれています。

于 2010-10-18T16:24:03.823 に答える
3

java.io API内で、チェックが行われていることを確認できます。アクセスを制御する(クラッシュが発生する前にクラッシュをバイパスする)場合は、API呼び出しによって行われる内部チェックの前に適切なチェックを行う必要があります。

Javaコードは、多くの場合、管理しているコンピューターで実行されますが、管理していないコンピューターでも実行されることがよくあります。Javaアプレットについて考えてみてください。プログラムの作成者が他のすべてのファイルシステムへのチェックされていないアクセスを許可されるべきではないため、ファイルシステムへのアクセス許可を求める必要があります。

あるグループの人々が悪意のあることをするのを阻止する必要がある場合、セキュリティを現実のものにするために、全員が悪意のあることをするのを阻止する必要があります。それ以外の場合、不正行為者は、信頼できるチェックされていないグループの一部であると言うだけです。

Javaコマンドライン実行可能ファイルは、デフォルトで実行され、独自のファイルシステムにアクセスできるようにします。プログラムをローカルで起動した場合、とにかくアクセスできるファイルシステムの部分を台無しにした可能性があることを前提としています。アプレットは、これらのデフォルトの権限をすべて削除して起動します。このように、アプレットが存在するWebページを閲覧する人は、リモートプログラム(アプレット)がファイルシステムにアクセスするためのアクセス許可を手動で付与する必要があります。

これは、一部のユーザー(または特定の条件)のセキュリティをバイパスする特別なバックドアがないことの証拠です。

于 2010-10-18T16:24:32.047 に答える