[已解决] - 见下文这是一个典型问题的转折:"如何获得用户控制的HTML?"我知道该怎么做,并且我已经这样做了多年了,但是最近我对网络安全性越来越了解,我注意到我的字符串(又名控制html)是正常的HTML返回客户端的,并且没有编码 Escoded Escoped。我知道,一旦使用JavaScript到达浏览器后,我可以逃脱它,但是如果它来自服务器已经逃脱,它将更加安全。
目前,我正在向客户收回一些东西:
returnText = "<input id='myButton' text='whatever'>"
我正在寻找的是:
returnText = "<input%20id='myButton'%20text='whatever'>"
(或类似的东西)
我使用的代码对于这些类型的调用非常典型。我的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);
}