你什麼時候打電話Microsoft.Security.Application.AntiXss.HtmlEncode
?您是在用戶提交信息時執行此操作還是在顯示信息時執行此操作?您是否在輸入或輸出過程中使用HtmlEncode?
對於名字,姓氏,城市,州,郵編等基本信息如何?
你什麼時候打電話Microsoft.Security.Application.AntiXss.HtmlEncode
?您是在用戶提交信息時執行此操作還是在顯示信息時執行此操作?您是否在輸入或輸出過程中使用HtmlEncode?
對於名字,姓氏,城市,州,郵編等基本信息如何?
您應該只在最後可能的時刻對數據進行編碼或轉義,無論是在將其放入數據庫之前,還是將其顯示在屏幕上。如果您編碼過快,則可能會出現意外重複編碼的風險(您經常會在新手的網站上看到&
- 包括我自己)。
如果您確實希望儘快編碼,請採取措施避免雙重編碼。 Joel寫了一篇關於匈牙利語符號良好用法的文章,他主張使用前綴來確定變量中存儲的內容。例如:「us」表示不安全的字符串,「ss」表示安全的字符串。
usFirstName = getUserInput('firstName')
ssFirstName = cleanString(usFirstName);
另外請注意,它並不重要的信息是什麼類型(城市,郵政編碼等) - 讓這些選中的是自找麻煩。
您在顯示信息時執行此操作。保留輸入的原始文本,將其轉換爲在網頁上顯示。假設您以其他方式顯示它,例如將其導出到Excel中。在這種情況下,您需要導出保存的原件。
對每一個字符串進行編碼。
這取決於你的情況。在我工作的地方,多年來該公司沒有進行HTML編碼,所以當我們開始這樣做時,幾乎不可能找到系統中的每個位置,用戶輸入可以顯示在頁面上。
相反,我們選擇在進入系統的時候消毒輸入,因爲輸入點比輸出點少。我們在將數據輸入到數據庫之前立即進行清理,儘管我們不使用微軟的AntiXss庫,但我們使用了一組自制方法,根據輸入類型將HTML標籤和字符的範圍列入白名單。
如果你從頭開始設計系統,或者你有一個系統,小(或管理不善)足夠的編碼輸出,遵循科裏的建議。這絕對是更好的方式。
編碼不是數據的屬性,它是傳輸機制的屬性。因此,您應該在收到數據時對其進行取消編碼,並在傳輸之前對其進行適當編碼。傳輸機制決定了什麼樣的編碼是必要的。
這一原則成立的傳輸機制是HTML,HTTP,狼煙等訣竅是知道如何做手工的編碼類型,當各種框架做的步驟爲你自動的。例如,ASP.NET將編碼分配給System.Web.UI.WebControls.Button的文本數據,而不是文本分配給System.Web.UI.WebControls.Literal的文本。 jQuery將使用.innerText()對您設置的內容進行編碼,但不會使用.innerHtml()設置的內容。
`us`代表不安全,`ss`代表`supersafe`? :d – LiraNuna 2009-11-24 00:47:47