2011-05-24 8 views
14

私は認証されたマシンからXML(これは他のソフトウェアと統合しているネットワーク管理システム用)用の入力を受け取り、いくつかのXMLデータを引数としてシェルスクリプトを実行するWebサービスを持っています。シェルコマンドをエスケープするjavaでは?

Java(/ Linux)では、シェルコマンドをエスケープして誰かが悪意のある引数をWebサービスに渡すことができないようにするにはどうすればよいでしょうか?

は基本的に非常に簡略化した例では、ImがWS

介して
<foo> 
<bar>ABCDEF</bar> 
</foo> 

then running somescript.pl <<data in <bar> field>> here 

をいくつかの入力を取って私はこのなど、任意のシェルコマンドを実行するために使用することができないようにする必要があります。

ありがとうございます!

+0

どのシェル?異なるシェルには、異なるエスケープ規則があります。 –

+1

質問は、LinuxでJavaを述べています。 –

+1

@Gweebz、 "どのシェル?"という質問には答えません。 Linuxにはさまざまなシェルがあります。 – Kaj

答えて

12

私はProcessBuilderをまたはシェルていない実行を行いますRuntime.execの方法のいずれかを使用してを示唆しているので、は(ここでは)インジェクション攻撃を避けるためにをエスケープシェルを必要としません。

  • ProcessBuilder - Runtime.execより柔軟です。

  • Runtime.exec(String[])は - Perlは自明STDINからの読み込み処理することができます - それはまた、有益なXMLデータを転送するプロセスのSTDINパイプを使用して検討することだけString

を取る形とは異なります。コマンドライン引数には一般的に限界があります。

ハッピーコーディング。供給

+1

本当に賢明な答えです。あなたがこれまでになかったのであれば、私は同じ言葉を言葉で書いたでしょう。 +1 – gd1

+0

プロンプトの有益な答えをありがとう! – Yablargo

0

ProcessBuilderを使用できない場合は、Apache commons-text escapeXSIと考えることができます。

(XSIはX/Open System Interfaces Extension、Single UNIX Specificationの補足仕様なので、多かれ少なかれUNIXのようにしようとするものはこれに準拠しています)。

関連する問題