2012-02-29 15 views
1

だから私にはセキュリティのジレンマがあります。シェルコマンドをWebサービスとして安全に実行する方法

私がやっていることは、「Theorem Proversのための何千もの問題」アプリケーションのためのWebベースの翻訳サービスを提供することです。私はPSOA RuleML言語で書かれた文書をとり、それをTPTP-FOFに翻訳します。

この翻訳を示すために、2つのRESTful Webサービスを提供したいと考えています。 1つはPSOA RuleMLを翻訳し、もう1つは推論を提供する(initial report)。

最初のサービスはJava/ANTLR3/RestEasyを使用し、2番目のサービスはJava/ApacheCommonsExecを使用して、最初のサービスから返された生成TPTP文字列を定理証明者に対してテストします。

Apache Commons Execはこれを行うのに十分なセキュリティを備えていますか?私は他の明らかな解決策があることを認識しています。サービスを構成して、TPTP FOF文のみがテストされるようにします。しかし、可能であれば、この定理証明自体をWebサービスとして公開したいと思っています。前もって感謝します!

+2

自分自身を含め、インターネット上の誰かからセキュリティ勧告を受けないでください。 – dasblinkenlight

+0

@dasblinkenlightありがとう、私はこれを念頭に置いておきます。しかし、私はまだ人々がここに貢献しなければならない解決策について興味があります。 –

+0

この質問を少し絞り込んでください。それはあまりにも広すぎて、それでは、Q&Aフォーマットにはうまくフィットしません。 –

答えて

3

私はApacheCommonsExecを使用しましたが、Webアプリケーションでは使用しませんでした。それは私のニーズに「十分に安全」でした。

最も安全なオプションは、WebからexecプロセスにString引数を直接渡さないことです。最終的な定数や列挙型を使用できる場合は、セキュリティが大幅に強化されます。

バーでは、渡されるコマンドリテラルを慎重にサニタイズしてエスケープする必要があります。正確なシステムがわからなければ(Windows/Linux/etc)、これはプラットフォームごとに変わります。私のアドバイスは、あなたのためにこれを行う図書館を探すことです。

最後に、Javaセキュリティーマネージャーをオンにして実行します。これはApacheCommonsExecを破る可能性がありますが、問題を解決できるはずです。

3

完全な回答ではなく、ある程度の考え方。ほとんどの場合、これはユーザー入力のあらゆる項目を検証することになります。私はあなたが実行したいいくつかの関数(ストアドプロシージャのようなもの)を識別する整数(簡単に検証することができ、境界をチェックするか、列挙型にマップする)のような単純な入力だけを受け入れることをお勧めします。考慮すべきもう一つの問題は、状況が悪くなったときにシェルスクリプトを停止または終了させる方法です(タイムアウトを考える)。また、ユーザーアカウントがシェルスクリプトを所有し、実行しているものについて考える必要があります。ほとんどの場合、ユーザー入力から地理情報を検証し、何も信頼しないでください。

2

ウェブアプリケーションコンテナ(Tomcat)がルートとして実行されていないことを確認してください。可能であれば、chroot環境で実行することもできます。

実行しているコマンドにテキストを渡す必要がある場合は、テキストをファイルに書き込んで、そのプログラムが引数として渡すのではなくファイルからテキストを読み取ろうとします。

セキュリティはすべてレイヤーに関するものです。何か「安全」なものを作ることはできませんが、十分な層を追加すれば十分に安全になります。

さらに特殊な入力については、security.stackexchange.comに質問してみてください。

関連する問題