3

ゲーム インフラストラクチャからではなく、プレイヤーからの特定のアクションをブロックしようとしています。そのために、セキュリティ マネージャーを使用しています。このように見えます

public class GameSecurityManager extends SecurityManager {
@Override
public void checkPackageAccess(String pkg) {
 super.checkPackageAccess(pkg);
 if (isPlayer()) {
  if (pkg.startsWith("ca.hilikus.jrobocom")) {
   if (!"ca.hilikus.jrobocom.player".equals(pkg) && !"ca.hilikus.jrobocom.robot.api".equals(pkg)) {
        throw new SecurityException("No access to game packages");
   }}}
}
}

セキュリティ マネージャに関するドキュメントは非常に少なく、そのほとんどは 90 年代のものです。AccessController の状況はさらに悪化しています。ただし、セクション6.2に記載されているこれを見つけました

アプリケーション コードで AccessController を使用することをお勧めしますが、セキュリティ マネージャーのカスタマイズ (サブクラス化による) は最後の手段であり、細心の注意を払って行う必要があります。

あなたはその声明に同意しますか?誰かがその理由を説明できますか? その場合、貼り付けたサンプル コードと同様のことをどのように達成できますか? リフレクション、スレッド化、コンテキストに基づいたオブジェクトのインスタンス化などをブロックしようとしています(isPlayer()上記のように)。Access Control の javadoc で説明されているのは、特別なコード ブロック内の特権操作だけですが、コントローラーを使用して実際にアクションをブロックする方法は示されていません。

4

3 に答える 3

1

独自の SecurityManager や独自の AccessController を記述する必要はありません。必要なのはカスタムPermissionです。作成した後は、SecurityManager を起動して、保護したいすべてのメソッドでセキュリティ チェックを行うだけです。多くのチェック伝播を回避するために、特権アクションを実行する必要がある場合があります。:)

于 2012-11-25T21:25:32.133 に答える
1

(将来のユーザーの利益のために)

これに対する答えは、アプリケーションにセキュリティ ポリシーを提供する必要があるということです。それを制御できない場合は、単に運が悪いだけです。

ポリシーでは、「ホストされた拡張機能」に適切なサブセットへのアクセスを許可し、「ゲーム パッケージ」には AllPermissions を許可します。次に、ライブラリのアクセス許可を作成し、「ホストされた拡張機能」への適切なアクセスを許可します。

次に、API で次のようにします。

public String someMethod( String someArg )
{
    if( System.getSecurityManager() == null )
        return internalSomeMethod( someArg );
    MyPermission required = new MyPermission( "whatever" );
    AccessController.checkPermission( required );
    return AccessController.doPrivileged(new PrivilegedAction<String>()
    {
        public String run()
        {
            return internalSomeMethod( somArg );
        }
    } );
}

private String someInternalMethod( String someArg ){...}

したがって、「ホストされた拡張機能」に「MyPermission」しかない場合でも、ゲーム エンジンは AllPermissions を持つことができ、必要なことは何でも実行できますが、「拡張機能」はシステム プロパティを読み取ることさえできません。

于 2013-11-14T05:33:46.807 に答える