2011-03-06 36 views
2

我的視頻教程,我們應該使用了Html.Encode在我們的看法,以防止惡意注射看到。然而,當我編碼文本包含「字符(例如狗的)在瀏覽器的輸出是狗#39; S。我會認爲每個有潛在危險的角色都會被重新映射到瀏覽器可以正確渲染的安全​​代碼。這不是這種情況嗎?我怎樣才能'在瀏覽器中顯示,但以HTML安全的方式?如何呈現單引號以安全的方式

回答

5

如果您正在使用ASP.NET MVC 2 <%:%>已經爲您編碼的值 在Razor(MVC 3)中@爲您編碼值,因此您不需要將輸出包裝在Html中。編碼

確保您不是雙重編碼

6

在剃刀@自動編碼你的,這意味着你可能做了雙重編碼。 例子:

@Html.Encode("This is \"safe\"") 

或多或少一樣

@{Response.Write(Html.Encode(Html.Encode("This is \"safe\"")));} 

說不上如果最後一個剃刀工作雖然。

+0

最後一個可以在Razor中工作,但不應直接寫入'Response'對象。如果你做的事情可能會呈現在意想不到的位置。 – marcind 2011-03-07 18:30:42

+0

什麼?不要讓代碼順序運行? – Alxandr 2011-08-09 11:10:31

+0

代碼按順序運行,但剃鬚刀輸出被寫入文本緩衝區,一旦頁面完成執行,該文本緩衝區只會被刷新到響應流。如果你寫響應流直接,那麼你可能沖洗發生之前注入你的輸出,從而導致意外的排序。 – marcind 2011-08-09 18:06:12