2011-02-11 7 views
4

私はストライプフレームワークを使用してWebアプリケーションを実現しています。あらゆる種類の攻撃を回避するために、テキストはDBに消毒されて保存され、サニタイズプロセスにはHTMLエンティティのエンコーディングが含まれます。ストライプフレームワーク:フォームで文字列エスケープを無効にするにはどうすればいいですか?

ストライプでフォームを作成すると、私の問題が表示されます。フォームが空になると、すべてが正常です。しかし、ユーザーが以前に何かをこのフォームに入力していて、既存の値がDBからフェッチされ、アクションBeanに設定され、ストライプ・フォーム・タグによって表示されると、ストライプは再びそれをエスケープします。これにより、私の文字列が二重にエスケープされます。

とにかく私は自分がやっていることを知っていると私はあなたに与えている文字列がすでに逃げられていることを伝えることができますか?

+0

DBに非文字列を格納するのはいいえですか? : – yihtserns

答えて

2

問題のあるフィールドにはストライプを使用しないことをお勧めします。あなたのJSPで使用すると、たとえば、交換する場合:

<stripes:textarea name="userEntryComment"/> 

Thenexceptストライプ

<textarea name="userEntryComment">${actionBean.userEntryComment}</textarea> 

を有する第2バージョンのHTMLを生成するために、すべてでは呼び出されません。この場合、<c:out >タグを使用しないため、文字列は再エスケープされません。

0

HTMLエンティティのエンコードおよびエンコードはStripesによって処理されるため、エンコードされたHTMLエンティティをデータベースに格納する必要はありません。サニタイズプロセスからHTMLエンティティのエンコーディングを削除するだけで、Stripesはデータを安全に処理します。

作成する別のポイントがあります:モデルデータ(MVC model!)をHTMLのようなプレゼンテーション形式で保存することは悪い習慣と考えることができます。もちろんHTMLエンティティはHTML形式のデータでもあります。検索やテキストメールの送信など、あらゆる種類の他の処理を実行する際に、データの使用を制限または妨げます。

+0

エンコードされたHTMLの格納に関するコメントは正しいですが、エンコードされたHTMLをDBに格納することは、HTML/jsインジェクションとXSSに対する完全な保護を保証する最良の方法です。 とにかく、私の質問には答えません。 – LordOfThePigs

+0

許可されている文字を制限することはさらに安全です。これは興味深いことかもしれません:http://code.google.com/p/stripes-xss/ – Kdeveloper