2017-02-15 6 views
0

[Gelöst] - siehe unten Dies ist eine Wendung zur typischen Frage: "Wie bekomme ich den HTML-Code eines Benutzersteuerelements?" Ich weiß, wie man das macht, und ich mache es seit Jahren, aber vor kurzem habe ich mehr Wissen über Web-Sicherheit und ich bemerkte, dass meine Zeichenfolge (auch Control HTML) wird zurückgegeben, um den Client als normal HTML und es ist nicht codiert \ entkam. Ich weiß, dass ich es entkommen kann, sobald es mit Javascript in den Browser gelangt, aber es wäre sicherer, wenn es von dem Server stammt, der bereits entkommen ist.ASP.Net - Benutzersteuerelement zurückgeben html text as Escapezeichen

Zeit wie ich bin immer an den Kunden etwas zurück:

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

Was ich suche ist:

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

(oder so ähnlich)

Der Code ich verwende ist sehr typisch für diese Art von Anrufen. Meine ASCX Antwort ist codiert als:

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

Und ich meine Kontrolle nenne auf dem Server das XMLHttpRequest-Objekt verwenden:

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; 
} 

Kann ich irgendwie das Response-Objekt abfangen während des Prozesses Rendern Sie die Zeichenfolge zu entkommen bevor es zurück zum Browser kommt?

Danke!

+0

Mögliche Duplikat [Htmlencode HTMLDecode] (http://stackoverflow.com/questions/2650059/htmlencode-htmldecode) – VDWWD

+0

Suche nach 'Htmlencode/HTMLdecode' – VDWWD

Antwort

0

Vielen Dank an @VDWWD. Server.HTML-Code half, aber meine Antwort war, den HTML-Auszug des Steuerelements in das Renderereignis zu verschieben und dann zu codieren und dann während des Renderns auszugeben. So ist der Code in der Steuerung wie folgt aussehen:

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 encode\escape the returning HTML ---- 
    pageSource = Server.HtmlEncode(pageSource); 
    writer.Write(pageSource); 
} 
Verwandte Themen