Información general sobre los ataques mediante secuencias de comandos

Actualización: noviembre 2007

Desde la perspectiva de un explorador, una página Web es simplemente una larga cadena de caracteres El explorador procesa secuencialmente, mostrando algunos caracteres, e interpretando otros, como <b> y <script>, de acuerdo con reglas especiales. Si un usuario malintencionado puede insertar algunos de estos caracteres especiales en una página, el explorador no sabrá que dichos caracteres no deberían estar ahí, y los procesará como parte de la página.

Un ataque mediante scripts simplista podría actuar del modo siguiente. Si una aplicación permite a los usuarios exponer comentarios sobre las últimas películas para que los lean otros usuarios, los pasos del ataque podrían ser los siguientes:

  1. La aplicación muestra un formulario en el que los usuarios introducen sus comentarios. El usuario malintencionado escribe en dicho formulario un comentario que incluye un bloque <script>.

  2. El formulario se envía y el comentario del usuario malintencionado se almacena en una base de datos.

  3. Otro usuario visita el sitio. Cuando se construye la página, la aplicación lee los comentarios de la base de datos y los incluye en la página. El bloque <script> del usuario malintencionado se escribe en la página como si fuera un comentario de texto.

  4. Cuando el explorador del segundo usuario muestra la página, obtiene el bloque <script> y lo ejecuta.

Existen otros medios que permiten a los usuarios malintencionados realizar ataques mediante scripts. La mayoría de estos ataques requieren que la aplicación acepte la entrada malintencionada y la inyecte (o la reproduzca) en una página en la que el explorador la ejecutará. El daño potencial de tal ataque depende del script que se ejecute. Puede ser algo trivial, como un mensaje molesto que surge en el explorador, pero también puede causar un daño serio robando cookies, entrada de los usuarios (como una contraseña), y si la seguridad de Internet es poco estricta, ejecutando código nativo en el equipo del usuario.

Para obtener información sobre cómo evitar los ataques a través de scripts, vea Cómo: Proteger una aplicación Web frente a ataques mediante secuencias de comandos aplicando codificación HTML a las cadenas.

Nota:

ASP.NET ayuda a protegerse frente a los ataques mediante scripts disfrazados de direcciones URL; para ello, comprueba las cadenas potencialmente peligrosas, como "<!", "</" y "<?".

Ataques mediante instrucciones SQL

Una variante de los ataques mediante scripts consiste en hacer que se ejecuten instrucciones SQL malintencionadas. Esto puede ocurrir cuando una aplicación pide información a los usuarios y, a continuación, la incluye en una cadena que representa la instrucción SQL. Por ejemplo, una aplicación podría pedir un nombre de cliente con la intención de ejecutar una instrucción, como en el caso siguiente:

"Select * From Customers where CustomerName = " & txtCustomerName.Value

Pero un usuario malintencionado que conozca la base de datos podría usar el cuadro de texto para introducir una instrucción SQL incrustada con el nombre del cliente, lo que resultaría en una instrucción como la siguiente:

Select * From Customers Where CustomerName = 'a' Delete From Customers Where CustomerName > ''

Al ejecutar la consulta, la base de datos estará en peligro.

Protegerse contra los ataques mediante scripting

La defensa principal contra los ataques mediante scripting consiste en no fiarse nunca de la información proveniente del usuario. Se debe dar por sentado que cualquier información enviada a la aplicación desde un explorador puede contener scripts malintencionados.

De igual modo, siempre que se escriba una cadena en una página, se debería suponer que puede contener un script malintencionado (a menos que haya creado personalmente la cadena mediante programación). Por ejemplo, cuando se leen cadenas de una base de datos, se debería presumir que pueden contener scripts malintencionados. Los programadores más preocupados por la seguridad no se fían ni siquiera de sus propias bases de datos, según la teoría de que un usuario malintencionado podría haber encontrado un modo de manipular la base de datos.

ASP.NET proporciona varios medios de ayuda para protegerse contra los ataques dirigidos mediante scripting:

  • ASP.NET realiza la validación de solicitudes con variables de formulario y cadena de consulta, así como con valores de cookies. De forma predeterminada, si el objeto Request actual contiene elementos codificados en HTML o ciertos caracteres HTML (como &#151; para un guión largo), el marco de trabajo de páginas ASP.NET inicia un error.

  • Si desea que se muestren cadenas en su aplicación pero no le merecen plena confianza, aplíqueles codificación HTML cuando vuelvan a escribirse en una respuesta. Por ejemplo, mediante la codificación, la etiqueta <b> se convierte en &lt;b&gt;. Haga esto si las cadenas que va a mostrar pertenecen a una base de datos de cuyo contenido no está seguro si se puede confiar o no.

  • Si desea que la aplicación acepte HTML (por ejemplo, algunas instrucciones de los usuarios con respecto al formato), debe realizar la codificación de HTML en el cliente antes de su envío al servidor. Para obtener más información, vea Cómo: Proteger una aplicación Web frente a ataques mediante secuencias de comandos aplicando codificación HTML a las cadenas.

  • Como ayuda para protegerse contra los ataques mediante instrucciones SQL, no cree nunca consultas SQL usando concatenación de cadenas. En su lugar, use una consulta parametrizada y asigne la entrada del usuario a objetos de parámetros. Para obtener información detallada, vea Parámetros de los comandos de adaptadores de datos.

  • Valide siempre la entrada de formulario con un conjunto de valores esperados y validación de tipos o formato de cadenas. Por ejemplo, si se espera que una variable de formulario determinada sea un entero, utilice el método Int32.TryParse para comprobar que el valor es realmente un entero y utilice la comprobación de intervalos para asegurarse de que el valor se encuentra realmente dentro de un intervalo aceptable.

Vea también

Tareas

Cómo: Proteger una aplicación Web frente a ataques mediante secuencias de comandos aplicando codificación HTML a las cadenas

Conceptos

Información general sobre las amenazas para la seguridad de las aplicaciones Web

Procedimientos de seguridad básicos para aplicaciones Web