2013-04-03 27 views
1

我使用JavaScript編碼了html文本屬性,並將它傳遞到我的數據庫中。 我的意思是像 「威爾士& PALS」 的字符串的JavaScript在asp.net中使用decodeURIComponent

encodeURIComponent(e.value); 

轉換爲 「威爾士%20PALS」

我想把它從asp.net轉換回 「威爾士& PALS」。任何想法如何嵌入

decodeURIComponent(datatablevalues) 

在我的asp.net函數中返回所需的文本?

+0

小心分享你的決定背後的邏輯?編碼這樣的字符串有什麼意義?你爲自己添加了一些不必要的工作......編碼是好的,但你應該知道爲什麼和什麼時候這樣做。在你的情況下,它是完全沒用的... – walther

+0

我決定編碼,以允許用戶在其輸入中添加特殊字符。但在我可以將其傳入數據庫之前,我需要對其進行編碼以防止代碼注入。你知道更好的方法嗎?請分享。 – Peter

+0

作爲SQL注入的預防,我們使用'parametrized queries'或'stored procedures'。編碼並不適合這一點。如果您期望用戶將內容添加到您的網站並且您想阻止他們注入惡意JavaScript,則Html編碼很不錯。通過對字符串進行編碼,瀏覽器將打印出內容。你在做什麼是你編碼字符串,將它添加到數據庫,但是然後你嘗試將它解碼回到原始狀態並顯示給客戶端。這樣,你很容易受到各種javascript注入... – walther

回答

4

作爲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。