2010-02-17 50 views
2

如果從數據庫中提取鏈接的名稱,是否應該調用Html.Encode方法來清除名稱?在ASP.NET MVC中構建ActionLinks時應該調用Html.Encode

例如:

Html.ActionLink(Model.PersonFromDB.FirstName, 
       "Action", 
       "Controller", 
       new RouteValueDictionary { { "id", Model.PersonFromDB.Id } }, 
       null) 

或:

Html.ActionLink(Html.Encode(Model.PersonFromDB.FirstName), 
       "Action", 
       "Controller", 
       new RouteValueDictionary { { "id", Model.PersonFromDB.Id } }, 
       null) 

它將使你想這樣做是爲了確保有<a></a>之間注入的頁面沒有危險串感標籤,但腳本和錨標籤之間的這種可執行文件?

+0

我在發佈問題並標記答案後偶然發現此網站,但我認爲這有助於其他人偶然發現此問題:http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet – 2010-02-18 20:36:14

回答

6

不,因爲根據this thread on SOHtmlAction.Link()已經HTML編碼值,所以你最終會做兩次。

+0

正確;請參閱MVC 2源代碼中的HtmlHelper.cs中的GenerateLinkInternal。 – 2010-02-17 20:11:51

-1

是的,絕對。作爲一般規則,對於要輸出的任何HTML,它最初是從不受信任的源獲得的,假設該格式不是HTML(並經過充分審查),則應始終對該字符串進行HTML編碼以防止注入攻擊。

+0

否。請參閱http://stackoverflow.com/questions/2283920/should-html-encode-be-called-when-building-actionlinks-in-asp-net-mvc/2284022#2284022 – bzlm 2010-04-13 14:47:34

0

這當然是一個好主意,但您應該防止用戶輸入可能是惡意的字符串作爲他們的名字。

+0

ASP.NET MVC有一個功能它檢查所有輸入以查看您是否嘗試輸入腳本或惡意文本,因此已經存在。 – 2010-02-17 20:04:36

+0

我一般都同意,但請記住,「潛在的惡意」很大程度上取決於數據的顯示位置_displayed_。例如,「」在紙質報告或原始數據庫報告上顯示時並不會造成任何損害,這只是HTML中顯示的問題。因此,它最終是_presentation層的工作,根據其特定需求來格式化數據。 – 2010-02-17 20:05:26

相關問題