2008-11-28 70 views
0

使用微軟的AntiXssLibrary,你如何處理稍後需要編輯的輸入?如何處理需要編輯的編碼輸入?

例如:

用戶輸入: <i>title</i>

保存到數據庫爲: <i>title</i>

在編輯頁面,在文本框中會顯示類似: &lt;i&gt;title&lt;/i&gt;因爲我在顯示在文本框中之前對它進行了編碼。

用戶不喜歡那樣。

寫入輸入控件時可以不編碼嗎?

更新:

我還在試圖弄清楚這一點。下面的答案似乎是說在顯示之前解碼字符串,但不會允許XSS攻擊?

一個用戶說,解碼輸入字段值中的字符串是好的是downvoted。

回答

2

看起來你不止一次對它進行編碼。在ASP.NET,使用微軟的AntiXss庫可以使用HtmlAttributeEncode方法來編碼不可信的輸入:

<input type="text" value="<%= AntiXss.HtmlAttributeEncode("<i>title</i>") %>" />

這導致

<input type="text" value="&#60;i&#62;title&#60;&#47;i&#62;" />
在渲染頁面的標記,並正確地顯示在輸入框中 <i>title</i>

+0

啊,這就是答案! – dtc 2009-05-15 18:51:37

-4

是的,輸入框內的代碼對於腳本攻擊是安全的,不需要編碼。

0

您可以調用HTTPUtility.HTMLDecode(MyString)將文本返回到未編碼的表單。

+0

我面臨的問題之一是我使用AntiXssLibrary,它似乎沒有HtmlDecode方法。但我可能是錯的。 – dtc 2008-11-28 20:12:02

1

你的問題似乎是雙重編碼; HTML需要被轉義一次(所以它可以插入到頁面上的HTML中而沒有問題),但是兩次導致編碼版本從字面上出現。

+0

當您將其插入輸入字段以便用戶可以對其進行編輯時,該怎麼辦?它應該被編碼嗎? – dtc 2008-11-28 17:12:13

0

如果您允許用戶輸入將在網站上呈現的HTML,則需要做的不僅僅是對其進行編碼和解碼。

使用AntiXss可以通過將腳本和標記轉換爲文本來防止攻擊。它不會對直接呈現的「清理」標記做任何事情。您將不得不手動刪除用戶輸入中的腳本標籤等,以便在該場景中得到充分保護。

您需要刪除腳本標記以及法律元素上的JavaScript屬性。例如,攻擊者可能會將惡意代碼注入onclick或onmouseover屬性。

+0

這是真的嗎?由於html.encode沒有處理它,我的印象是AntiXSS庫是爲這種情況而製作的。微軟顧問甚至還介紹了關於AntiXSS如何處理這個問題,而html.encode沒有。重點是我們應該使用AntiXSS。我想我需要測試一下。 – dtc 2009-07-14 20:30:38