ASP.NET-返回用户控制html text如逃逸



[已解决] - 见下文这是一个典型问题的转折:"如何获得用户控制的HTML?"我知道该怎么做,并且我已经这样做了多年了,但是最近我对网络安全性越来越了解,我注意到我的字符串(又名控制html)是正常的HTML返回客户端的,并且没有编码 Escoded Escoped。我知道,一旦使用JavaScript到达浏览器后,我可以逃脱它,但是如果它来自服务器已经逃脱,它将更加安全。

目前,我正在向客户收回一些东西:

returnText = "<input id='myButton' text='whatever'>"

我正在寻找的是:

returnText = "&lt;input%20id='myButton'%20text='whatever'&gt;"

(或类似的东西)

我使用的代码对于这些类型的调用非常典型。我的ASCX响应被编码为:

StringBuilder myStringBuilder = new StringBuilder();
TextWriter myTextWriter = new StringWriter(myStringBuilder);
HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter);
viewControl.RenderControl(myWriter);
strControl = myTextWriter.ToString();

我正在使用XMLHTTPRequest对象在服务器上调用我的控件:

function callServer(strPage,qryParms) {
if (xmlHttp != null) { xmlHttp.abort(); }
xmlHttp = null;
var retValue = "";
xmlHttp = CreateHttpRequest();
if (xmlHttp == null) {
    alert("Your browser does not support Ajax HTTP Requests");
    return;
}
else {
    xmlHttp.open("POST", strPage, false);
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.onreadystatechange = function () 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            retValue = xmlHttp.responseText;
        }
    }
    xmlHttp.send(qryParms);
}
// retValue = htmlEncode(retValue);  <--- this is where I could convert it.
return retValue;
}

我可以在渲染过程中以某种方式拦截响应对象以逃脱字符串,然后再返回浏览器?

谢谢!

谢谢@vdwwd。server.htmlencode提供了帮助,但我的答案是将控件的HTML的提取物移动到渲染事件中,然后对其进行编码,然后在渲染过程中将其写出。因此,控件中的代码看起来像这样:

protected override void Render(HtmlTextWriter writer)
{
   TextWriter tw = new StringWriter();
   HtmlTextWriter htw = new HtmlTextWriter(tw);
   base.Render(htw);
   string pageSource = tw.ToString();
   //--- this is where I encodeescape the returning HTML  ----
   pageSource = Server.HtmlEncode(pageSource);
   writer.Write(pageSource);
}

相关内容

最新更新