Cómo: Proteger una aplicación Web frente a ataques mediante secuencias de comandos aplicando codificación HTML a las cadenas
Actualización: noviembre 2007
La mayoría de los ataques mediante secuencias de comandos se producen cuando los usuarios pueden introducir código ejecutable (o secuencias de comandos) en la aplicación. De forma predeterminada, ASP.NET proporciona validación de solicitudes, con lo que se provoca un error si un formulario recibido contiene código HTML.
Es posible contribuir a la protección contra los ataques mediante secuencias de comandos de los modos siguientes:
Realice la validación de parámetros en variables de formulario, en variables de cadena de consulta y en valores de cookies. Esta validación debe incluir dos tipos de comprobación: que las variables se pueden convertir al tipo esperado (por ejemplo, a entero, fecha-hora, etc.) y que el formato o los intervalos son los esperados. Por ejemplo, una variable de formulario recibido diseñada para ser un entero debería comprobarse con el método Int32.TryParse para determinar si es realmente un entero. Además, se debería comprobar el entero resultante para determinar si el valor se encuentra dentro un intervalo esperado.
Aplique codificación HTML al resultado de cadena cuando se vuelvan a escribir valores para la respuesta. Así se garantiza que cualquier entrada de cadena proporcionada por el usuario se represente como texto estático en los exploradores, y no como código de secuencias de comandos ejecutables ni elementos HTML interpretados.
La codificación HTML convierte los elementos HTML que usan caracteres HTML reservados de forma que se muestren en lugar de ejecutarse.
Para aplicar codificación HTML a una cadena
Antes de mostrar cadenas, llame al método HtmlEncode. Así, los elementos HTML se convertirán en representaciones de cadenas que el explorador mostrará en lugar de interpretarlas como código HTML ejecutable.
En el ejemplo siguiente se ilustra la codificación HTML. En el primer caso, la entrada del usuario se codifica antes de mostrarse. En el segundo caso, los datos de una base de datos se codifican antes de mostrarse.
Nota: Este ejemplo sólo funcionará si deshabilita la validación de solicitudes en la página agregando el atributo de @ PageValidateRequest="false". No es recomendable deshabilitar la validación de solicitudes en aplicaciones de producción, por lo que deberá asegurarse de volver a habilitar la validación de solicitudes después de ver este ejemplo.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles Button1.Click Label1.Text = Server.HtmlEncode(TextBox1.Text) Label2.Text = _ Server.HtmlEncode(dsCustomers.Customers(0).CompanyName) End Sub
private void Button1_Click(object sender, System.EventArgs e) { Label1.Text = Server.HtmlEncode(TextBox1.Text); Label2.Text = Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName); }
Vea también
Conceptos
Información general sobre los ataques mediante secuencias de comandos
Información general sobre las amenazas para la seguridad de las aplicaciones Web