2010-11-26 7 views
0

페이지에 많은 TextBox가 있습니다.페이지의 모든 TextBox에 대해 Server.HtmlEncode를 적용하는 방법

나는 문법적으로 모든 텍스트 상자에 대한 입력 및

각 하나에 Server.HtmlEncode을 적용 프로를 확인하는 방법이 있는지 알고 싶습니다.

그래서 모든 단일 문자열에 대해 Server.HtmlEncode를 적용 할 필요가 없습니다.

감사합니다!

+0

왜 그렇게해야합니까? –

+0

정확히 달성하기를 원하십니까? – Dienekes

+0

내 웹 앱에 악성 스크립트를 삽입하는 것을 피하고 싶습니다. – GibboK

답변

3

당신은 그것을위한 유틸리티 방법을 만들어야 할 것입니다. 의 라인에 뭔가 :

더 중첩 된 텍스트가 존재 제어하지 않는 경우

간단한 버전 :

public Dictionary<string, string> ReturnsAllTextEnteredOnPage() 
{ 
    Dictionary<string, string> allTextEnteredOnPage = new Dictionary<string, string>(); 
    foreach (var control in Page.Controls) 
    { 
     if (control is TextBox) 
     { 
     TextBox ctrl = (TextBox)control; 
     allTextEnteredOnPage.Add(ctrl.ID, Server.HtmlEncode(ctrl.Text)); 
     } 
    } 
    return allTextEnteredOnPage; 
} 

페이지에있는 모든 텍스트 상자 고려 약간 복잡한 버전 :

public Dictionary<string, string> ReturnsAllTextEnteredOnPage() 
{ 
    Dictionary<string, string> allTextEnteredOnPage = new Dictionary<string, string>(); 
    var allControls = FlattenChildren(Page); 
    var allTextControls = allControls.OfType<TextBox>(); 
    foreach(var textCtrl in allTextControls) 
    { 
    allTextEnteredOnPage.Add(textCtrl.ID, Server.HtmlEncode(textCtrl.Text)); 
    } 
    return allTextEnteredOnPage;   
} 

위의 방법을 here에서 가져올 수있는 FlattenChildren이라는 메서드를 사용합니다.

둘째, 나는 그 코드를 입력하는 편집기 ... 단순히 HTML로 인코딩 된 문자열을 반환 TextBox 컨트롤을 서브 클래 싱과 Text 속성을 재정의하는 것이 작업을 수행하는

+0

예제를 제공해 주시겠습니까? – GibboK

+1

^^ 예제가 있습니다. n 왜 내가 downvote를 알 수 있습니까? – Dienekes

+0

당신이 수업을 좋아해 주셔서 감사합니다, 나는 당신에게 어떤 downvote도주지 않았어! 당신의 도움을 주셔서 감사합니다! – GibboK

0

한 가지 방법을 사용 havent 한. 그런 다음 HTML 인코딩 문자열이 필요한 곳에서 프로젝트 전체에서 해당 컨트롤을 사용할 수 있습니다.

또는 HTML 인코딩 버전의 문자열을 반환하는 모든 TextBox 개체에 대해 확장 메서드를 선언 할 수 있습니다.이 메서드는 .Text 속성을 참조하지 않고 프로젝트 전체에서 호출 할 수 있습니다.

편집 : 추가 된 확장 메서드 도우미 코드 샘플

class TextBoxHelper{ public static string GetHtmlEncodedString(this System.Web.UI.WebControls.TextBox textbox){ return Server.HtmlEncode(textbox.Text); } } 
1

입력을 인코딩하는 특별한 이유가 있나요?

일반적으로 출력을 Html로 인코딩합니다 (예 : 데이터를 표시 할 때).

편집 : 당신은 당신이 XSS 및 SQL 인젝션 공격에 대한 귀하의 응용 프로그램을 강화하려는 경우 Microsoft Web Protection Library를 살펴 할 수 있습니다

.

0

문제는 컨트롤의 값을 변경하면 사용자와 혼동을 일으킬 수 있다는 것입니다. 즉, 입력 한 내용과 다릅니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    Dictionary<string, string> values = new Dictionary<string, string>(); 
    if (this.IsPostBack) 
    { 
     foreach (var control in this.Controls) 
     { 
      TextBox textbox = control as TextBox; 
      if (textbox != null) 
      { 
       values.Add(textbox.ID, Server.HtmlEncode(textbox.Text)); 
      } 
     }   
    } 
} 

값을 위의 다음 santised 입력을 포함합니다 : 그래서 당신이 할 수있는 것은 소독 입력의 컬렉션을 만들 다음과 같이 응용 프로그램에서 그것을 사용하는 것입니다. 또한이 유형의 시나리오에서 추가 보호를 위해 Anti-XSS library을 살펴볼 것을 권장합니다.

+0

나는 단순한 foreach가 모든 textbox를 얻을 것이라는 것을 믿지 않는다 - 중첩 된 것을 생각해 보라! –

관련 문제