作爲SQL注入的預防,我們使用參數化查詢或存儲過程。編碼並不適合這一點。如果您期望用戶將內容添加到您的網站並且您想阻止他們注入惡意JavaScript,則Html編碼很不錯。通過對字符串進行編碼,瀏覽器將打印出內容。你在做什麼是你編碼字符串,將它添加到數據庫,但是然後你嘗試將它解碼回到原始狀態並顯示給客戶端。這種方式,你很容易受到各種javascript注入..
如果這就是你的意圖,沒有問題,只是意識到後果。每次做出這樣的決定時都要知道「爲什麼」和「如何」。這有點危險。例如,如果您想讓用戶添加html標籤作爲增強插入內容的手段,則更安全的替代方法是創建您自己的一組標籤(或使用現有的標籤(如BBCode) ),所以輸入從不包含任何html標記,並且當您將其插入數據庫時,只需首先解析它即可切換到真正的html標記。 Asp.net引擎永遠不會允許在請求期間發生惡意輸入(除非您自願強制這樣做),並且由於您已經控制瞭解析輸入,所以輸出時確保它是安全的,因此不需要額外的處理。
只是一個想法爲你:)
如果你真的堅持做你的方式(編碼 - >數據庫 - >解碼 - >輸出),我們有一些選項如何做到這一點。我會舉一個例子:
例如,您可以創建一個新的只讀屬性,它將返回您的解碼數據。 (如果需要,您仍然會保留原始編碼數據)。事情是這樣的:
public string DecodedData
{
get
{
return HttpUtility.UrlDecode(originalData);
}
}
http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx
如果你想編碼的HTML的輸入,也許你會用不同的編碼機制更好。不確定javascripts encodeURIComponent
是否可以正確解析出html。
小心分享你的決定背後的邏輯?編碼這樣的字符串有什麼意義?你爲自己添加了一些不必要的工作......編碼是好的,但你應該知道爲什麼和什麼時候這樣做。在你的情況下,它是完全沒用的... – walther
我決定編碼,以允許用戶在其輸入中添加特殊字符。但在我可以將其傳入數據庫之前,我需要對其進行編碼以防止代碼注入。你知道更好的方法嗎?請分享。 – Peter
作爲SQL注入的預防,我們使用'parametrized queries'或'stored procedures'。編碼並不適合這一點。如果您期望用戶將內容添加到您的網站並且您想阻止他們注入惡意JavaScript,則Html編碼很不錯。通過對字符串進行編碼,瀏覽器將打印出內容。你在做什麼是你編碼字符串,將它添加到數據庫,但是然後你嘗試將它解碼回到原始狀態並顯示給客戶端。這樣,你很容易受到各種javascript注入... – walther