2017-02-15 11 views
0

[Разрешено] - см. Ниже Это крутой вопрос, типичный вопрос: «Как получить HTML-код пользователя?» Я знаю, как это сделать, и я делаю это в течение многих лет, но в последнее время я стал более осведомленным о безопасности веб-сайтов, и я заметил, что моя строка (ака Control HTML) возвращается клиенту как обычный HTML и не кодируется \ убежали. Я знаю, что я могу сбежать от него, как только он попадет в браузер, используя javascript, но он будет более безопасным, если он исходит из уже сбежавшего сервера.ASP.Net - Возврат пользовательского элемента управления html text как экранированный

В настоящее время я получаю что-то клиенту, как:

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

Могу ли я как-то перехватить объект Response во время визуализации процесса, чтобы избежать строки прежде чем он вернется в браузер?

Спасибо!

+0

Возможный дубликат [HTMLEncode HTMLdecode] (http://stackoverflow.com/questions/2650059/htmlencode-htmldecode) – VDWWD

+0

Поиск 'HTMLEncode/HTMLdecode' – VDWWD

ответ

0

спасибо @VDWWD. Server.HTMLencode помог, но мой ответ состоял в том, чтобы перенести извлечение HTML-кода элемента управления в событие Render, а затем закодировать его, а затем записать его во время рендеринга. Таким образом, код в элементе управления выглядит следующим образом:

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); 
} 
Смежные вопросы