2010-07-16 58 views
0

想知道我應該在將數據放入數據庫還是顯示給用戶之前對所有數據進行編碼?或兩者。Html輸入數據時的編碼?還是輸家或兩者?

現在我會向用戶展示它。我使用的是asp.net mvc 2.0,所以我通常只需要編寫一切<%: %>

我不確定兩者,雖然這可能是一個有點極端做到這一點。

此外,我真的只需要注意用戶輸入字符串權利?

就像我剛剛遇到一個問題,其中我的插件之一由於某種原因不能出於某種原因弄清楚如何日期如果日期是HTML編碼。

我只是把它編碼沒有想到。現在有人向我指出,這樣做沒有什麼意義,因爲我將日期從數據庫中取出,並在數據庫中將其存儲爲日期時間。所以不能真的存儲在那裏的JavaScript。

所以我猜我真的沒有這些編碼(糾正我,如果我錯了)

INT,位(布爾變量),dataetimes,小數類型如果存儲在數據庫中的這種方式。

如果它不影響我的任何插件,我仍然可以對它們進行編碼,但很高興知道我可能不需要。

+0

通常,當數據已經被解碼時,你會得到數據,你把它放在數據庫(或其他)中,像你說的那樣,語法會在顯示時處理它。由於這種語法,你不需要擔心其他地方的編碼/解碼問題(至少在絕大多數情況下) – 2010-07-16 21:55:55

回答

1

在大多數情況下,當您將數據存儲在數據庫中時,不應該對數據進行HTML編碼。正如你已經注意到的那樣,對於大多數數據類型(整數,日期等)來說,它更好(即更高性能,適用於其他系統等),以便將其保存爲未編碼。

您需要擔心的一種情況是來自外部來源(如最終用戶)的字符串。即使在這種情況下,只要將數據存儲爲未編碼就足夠了,並且一旦數據返回到瀏覽器就使用<%: ... %>進行編碼。您應該只考慮編碼字符串,如果它來自某些啓用標記的用戶控件(如TinyMCE文本編輯器或類似的東西)。

還要小心保護自己免受SQL注入攻擊。您應該驗證一段旨在表示日期的數據實際上是一個日期,然後再嘗試將其發送到數據庫。

+0

Ya tinyMCE是我的規則的一個例外。我不能將它編碼給用戶(默認的目的)。因此,在我將其插入到我的數據庫之前,我使用白名單和XSS庫來檢查它是否安全。與SQl注入攻擊一樣,我使用linq to sql,所以一切都必須是一個對象,所以我必須將日期從表單轉換爲日期時間,並且如果它無法將其解析爲日期時間,那麼它不是日期時間。 – chobo2 2010-07-16 23:09:39