페이지에 많은 TextBox가 있습니다.페이지의 모든 TextBox에 대해 Server.HtmlEncode를 적용하는 방법
나는 문법적으로 모든 텍스트 상자에 대한 입력 및
각 하나에 Server.HtmlEncode
을 적용 프로를 확인하는 방법이 있는지 알고 싶습니다.
그래서 모든 단일 문자열에 대해 Server.HtmlEncode를 적용 할 필요가 없습니다.
감사합니다!
페이지에 많은 TextBox가 있습니다.페이지의 모든 TextBox에 대해 Server.HtmlEncode를 적용하는 방법
나는 문법적으로 모든 텍스트 상자에 대한 입력 및
각 하나에 Server.HtmlEncode
을 적용 프로를 확인하는 방법이 있는지 알고 싶습니다.
그래서 모든 단일 문자열에 대해 Server.HtmlEncode를 적용 할 필요가 없습니다.
감사합니다!
당신은 그것을위한 유틸리티 방법을 만들어야 할 것입니다. 의 라인에 뭔가 :
더 중첩 된 텍스트가 존재 제어하지 않는 경우간단한 버전 :
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 속성을 재정의하는 것이 작업을 수행하는
한 가지 방법을 사용 havent 한. 그런 다음 HTML 인코딩 문자열이 필요한 곳에서 프로젝트 전체에서 해당 컨트롤을 사용할 수 있습니다.
또는 HTML 인코딩 버전의 문자열을 반환하는 모든 TextBox 개체에 대해 확장 메서드를 선언 할 수 있습니다.이 메서드는 .Text 속성을 참조하지 않고 프로젝트 전체에서 호출 할 수 있습니다.
편집 : 추가 된 확장 메서드 도우미 코드 샘플
class TextBoxHelper{ public static string GetHtmlEncodedString(this System.Web.UI.WebControls.TextBox textbox){ return Server.HtmlEncode(textbox.Text); } }
입력을 인코딩하는 특별한 이유가 있나요?
일반적으로 출력을 Html로 인코딩합니다 (예 : 데이터를 표시 할 때).
편집 : 당신은 당신이 XSS 및 SQL 인젝션 공격에 대한 귀하의 응용 프로그램을 강화하려는 경우 Microsoft Web Protection Library를 살펴 할 수 있습니다
.
문제는 컨트롤의 값을 변경하면 사용자와 혼동을 일으킬 수 있다는 것입니다. 즉, 입력 한 내용과 다릅니다.
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을 살펴볼 것을 권장합니다.
나는 단순한 foreach가 모든 textbox를 얻을 것이라는 것을 믿지 않는다 - 중첩 된 것을 생각해 보라! –
왜 그렇게해야합니까? –
정확히 달성하기를 원하십니까? – Dienekes
내 웹 앱에 악성 스크립트를 삽입하는 것을 피하고 싶습니다. – GibboK