2012-01-04 2 views
0

내 페이지에 ASP.NET 텍스트 상자를 추가했는데 다음 및 이전 단추가 있습니다. 나는 문자열을 입력했습니다. Hello "World"을 입력란에 입력하십시오. 나는 검토 페이지 (편집 불가능)를 보여줄 다음 버튼을 클릭했고, 모든 데이타는 sessioin에 저장되어있다. 이 후 나는 입력 필드 (편집 페이지)를 보여 주어야하는 이전 버튼을 클릭하고있다. 이 동안 세션에서 데이터를 가져 와서 ASP.NET 텍스트 상자에 다시 표시합니다.ASP.NET Textbox는 큰 따옴표 뒤에 문자열을 생략합니다.

페이지를 볼 때 ASP.NET 텍스트 상자에서 큰 따옴표를 입력 한 후 입력 한 내용이 삭제됩니다. 즉, 나는 단지 Hello을 볼 수 있습니다.

내 요구 사항은 사용자가 큰 따옴표를 입력 할 수 있도록 허용해야합니다.

이 문제를 해결할 방법이 있습니까?

+0

디버깅하려고 했습니까? 세션에서 데이터가 올바르게 저장되고 있습니까? –

+0

먼저, 큰 따옴표를 제거하는 것이 무엇인지 알아야합니다. 게시 후 서버 측에서 어떤 가치를 얻고 있는지 디버그하고 제안하는 것이 좋습니다.값이 정상이면 큰 따옴표가 제거 된 위치를 찾으십시오. – aleafonso

답변

0

이전에이 문제가 발생하지 않았습니다. 사용자가 텍스트 상자에 큰 따옴표를 입력해도 괜찮습니다.

당신이 원인을 찾을 수

에 인용 또는 코드를 디버깅을 필터링하는 일부 프로그램 로직이있는 경우 확인할 수 있습니다. 아래는 간단한 테스트 코드입니다.

<form id="form1" runat="server"> 
<div> 
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <asp:Button 
    ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 
    <asp:Button ID="Button2" runat="server" Text="Button" onclick="Button2_Click" /> 

</div> 
</form> 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Session.Add("KK",this.TextBox1.Text); 
} 
protected void Button2_Click(object sender, EventArgs e) 
{ 
    this.TextBox1.Text = Session["KK"] as string; 
} 
+0

감사합니다 모두, 실제로 System.Web.UI.WebControls.TextBox에서 상속하는 사용자 지정 컨트롤을 사용하고 있습니다. 컨트롤의 render 메서드에서 output.Write (string.Format ("", UniqueID, Text, args)); 이 텍스트 값의 이 제대로 이스케이프 처리되지 않습니다. – nimi

2

ASP.NET은 텍스트 상자에서 따옴표를 제거하지 않으므로 검토 용으로 코드를 게시하는 것이 좋습니다.

그러나, 입력에 따옴표를 허용하면 잠재적으로 위험한 요청에 대해 매우 구체적인 오류를 볼 것이다 경우에 경우에 트리거 요청 유효성 검사 필드.

그렇다면 XSS 공격에 대해 따옴표를 허용하는 텍스트 입력란을 확인해야합니다.

1

지금 재현 케이스가 발생합니다. 값 속성에 큰 따옴표를 사용하면

값이 텍스트 상자에 큰 따옴표를 포함하는 값과 충돌합니다. 따라서 사용자는

출력 구문에서 큰 따옴표를 작은 따옴표로 변경하십시오. 당신이 "렌더링"덮어 쓸 경우

output.Write(string.Format("<input name=\"{0}\" id=\"{0}\" type=\"text\" value=\'{1}\'{2}/>", UniqueID, Text, args)); 
0

당신은 또한 당신이 HTML을 생성에 도움을 제공 HtmlTextWriter에 출력되는 것을 활용할 수 :

당신은 아래의 코드를 시도 할 수 있습니다.

아래 샘플은 사용자의 접근 방법보다 자세한 정보이지만 출력 내용을 파악하여 HtmlTextWriter (출력)에 값 등을 삽입 할 수 있습니다. HtmlTextWriter는 적절한 이스케이프 처리가 값에 대해 수행합니다.

protected override void RenderContents(HtmlTextWriter output) 
    { 
     output.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID); 
     output.AddAttribute(HtmlTextWriterAttribute.Type, Text); 
     output.AddAttribute(HtmlTextWriterAttribute.Value, Value); 
     output.RenderBeginTag(HtmlTextWriterTag.Input); 
     output.RenderEndTag(); 
    } 

또는 당신은 문자 값 등의 문제를 방지하기 위해 System.Web.HttpUtility.HtmlEncode를 사용할 수

관련 문제