2011-02-11 22 views
4

我正在使用條紋框架來實現一個web應用程序。爲了避免各種攻擊,文本被存儲在數據庫中,並且清理過程包括HTML實體的編碼。條紋框架:我如何禁止字符串轉義形式

當我用條紋製作表格時,出現了我的問題。當表格開始空時,一切都很好。但是,當用戶以前輸入的內容是這種形式時,並且現有值從數據庫中提取,設置在動作bean中,然後由條紋形式標籤顯示,則條紋會再次轉義。這導致我的字符串雙重轉義。

無論如何,我可以告訴條紋,我知道我在做什麼,我給你的字符串已經逃脫了?

+0

因此,在數據庫中存儲unsanitized字符串是否是否定的? :( – yihtserns

回答

2

看來最好的解決方案就是不使用條紋的問題領域。如果在你的JSP替換,例如:

<stripes:textarea name="userEntryComment"/> 

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

Thenexcept條紋是不是在所有的調用來生成的第二個版本的HTML。也因爲在這種情況下,我們不使用< c:out >標記,該字符串不會被重新轉義。

0

HTML實體的編碼解碼由Stripes處理,因此實際上不需要將編碼的HTML實體存儲在數據庫中。只需從清理過程中刪除HTML實體的編碼,Stripes將安全地處理數據。

還有一點需要指出:將模型數據(MVC model!)存儲爲HTML等演示文稿格式可能被認爲是一種不好的做法。而HTML實體當然也是HTML格式的數據。他們會限制/阻礙您在執行各種其他事情時使用數據,例如搜索,發送文本電子郵件等。

+0

關於存儲編碼HTML的評論是正確的,但是將編碼後的HTML存儲在數據庫中是保證完美抵禦HTML/js注入和XSS的最佳方式。這種方式你永遠不需要記住要逃脫你的輸出。 無論如何,這並不能回答我的問題。 – LordOfThePigs

+0

限制允許的字符會更安全。無論如何,你可能會發現這也是有趣的:http://code.google.com/p/stripes-xss/ – Kdeveloper