ASP
.NET - Usando os métodos HtmlEncode e HtmlDecode
Você conhece os métodos HtmlEncode e HtmlDecode da ASP .NET ?
Geralmente poucos desenvolvedores conhecem e utilizam estes métodos.
O método HtmlEncode codifica uma seqüência específica a ser exibida em um navegador.
Ele é importante para codificar strings com caracteres especiais que não podem ser escritos diretamente na página HTML, antes de sua renderização na página, principalmente para evitar injeção de script cross-site(XSS) e ataques de injeção HTML.
O termo
XSS,
também conhecido como
CSS
(Cross
Site Scripting,
não confundir com
Cascading Style Sheets),
é uma vulnerabilidade muito comum encontrada em aplicativos web. O
XSS
permite ao atacante inserir códigos maliciosos nessas páginas para que sejam
executados no momento em que tais páginas forem acessadas. O ataque permite que conteúdos (scripts) em uma zona sem privilégio seja executado com permissão de uma zona privilegiada, ou seja, escalação de privilégios no cliente (web browser) executando o script. |
Caracteres como ponto de interrogação(?), comercial (&), barras (/). sinais de maior, menor <,>), espaços, etc. podem ser truncados ou corrompidos por alguns navegadores e dessa forma esses caracteres devem ser codificados em tags <a> ou sequência de consultas, onde as strings podem ser reenviadas por navegador em requisições.
O método HtmlEncode é uma maneira conveniente de acessar o método HttpUtility.HtmlEncode em tempo de execução a partir de um aplicativo ASP.NET. (Internamente, HtmlEncode usa HttpUtility.HtmlEncode para codificar seqüências de caracteres.)
Exemplo: O texto : "Macoratti.net < Visual Basic >." deve ser codificado para "Macoratti.net < Visual Basic >."
Para isso usamos o método HtmlEncode do Server:
Dim
textoNormal As String = "Macoratti.net < Visual
Basic >" Dim textoCodificado As String = Server.HtmlEncode(textoNormal) |
Em geral o método pode usar no máximo dois parâmetros, o primeiro parâmetro é a string que deve ser codificada e segundo parâmetro é um "TextWriter", um fluxo de saída, que contém a seqüência codificada.
Esta operação é geralmente necessária em cenários onde temos as seguintes situações:
· Passagem de
valores de uma página para outra;
· Acesso a URL ou passar a URL;
· Busca ou inclusão de dados em um banco de dados;
· Leitura ou inclusão de dados XML;
· Mudança de caracteres especiais em uma string;
· Utilização de segurança;
O método HtmlDecode converte uma seqüência de caracteres que foi codificado em HTML para a transmissão HTTP em uma seqüência de caracteres decodificada. A decodificação HTML reverte a codificação feita anteriormente pelo método HtmlEncode.
Na plataforma .NET temos três maneiras de usar esses métodos :
· Server.HtmlEncode()
· Server.HtmlDecode()
·
Server.HtmlUrlEncode()
· Server.HtmlUrlDecode ()
·
HttpUtility.UrlEncode()
· HttpUtility.UrlDecode ()
Vamos abrir o Visual Web Developer 2010 Express Edition e criar um novo web site usando o template ASP .NET Empty Web Site com o nome HtmlEncode_Decode:
![]() |
Vamos incluir um Web Form no projeto usando o menu WebSite -> Add New Item, template Web Form e aceite o nome Default.aspx;
A seguir vamos incluir no web form os controles TextBox e Button a partir da ToolBox conforme o leiaute abaixo:
![]() |
A seguir vamos incluir no evento Click do botão de comando Encode, no arquivo code-behind Default.aspx.vb , o seguinte código:
Partial Class _Default Inherits System.Web.UI.Page Protected Sub cmdEncode_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdEncode.Click 'Pega a String Dim convString As String = txtLeTexto.Text 'Cria o objeto StringWriter para codificar e decodificar Dim tw As New System.IO.StringWriter Dim tw1 As New System.IO.StringWriter 'Codifica o HTML usando Encode Server.HtmlEncode(convString, tw) 'Decodifica o HTMLCode Server.HtmlDecode(convString, tw1) 'Exibe o texto Codificado(Encoded) txtMsg.Text = tw.ToString 'e decoficado(Decoded) no TextBox txtDecode.Text = tw1.ToString End Sub End Class |
Executando o WebSite e digitando uma string obtemos o seguinte resultado:
![]() |
Vejamos a seguir uma outra maneira de fazer a mesma coisa. Vamos incluir um novo botão de comando com o texto Encode 2;
A seguir no evento Click do botão Encode 2 vamos incluir o seguinte código:
Protected Sub btnEncode2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEncode2.Click ' texto HTML. Dim texto As String = txtLeTexto.Text ' efetua a codificação dos caracteres & , > Dim htmlEncoded As String = Server.HtmlEncode(texto) ' Decodifica o texto Dim original As String = Server.HtmlDecode(htmlEncoded) ' Acessado o método da classe Server Dim alsoEncoded As String = HttpContext.Current.Server.HtmlEncode(texto) Dim stringWriter As New System.IO.StringWriter() Using writer As New HtmlTextWriter(stringWriter) ' Escrevendo uma DIV com texto writer.RenderBeginTag(HtmlTextWriterTag.Div) writer.WriteEncodedText(texto) writer.RenderEndTag() End Using Dim html As String = stringWriter.ToString() txtMsg.Text = html End Sub |
Executando o projeto teremos:
![]() |
Vejamos agora o método HttpUtility.UrlEncode()
Vamos usar o método Load do formulário para gerar a URL usada e usando o método Encode vamos codificar a URL.
Inclua no evento Load do formulário o seguinte código:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim strUrl As String = Request.Url.ToString() 'Request.Url pega a url Response.Write("<font color='green'>A URL é:</font> " & strUrl & "<br/>") 'Aplica o Encode na URL Response.Write("<font color='green'>A URL Codificada é : </font>" & HttpUtility.UrlEncode(strUrl)) End Sub |
Executando o projeto teremos:
![]() |
A URL : http://localhost:50102/HtmlEncode_Decode/Default.aspx
foi codificada para : http%3a%2f%2flocalhost%3a50102%2fHtmlEncode_Decode%2fDefault.aspx
Para decodificar a URL basta aplicar o método HttpUtility.UrlDecode().
Você pode verificar o processo on-line acessando o site: http://ostermiller.org/calc/encode.html
![]() |
O resultado obtido pela codificação(Encode) para
http://www.macoratti.net é o
seguinte:
|
Pegue o projeto completo
aqui: HtmlEncode_Decode.zip
Gál 3:13-14
"Cristo nos resgatou da maldição da lei, fazendo-se maldição por nós; porque está escrito: Maldito todo aquele que for pendurado no madeiro; para que aos gentios viesse a bênção de Abraão em Jesus Cristo, a fim de que nós recebêssemos pela fé a promessa do Espírito."Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Instalando e configurando o Internet Information Services (IIS)
Criando o seu livro de visitas
http://ostermiller.org/calc/encode.html