問題タブ [securitymanager]
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.
java - Java Security Managerはパフォーマンスを低下させますか?
Java Security Managerを実装すると、パフォーマンスが低下しますか?
java - SecurityManager の下でオブジェクトを作成するときの NoClassDefFoundError
非常に制限の厳しい SecurityManager の下でユーザー提供のコンテンツを処理するコードを実行することで、アプリケーションを保護しようとしています。それは AccessController.doPrivileged() の頭をオンにしたものです。通常、これはコードのブロックに追加のアクセス許可を提供するために使用されますが、コードのブロックを非常に小さなサンドボックスに制限するために使用しています。
コンストラクターを呼び出す必要があるまでは、すべて問題ありません。次に、世界への読み取りアクセスが必要です。(または、少なくともクラスパス上のすべての .jar、.class、および .property ファイルに。) <> への読み取りアクセスを許可することはできません。それは私が避けようとしていることだからです。(たとえば、/etc/passwd を読み込もうとする XEE 攻撃。)とにかく、それだけでは十分ではないと思います。
一部のコンストラクターを SecurityManager ブロックの外に移動できますが、ツリーを通過するときにオブジェクトを作成する必要があるのは SAX パーサーであるため、避けられないものもあります。
アイデア?
java - Javaセキュリティ:URLClassLoaderを介してロードされたサンドボックスプラグイン
質問の概要:以下のコードを変更して、信頼できない動的にロードされたコードがセキュリティサンドボックスで実行され、アプリケーションの残りの部分が制限されないようにするにはどうすればよいですか?なぜURLClassLoaderはそれが言うようにそれを処理しないのですか?
編集:AniBに応答するように更新されました。
編集2:更新されたPluginSecurityManagerを追加しました。
私のアプリケーションにはプラグインメカニズムがあり、サードパーティが特定のインターフェイスを実装するクラスを含むJARを提供できます。URLClassLoaderを使用して、そのクラスをロードしてインスタンス化することができます。問題ありません。コードは信頼できない可能性があるため、誤動作を防ぐ必要があります。たとえば、プラグインコードを別のスレッドで実行して、無限ループに入ったり、時間がかかりすぎたりした場合にプラグインコードを強制終了できるようにします。しかし、ネットワーク接続を確立したり、ハードドライブ上のファイルにアクセスしたりできないように、セキュリティサンドボックスを設定しようとすると、私は前向きになります。私の努力は常にプラグインに影響を与えない(アプリケーションと同じ権限を持っている)か、アプリケーションを制限することになります。メインのアプリケーションコードで、必要なことをほぼすべて実行できるようにしたいのですが、
このテーマに関するドキュメントとオンラインリソースは複雑で、混乱を招き、矛盾しています。カスタムSecurityManagerを提供する必要があることをさまざまな場所(この質問など)で読みましたが、JVMがJARのクラスを遅延ロードするため、試してみると問題が発生します。したがって、問題なくインスタンス化できますが、同じJARから別のクラスをインスタンス化するロードされたオブジェクトのメソッドを呼び出すと、JARから読み取る権利が拒否されたために爆発します。
理論的には、SecurityManagerのFilePermissionをチェックして、独自のJARからロードしようとしているかどうかを確認できます。それは問題ありませんが、URLClassLoaderのドキュメントには、「ロードされるクラスには、デフォルトで、URLClassLoaderの作成時に指定されたURLにアクセスするためのアクセス許可のみが付与されます」と記載されています。では、なぜカスタムSecurityManagerが必要なのですか?URLClassLoaderはこれを処理するだけではいけませんか?なんでそうじゃないの?
問題を再現する簡単な例を次に示します。
メインアプリケーション(信頼できる)
PluginTest.java
Plugin.java
PluginSecurityManager.java
PluginThread.java
プラグインJAR(信頼できない)
MyPlugin.java
更新: プラグインコードが実行される直前に、プラグインセキュリティマネージャーに通知して、使用しているクラスソースを認識できるように変更しました。次に、そのクラスのソースパスの下にあるファイルへのファイルアクセスのみを許可します。これには、アプリケーションの開始時にセキュリティマネージャを一度設定するだけで、プラグインコードを入力および終了するときにセキュリティマネージャを更新できるという優れた利点もあります。
これで問題はほぼ解決しますが、他の質問には答えられません。URLClassLoaderが、言われているようにこれを処理しないのはなぜですか。誰かがその質問に対する答えを持っているかどうかを確認するために、この質問をしばらく開いたままにしておきます。もしそうなら、その人は受け入れられた答えを得るでしょう。それ以外の場合は、URLClassLoaderのドキュメントがあり、カスタムSecurityManagerを作成するための彼のアドバイスが正しいことを前提として、AniBに授与します。
PluginThreadは、クラスファイルへのパスであるPluginSecurityManagerのclassSourceプロパティを設定する必要があります。PluginSecurityManagerは次のようになります。
java - Java で複数の SecurityManager を使用する方法はありますか?
Java で複数のセキュリティ マネージャを使用する方法があるかどうかを知りたいのですが、ある場合は、特定の .policy ファイルを指定する方法を教えてください。
セキュリティに関するJava SE 6のドキュメントを見てきましたが、答えが見つかりませんでした...
みんな助けてくれてありがとう!
java - JavaSocketPermissionポリシーの質問
相互に通信しようとするクライアントプログラムとサーバープログラムがあります。サーバーのポリシーファイルで、次のように指定しました。
そして、私のクライアントのポリシーファイルには次のものがあります。
サーバーを起動すると、ポート2225でリッスンします。次に、クライアントを起動すると、ポート2225でリッスンしているサーバーに接続しようとします。残念ながら、サーバーで次のエラーが発生します。
ポート番号は変化し続けます。これはクライアントのポート番号(サーバーがクライアントに接続する場所)であると想定しています。あれは正しいですか?この割り当てでは、ポート番号に制限が指定されています。
クライアントとサーバーはJavaSecurityManagerを使用する必要があり、プロジェクトには、実行に必要な権限を定義するそれぞれのポリシーファイルが含まれている必要があります。サーバーとクライアントが、 2220〜2230の範囲のポートを使用してローカルホスト上で相互に接続できるようにします。
この制限をどのように順守できますか?または、これはサーバーがリッスンするポートにのみ適用されますか?accept
2231を超えるポートにパーミッションを付与すれば、それを機能させることができると思いresolve
ます。しかし、それが制限に違反しているかどうかはわかりません。
java - セキュリティ マネージャーを使用した Swing アプリにより、奇妙な GUI 更新の問題が発生する
クライアントである Swing アプリ (実行可能で署名された jar に常駐) があります。アプリはサーバーにも接続します。特定の条件が満たされると、GUI の更新を実行します (より具体的には、a のすべてのノードを削除してJTree
から再設定します)。このクライアントをそのまま (つまり、セキュリティ マネージャを使用せず、実行可能で署名付きの JAR に常駐させずに) 実行すると、ツリーは問題なく更新されます。
ただし、クライアントを署名付き JAR として (適切なポリシー ファイルと共に) パッケージすると、更新の問題が発生します。アプリを起動すると、JTree
展開されません。一度クリックすると展開したように見えますが、子ノードが表示されません。ノードを表示するには、その後 2 回クリックする必要があります。また、更新 (すべてのノードを削除してから再設定) を実行すると、UI が適切に更新されません。GUI を更新するには、ルート ノードを 2 回クリックする必要があります。
ポリシー ファイルに AWT パーミッションを追加しようとしましたが、効果がありませんでした (そもそもパーミッション違反は見られませんでしたが、試してみようと思いました)。JARにすべての権限を与えようとさえしました。それも役に立たなかったようです。何が原因でしょうか?
リフレッシュを実行するコードは次のとおりです。
ツリーを生成するコード (関連するスニペットのみを表示):
課題に関する限り、これはおそらく取り決めを破るものではありませんが、本当に気になります。何が原因なのかを突き止めたいと思います。
java - Javaサンドボックス。SecurityManagerを使用してI/Oアクセスをリダイレクトする
現在、信頼できないJavaコードを実行するためのサンドボックスを作成しようとしています。アイデアは、Javaアプリケーションをファイルシステムまたはネットワークソケットへのアクセスから分離することです。私が現在持っている解決策は、IOまたはネットワークへのアクセスを禁止するSecurityManagerを書き直したものです。
ここで、禁止するのではなく、ファイルシステムへの呼び出しをリダイレクトします。つまり、アプリケーションが「/home/user/application.txt」に書き込みたい場合は、ファイルへのパスを「/ temp /trusted_folder/」のように置き換える必要があります。 application.txt"。したがって、基本的には、アプリケーションが特定のフォルダー内のファイルシステムにのみアクセスできるようにし、他のすべての呼び出しをこのフォルダーにリダイレクトできるようにします。
したがって、これがクラスFileOutputStreamのメソッドであり、SMは、指定されたパスに書き込むためのアクセス許可があるかどうかを尋ねられます。
明らかに、SMはFileOutputStreamにアクセスできず、SecurityExceptionをスローすることを除いて、メソッドの内部変数(nameやfileなど)を変更したり、実行順序に何らかの影響を与えたりすることはできません。内部フィールドへのアクセスはオブジェクト指向の原則に違反していることを理解しています。ローカル変数は表示され、宣言されたメソッド内にのみ存在することを理解しています。
だから私の質問は:Security Managerがファイルシステムへの呼び出しを置き換えることを可能にする方法はありますか?そうでない場合、これを行うために使用できる他のアプローチはありますか?
私は十分に明確だったと思います。
securitymanager - SpringSecurity を使用した Java SecurityManager
Java Security Manager に参加して、SpringSecurity (SS) のプロジェクトに参加してみます。私には目標があります。私のプロジェクトは SS で動作し、認証マネージャーとして dataSource (db2 データベース) を持っています。プロジェクトに ScriptManager(ScriptEngine) を追加しました。今、信頼できないコードを拒否するプロジェクトのセキュリティを設定しようとしています。NetBeans を使用し、Tomcat (6.0.20) のプロパティで「セキュリティ マネージャーを使用する」をセットアップします。次に、{catalina.base}/conf/catalina.police を編集しました。次の「助成金」を追加しました:
そして今問題。デバッガーでコードを実行すると、次のエラーが発生します。
そしてトムキャットアウト:
また、この許可を挿入すると:
大丈夫。
OS: openSUSE 11.1 OpenJDK 1.6.0.0-b11
セットアップには、このチュートリアルを使用します: http://www.mikeski.net/site/node/18
皆さんありがとう...
java - Java SecurityManager:ポリシーファイルの優れた紹介
標準のJavaSecurityManagerの重要なポリシーファイルの良い紹介をお勧めしますか?
Java Webサイトが提供するものを超える例はありますか?あるいは、さまざまなWebアプリケーションを実行するTomcatを保護する方法を誰かが説明しているのでしょうか。
[編集]私のユースケースは、1。アプリケーション開発者、2。アプリケーション管理者、3。エンドユーザーの3種類のユーザーが作成したスクリプトを実行できるアプリケーションです。
グループ1のユーザーは、ほとんどすべてのリソースにアクセスできる必要があります(=特別なSMは必要ありません)。
グループ#2は信頼できますが、(呼び出しなどの)ばかげた間違いからグループを保護したいと思いSystem.exit
ます。
グループ#3は信頼できません。彼らは通常、小さなスクリプトを書くだけです。
スクリプトを実行すると、スクリプトがどこから来たのかがわかります。ポリシーファイルは私のユースケースに役立ちますか、それとも独自のSecurityManagerを作成する必要がありますか?
java - Java ポリシー ファイル - コードベースへのアクセス許可を拒否する
Java ポリシー ファイルでは、grant codeBase
どのコードベースにどのパーミッションを付与する必要があるかを構文で指定します。例えば、
grant codeBase "file:/C:/abc.jar" { パーミッション java.security.AllPermission; };
AllPermission
abc.jar 内のコードへの付与
deny
同様に、特定の構文に権限を付与する方法はありますか? このような:
deny codeBase "file:/C:/def.jar" { パーミッション java.io.FilePermission; };
内部のコードdef.jar
が FilePermission を除く他のすべてのアクセス許可を取得するようにするには?
これは可能ですか?
これはクラスを使用して簡単に実行できることはわかっていますがSecurityManager
、ポリシー ファイルのみを使用してこれが可能かどうかを知りたいだけです。