2017-02-15 39 views
1

請幫我理解爲什麼會發生這種情況。我的Web應用程序從數據庫中檢索包含撇號的文本,以使用Web窗體中的標籤進行顯示。但是,提交Web表單時發生潛在的危險錯誤。C#潛在危險錯誤,表單提交中的撇號

我可以用HttpUtility.HtmlDecode()上的數值解決這個錯誤之前,我將它設置爲Label.Text

我一直在谷歌搜索,我不能明白,導致此問題的流程。

據我所知,提交類似'潛在的HTML標記時,會發生潛在的危險錯誤,並還篩選了一些編碼的字符,如「'」

不過,我不明白是:

  1. 字符串值是否在Web窗體上顯示時自動進行HTML編碼?因爲我的數據庫中的值不是HTML編碼的。

  2. 爲什麼解碼它解決了錯誤時,從數據庫中我的價值擺在首位沒有被編碼?如果是這樣的話,我應該解碼數據庫中的所有值嗎?

回答

0

我認爲你正在尋找這樣的事情 - >How to allow apostrophe in asp.net website

主要的原因出現這種情況主要是由於事實,接受撇號不正確地處理它可能會導致SQL Injection。默認情況下,Microsoft啓用了每次請求時發生的驗證,即使在達到正常頁面生命週期之前也會發生這種驗證,並檢查表單中是否有可能導致SQL注入或其他漏洞的任何內容(絕不是我說的微軟保護你免受一切侵擾,但至少試圖覆蓋基本知識並讓你意識到)。最後,由您決定禁用該功能(基於我的第一個鏈接),但您應該注意並以適當的方式保護自己。

在您的問題enconding正如其名字會照顧撇號的爲正確的字符不是仍然可以使用SQL查詢,例如一個特殊字符。很明顯,取決於您可能想要解碼的場景,或者在呈現時再次對其進行編碼。如果你想顯示豐富的HTML,那麼你可能需要解碼等等,等等。

底線我想你應該回到我的第一段,並明白這一開始,只有那時你才能明白什麼對於你的情況正確的解決方案,因爲我認爲你不想冒險創造一個脆弱的網站:)

+0

是的,我看了你之前發佈的這個問題,但我仍然有懸而未決的問題。由於我的工作性質,我不允許禁用驗證。我不明白的是這個過程的生命週期;特別是HTML編碼和解碼部分。我是否正確地認爲文本在Web窗體中呈現時自動進行HTML編碼,因爲我遇到的錯誤引用了&?爲什麼HTML解碼文本解決了我的問題?相關文本在保存到數據庫中之前未經過HTML編碼。你解碼之前不需要編碼嗎? – PikaManiac

+0

@PikaManiac我不想說你顯然需要對它進行編碼,因爲它取決於場景。然而,在這個特定的場景中,我認爲你確實需要這樣做,因爲我假設你有一個texarea或者某人正在插入這個東西:「不要」,當你編碼它時,它會變成「don &?t「,瀏覽器可以理解並可以渲染爲」不「。 看看這個小提琴https://jsfiddle.net/b41v18dq/1/ – rjso