2010-02-17 3 views
2

링크 이름을 데이터베이스에서 가져온 경우 Html.Encode 메서드를 호출하여 이름을 정리해야합니까?ASP.NET MVC에서 ActionLinks를 빌드 할 때 Html.Encode를 호출해야합니까?

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

나 : 예를 들어

그것은 당신이 <a></a> 사이에 페이지에 주입 더 위험한 문자열이 없는지 확인하기 위해이 작업을 수행 할 것이 나을
Html.ActionLink(Html.Encode(Model.PersonFromDB.FirstName), 
       "Action", 
       "Controller", 
       new RouteValueDictionary { { "id", Model.PersonFromDB.Id } }, 
       null) 

태그가 있지만 스크립트와 앵커 태그 사이에서 실행 가능합니까?

+0

질문을 게시하고 답변을 표시 한 후이 사이트를 방문했지만이 질문에 비틀 거린 다른 사람들에게 도움이되는 것으로 나타났습니다. http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet –

답변

6

아니요, this thread on SOHtmlAction.Link()에 따르면 이미 HTML로 값을 인코딩하므로 두 번 끝내야합니다.

+0

정확함; MVC 2 소스 코드에서 HtmlHelper.cs의'GenerateLinkInternal'을보십시오. –

-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

0

확실히 좋은 생각이지만 사용자가 잠재적으로 악성 문자열을 이름으로 입력하는 것을 방지해야합니다.

+0

ASP.NET MVC에 기능이 있습니다. 모든 입력을 검사하여 스크립트 또는 악의적 인 텍스트를 입력하려고했는지 확인합니다. –

+0

나는 일반적으로 동의하지만 "잠재적으로 악의적 인"것은 데이터가 표시되는 위치에 많이 의존한다는 것을 명심하십시오. 예를 들어, ""은 종이 보고서 또는 원시 DB 보고서에 표시 될 때 전혀 해를 끼치 지 않으며 HTML로 표시 될 때만 문제가됩니다. 따라서 궁극적으로 특정 요구에 따라 데이터 서식을 지정하는 _ 표현 레이어의 작업입니다. –

관련 문제