2010-12-13 12 views
2

私はStrutsを使い慣れており、JSF 2.0を学び始めています。攻撃ベクトルを減らすためにStrutsで働いていたものを使い続けることができますか?あるいは、私がコード化する必要がある新しい攻撃ベクトルがありますか?JSFのセキュリティ上の懸念はありますか?

答えて

6

デフォルトでは、JSF/Faceletsは、すでに出力をエスケープして、UIOutputUIInputのコンポーネントに出力しています。したがって、ユーザーが制御する入力を<h:outputText><h:inputWhatever>で再表示する限り、XSSの部分は安全です。

JSFには、javax.faces.ViewState隠し入力フィールドによるCSRFに対する組み込み防止機能も組み込まれています。 JSF 2.1より前のバージョンでは、これは「あまりにも簡単」なので、JSF impl issue 812JSF spec issue 869も参照してください。これは最近(2010年10月3日)JSF 2.1で修正されました。

SQL injection攻撃に対する予防は、Web MVCフレームワークの責任ではないことに注意してください。その部分をデータレイヤーで解決する必要があります。 JPAを正しい方法で使用すると(SQL文字列のユーザー制御の入力を連結せず、パラメータ化されたクエリを使用する)、その部分も安全です。

+0

@BalusC + 1あなたのご意見をお聞かせください。私たちはUIOutputとUIInputを取り上げました。 – bakoyaro

+0

@BalusCフィルターについてはどうですか? 'javax.faces.webapp.FacesServletはjavax.servlet.Servlet'を実装しているので、私が書いたFaceletを通って来るものに対しては入出力フィルタを書くことができます。 – bakoyaro

+0

JSFは実際にServlet APIの上で動作します。実際にJSF Webアプリケーションでサーブレットフィルタを使用することはできますが、XSS/CSRF/SQLIなどのセキュリティ上の問題については、どのように役立つのかわかりません。彼らができることは、ログインしているユーザーに基づいて認証/権限チェックを行うことです。フィルタの入力/出力をサニタイズすることは、あなたが念頭に置いていたことであったとしても、悪い考えです。出力エスケープ(XSSを防止するため)は、ビュー側でのみ行う必要があります。入力エスケープ(SQLIを防止するため)は、データレイヤーでのみ行う必要があります。 – BalusC

関連する問題