Fuente: MSDN
Traducción:
Ámbito de aplicación del BLOG de Yunzhongcheng:
ASP.NET versión 1.1
ASP.NET versión 2.0
Resumen:
este texto presenta principalmente cómo verificar la entrada del usuario para evitar ataques de inyección. Es muy necesario verificar la entrada del usuario. Casi todos los ataques a nivel de programa contienen métodos de entrada maliciosos,
incluidos campos, parámetros de cadena de consulta, cookies y otros usuarios. Los elementos de entrada se utilizan para proteger su programa de ataques de inyección. Debe asumir que todas las entradas del usuario son maliciosas y asegurarse de que todas las entradas del usuario se verifiquen en el lado del servidor. El uso de la validación basada en el cliente puede reducir la cantidad de estancias de la página. mejore el rendimiento y mejore la experiencia del usuario, pero no confíe únicamente en esto, porque los piratas informáticos pueden engañar fácilmente a la validación del lado del cliente.
Para validar el contenido de entrada, debe definir reglas de entrada aceptables para cada campo de entrada. es hacer restricciones basadas en la longitud, rango, formato y tipo del campo de entrada. Utilice una lista de restricciones de caracteres aceptable en lugar de una lista de caracteres ilegales para restringir la entrada. El uso de restricciones de lista de caracteres ilegales no es bueno porque es casi imposible. para filtrar toda la entrada dañina.
Si necesita aceptar la entrada de caracteres HTML, es mejor utilizar un método como HtmlEncode para codificarlo de forma segura antes de mostrarlo.
Contenido:
Descripción general
del propósito
Implementación paso a paso
Paso 1. Uso de ASP. NET. Verificación de solicitudes.
Paso 2. Utilice la entrada de restricción de derechos.
Paso 3. Codifique la entrada no segura.
Paso 4. Utilice parámetros de comando para las declaraciones Sql.
Verifique que los erroresde
ASP.NET no se devuelvan al cliente.
-------------------------------------------------- ------------------------------
Objetivo:
Restrinja la longitud, el rango, el formato y el tipo de la cadena de entrada.
Utilice la validación de solicitudes para evitar ataques de inyección al desarrollar programas ASP.NET.
Utilice controles de validación de ASP.NET para la validación de entradas.
Codificar salida insegura.
Evite ataques de inyección utilizando el patrón de conjunto de parámetros de comando.
Evite que los detalles del error se devuelvan al cliente.
Descripción general:
debe validar todas las entradas que no sean de confianza en su aplicación. Debe asumir que todas las entradas del usuario no son válidas. Los usuarios pueden proporcionar campos de formulario, cadenas de consulta, cookies de cliente y valores del entorno del navegador en la aplicación, como cadenas de proxy de usuario y. Direcciones IP, etc.
La validación de entrada débil generalmente brinda oportunidades para ataques de inyección. Los siguientes son métodos comunes de ataque que utilizan validación de entrada débil o ninguna validación de entrada.
Inyección de SQL. Si utiliza valores de entrada del usuario para construir dinámicamente declaraciones SQL, la base de datos puede ejecutar declaraciones SQL ofensivas y dañinas.
Los ataques de secuencias de comandos entre sitios aprovechan las vulnerabilidades de validación de la página web para inyectar secuencias de comandos del lado del cliente. Estos códigos luego se envían a la computadora cliente confiable y el navegador los interpreta y ejecuta. El navegador no tiene forma de saber que el código es dañino.
Acceso no autorizado a archivos Si su código acepta entradas de la persona que llama, un usuario malintencionado puede ver las operaciones de sus archivos y acceder a archivos protegidos o usar su código para inyectar datos ilegales.
Nota: Los ataques de inyección se pueden realizar mediante conexiones HTTP o HTTPS Secure Socket Layer (SSL) no se pueden utilizar para evitar ataques.
Los métodos de validación de entrada comunes se resumen a continuación. Debe realizar la validación en todos los lugares donde se requiere entrada a través de la red. , como cuadros de texto y otros campos de entrada de formulario, parámetros de cadena de consulta, cookies, variables del lado del servidor y parámetros de métodos de red. Tenga en cuenta que la estrategia de filtrado solo debe permitir la entrada correcta y rechazar la entrada ilegal. Esto se debe a que definir la estrategia de entrada correcta es. mejor que filtrar todo. Es más fácil detectar entradas ilegales, pero generalmente es difícil incluir todas las entradas ilegales.
Verifique el contenido de la entrada a través de los siguientes aspectos:
Restricciones. Verifique que la entrada sea del tipo, longitud de caracteres, formato y rango correctos. Se pueden aplicar controles de validación de ASP.NET para restringir la entrada de control del servidor. Se pueden usar expresiones regulares y reglas de validación personalizadas para restringir la entrada de otras fuentes.
Rechazar. Detectar entradas de datos dañinas conocidas y rechazarlas.
Filtrado. A veces querrás filtrar aquellas partes de la entrada del usuario que plantean riesgos de seguridad. Por ejemplo, si tu aplicación permite entradas de formato libre, como campos de notas, permitirás ciertas etiquetas HTML seguras como <b>, <i. > y otras etiquetas HTML.
Resumen de pasos
Proteja su aplicación ASP.NET de ataques de inyección siguiendo estos pasos:
Paso 1. Utilice la verificación de solicitudes de ASP.NET.
Paso 2. Restringir la entrada.
Paso 3. Codifique la salida no segura.
Paso 4. Utilice parámetros de comando para declaraciones de consulta SQL.
Paso 5. Verifique que la información de error de ASP.NET no se filtre al cliente.
Los siguientes capítulos analizarán estos pasos en detalle.
Paso 1. Utilice la validación de solicitudes de ASP.NET.
De forma predeterminada, la validación de solicitudes de ASP.NET 1.1 y 2.0 verifica si los datos enviados al servidor contienen elementos de marcado HTML y caracteres reservados. de ingresar scripts en el programa La validación de la solicitud se comparará con una lista de cadenas potencialmente amenazantes y, si se encuentra una excepción, generará una excepción de tipo HttpRequestValidationException.
Puede hacer esto en su archivo web.config mediante < Agregar validarRequest=. "false" en el elemento páginas> o establezca ValidateRequest = "false" en el elemento @Pages de una página separada para deshabilitar esta función.
Si desea deshabilitar la validación de solicitudes, puede deshabilitarla solo en las páginas donde la necesita. Por ejemplo, si incluye un campo en la página del programa que acepta entradas en formato HTML,
asegúrese de que la función de validación de solicitudes esté activada en el archivo Machine.config
. La función de validación de solicitudes está habilitada de forma predeterminada en ASP.NET. Puede hacer esto en el archivo Machine.config.comments. Verá la siguiente configuración predeterminada.
<pages enableRequest = "true" ... />
Asegúrese de no haber modificado la configuración predeterminada en Machine.config de su servidor y en la aplicación Web. archivos de configuración
Pruebe la validación de solicitudes de ASP.NET
Puede probar el efecto de la validación de solicitudes. Cree una página ASP.NET y deshabilite la validación de solicitudes configurando ValidateRequest = "fasle" de la siguiente manera:
<%@ Idioma="C#" ValidateRequest="false" %>
<html>
<script runat="servidor">
void btnSubmit_Click (Remitente del objeto, EventArgs e)
{
// Si ValidateRequest es falso, se muestra 'hola'
// Si ValidateRequest es verdadero, entonces ASP.NET devuelve una excepción
Respuesta.Escribir(txtString.Text);
}
</script>
<cuerpo>
<formulario id="form1" runat="servidor">
<asp:TextBox id="txtString" runat="servidor"
Texto="<script>alerta('hola');</script>" />
<asp:Botón id="btnSubmit" runat="servidor" OnClick="btnSubmit_Click"
Texto="Enviar" />
</formulario>
</cuerpo>
</html>
Cuando ejecuta la página, se muestra "Hola" en un cuadro de mensaje porque el script en txtString es ejecutado y procesado por el navegador del cliente.
Si establece ValidateRequest = "true" o elimina el atributo de página ValidateRequest, ASP .NET solicita la validación. rechazará la entrada del script y arrojará un mensaje de error como el siguiente.
Se detectó un valor Request.Form potencialmente peligroso desde el cliente (txtString="<script>alert('hello").
Tenga cuidado de no confiar únicamente en la función de verificación de solicitudes, utilícela solo como método de guía para la verificación personalizada.
Paso 2. Restringir la entrada
Para restringir la entrada, utilice el siguiente método.
Utilice la validación de entrada del lado del servidor. No confíe en la validación del lado del cliente, ya que se puede omitir fácilmente. Utilice la validación del lado del cliente para reducir la cantidad de rebotes de páginas, mejorar el rendimiento y mejorar la experiencia del usuario.
Valide la longitud, el rango, el formato y el tipo de la entrada. Asegúrese de que el contenido de la entrada sea correcto y cumpla con los requisitos.
Utilice tipos de datos seguros. Especifique un tipo como Integer o Double para la entrada numérica. Especifique el tipo de datos Cadena para la entrada de caracteres. Especifique el tipo DateTime para la entrada de fecha y hora.
Para validar los campos de entrada de control HTML en un formulario, realice la validación en el código del lado del servidor. El uso del tipo de expresión regular Regex puede ayudar a restringir la entrada de caracteres. La siguiente sección describe cómo restringir variables de tipos de entrada comunes
.
Para validar campos de cadena como nombre, dirección, fax y número de certificado de nacimiento, utilice expresiones regulares.
Limita el rango aceptable de caracteres.
Habilite reglas de formato. Por ejemplo, los campos basados en patrones, como identificación fiscal, código postal y código postal, requieren patrones de caracteres específicos.
Verificar longitud.
Usar el control de validación de expresiones regulares (RegularExpresionValidator)
Para usar el control de validación de expresiones regulares, debe configurar el nombre del control que se verificará (ControlToValidate), la expresión de validación (ValidationExpression) y el mensaje de error (ErrorMessage). Para conocer la configuración de propiedades relacionadas, consulte el código. ejemplo a continuación.
<form id="WebForm" método="post" runat="servidor">
<asp:TextBox id="txtName" runat="servidor"></asp:TextBox>
<asp:RegularExpressionValidator id="nombreRegex" runat="servidor"
ControlToValidate="nombretxt"
ValidationExpression="^[a-zA-Z'.s]{1,40}$"
ErrorMessage="Nombre no válido">
</asp:regularexpressionvalidator>
</formulario>
En el código anterior, se utiliza una expresión regular para limitar el nombre de entrada a letras (se permiten letras mayúsculas y minúsculas), espacios, elipses de un solo nombre como O'Dell y puntos. Además, la longitud de los caracteres de entrada está limitada a 40 caracteres. Caracteres
Tenga en cuenta que el control de validación de expresiones regulares (RegularExpressionValidator) agregará automáticamente el signo de intercalación (^) y el signo de dólar ($) como delimitadores iniciales y finales. Si no los ha agregado en la expresión personalizada, es mejor agregarlos. Agregar delimitadores es solo para permitir que su expresión obtenga la parte de los datos que desea.
Use la clase de expresión regular (clase Regex)
si no está usando controles del lado del servidor (lo que significa que no puede usar controles de validación) o necesita otros. fuentes de campo de entrada distintas de los campos de formulario (como parámetros de cadena de consulta y cookies), puede usar una clase de expresión regular (clase Regex.
Use la clase de expresión regular
para importar el espacio de nombres System.Text.RegularExpressions agregando una declaración con el uso). prefijo.
Asegúrese de que la expresión regular contenga "^" y "$" (al principio de la cadena, al final de la cadena).
Llame al método IsMatch de la clase Regex. El siguiente es un ejemplo de código.
//Método de instancia:
Regex reg = new Regex(@"^[a-zA-Z'.s]{1,40}$");
Response.Write(reg.IsMatch(txtName.Text));
// Método estático:
if (!Regex.IsMatch(txtName.Text,@"^[a-zA-Z'.s]{1,40}$"))
{
// el nombre no coincide con la expresión
}
Si no puede almacenar en caché las expresiones regulares utilizadas con frecuencia, debe usar el método estático IsMatch para mejorar el rendimiento y evitar la creación innecesaria de objetos.
Validar campos numéricos
. En la mayoría de los casos, debe validar la entrada y los rangos numéricos. Usar controles del servidor para verificar la entrada y el rango de. campos numéricos, use el control RangeValidator. RangeValidator admite datos de moneda, fecha, entero, doble precisión y tipo de cadena.
Para usar el control RangeValidator, debe establecer el nombre del control (ControlToValidate), el tipo (Type) y el valor mínimo (MinimumValue). ), valor máximo (MaximumValue) y propiedades de mensaje de error (ErrorMessage). Aquí está el ejemplo de código:
<asp:Validador de rango
ID="Validador de rango1"
Runat="servidor"
ErrorMessage="Rango no válido. El número debe estar entre 0 y 255."
ControlToValidate="rango de entrada"
Valor máximo="255"
ValorMínimo="0" Tipo="Entero" />
Si no está utilizando un control de servidor, puede completar la verificación del rango de números convirtiendo el valor de entrada a un número entero y luego validándolo. Por ejemplo, para verificar si un número entero es legal, use el nuevo método Int32.TryParse proporcionado por ASP.NET 2.0 para convertir el valor de entrada al tipo de variable System.Int32. Este método devolverá falso si la conversión falla.
Int32i;
si (Int32.TryParse(txtInput.Text, fuera i) == falso)
{
//La conversión falló
}
Si está utilizando una versión anterior de ASP.NET, puede utilizar el método Int32.Parse o Convert.ToInt32 en un bloque try/catch y controlar la FormatException que se genera cuando falla la conversión.
El siguiente código de ejemplo demuestra cómo validar. de HTML El tipo y rango del tipo entero del cuadro de texto.
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(remitente del objeto, EventArgs e)
{
si (Request.RequestType == "POST")
{
ent i;
if (Int32.TryParse(Request.Form["integerTxt"], fuera i) == verdadero)
{
// TryParse devuelve verdadero si la conversión se realiza correctamente
si ((0 <= i && i <= 255) == verdadero)
{
Response.Write("Los datos de entrada son válidos.");
}
demás
Response.Write("Los datos de entrada están fuera de rango");
}
demás
Response.Write("Los datos de entrada no son un número entero");
}
}
</script>
<html>
<cuerpo>
<id de formulario="form1" acción="NumericInput.aspx" método="publicación">
<div>
Introduzca un número entero entre 0 y 255:
<nombre de entrada="integerTxt" tipo="texto" />
<nombre de entrada="Enviar" tipo="enviar" valor="enviar" />
</div>
</formulario>
</cuerpo>
</html>
Validación de campos de fecha
Debe verificar que los campos de fecha sean del tipo correcto. En la mayoría de los casos, también necesitará verificar su rango, como verificar si están en el futuro o en el pasado si está utilizando un control de servidor. para capturar un valor de entrada de fecha, y si desea que el valor esté dentro de un rango específico, puede usar el control de validación de rango (RangeValidator) y establecer su tipo permitido en el tipo de fecha. Este control le permite especificar un período de tiempo especial. configurando el momento de inicio. Si necesita usar la hora de hoy como referencia para verificar, como verificar si una hora es en el futuro o en el pasado, puede usar el control de validación CustomValidator.
El uso del control CustomValidator para validar una fecha requiere configurar las propiedades ControlToValidate y ErrorMessage y especificar un método de lógica de validación personalizado en el evento OnServerValidate. El siguiente es un código de muestra.
<%@ Page Language="C#" %>
<script runat="server">
void ValidateDateInFuture(fuente del objeto, argumentos ServerValidateEventArgs)
{
DateTime dt;
// Verifica que la fecha sea válida y que la fecha sea futura
if ((DateTime.TryParse(args.Value, out dt) == false) ||
(dt <= FechaHora.Hoy))
{
args.IsValid = falso;
}
}
</script>
<html>
<cuerpo>
<formulario id="form1" runat="servidor">
<div>
<asp:Label ID="Etiqueta1" Runat="servidor"
Texto="Fecha futura:"></asp:Label>
<asp:TextBox ID="futureDatetxt" Runat="servidor"></asp:TextBox>
<asp:Validador personalizado
ID="CustomValidator1" Runat="servidor"
ErrorMessage="Fecha no válida. Introduzca una fecha futura."
ControlToValidate="futuroDatetxt"
OnServerValidate="ValidarFechaEnFuture">
</asp:Validador personalizado>
<br />
<asp:ID de botón="enviarBtn" Runat="servidor" Texto="Enviar" />
</div>
</formulario>
</cuerpo>
</html>
Tenga en cuenta que el código anterior utiliza el método DateTime.TryParse, que es un nuevo método proporcionado por ASP.NET 2.0.
Para filtrar campos de texto libre
para filtrar la entrada, debe asegurarse de que la entrada no segura no se trate como código.
permite
al usuario Los datos en la base de datos compartida no se pueden leer. Primero debe filtrar los datos para que no sean peligrosos cuando se generan. Utilice el método HttpUtility.HtmlEncode para codificar primero el valor de entrada.
Agregue los siguientes campos al elemento de página @Page ValidateRequest = "false" para deshabilitar la validación de solicitudes de ASP.NET. Utilice el método HtmlEncode para codificar la cadena de entrada. Utilice el objeto StringBuilder y llame a su método Reemplazar para reemplazar el HTML en los caracteres. El siguiente código proporciona un ejemplo de este enfoque. Esta página deshabilita la validación de solicitudes de ASP.NET configurando ValidateRequest = "fasle". Su codificación HTML permite el uso de etiquetas <b> y <i> para mostrar un formato de texto simple. .
<%@ Page Language="C#" ValidateRequest="false"%>
<script runat="server">
void submitBtn_Click(remitente del objeto, EventArgs e)
{
// Codifica la entrada de cadena
StringBuilder sb = nuevo StringBuilder(
HttpUtility.HtmlEncode(htmlInputTxt.Text));
// Permitir selectivamente y <i>
sb.Replace("<b>", "<b>");
sb.Replace("</b>", "");
sb.Replace("<i>", "<i>");
sb.Replace("</i>", "");
Respuesta.Write(sb.ToString());
}
</script>
<html>
<cuerpo>
<formulario id="form1" runat="servidor">
<div>
<asp:TextBox ID="htmlInputTxt" Runat="servidor"
TextMode="MultiLine" Ancho="318px"
Altura="168px"></asp:TextBox>
<asp:ID del botón="submitBtn" Runat="servidor"
Texto="Enviar" OnClick="enviarBtn_Click" />
</div>
</formulario>
</cuerpo>
</html>
Validar el valor de la cadena de consulta
Validar la longitud, el rango, el formato y el tipo de una cadena de consulta. Normalmente, se utiliza una expresión regular combinada para realizar las siguientes tareas:
Restringir los valores de entrada Establecer comprobaciones de rango explícitas Especificar el tipo de entrada y convertirlo a ASP.NET. plataforma El siguiente tipo maneja cualquier excepción causada por conversiones de tipos. El siguiente ejemplo de código demuestra el uso de la clase Regex para validar la cadena de nombre pasada en la cadena de consulta.
void Page_Load (remitente del objeto, EventArgs e)
{
si (!System.Text.RegularExpressions.Regex.IsMatch(
Request.QueryString["Nombre"], @"^[a-zA-Z'.s]{1,40}$"))
Response.Write("Parámetro de nombre no válido");
demás
Response.Write("El nombre es " + Request.QueryString["Nombre"]);
}
Validar valores de cookies
El usuario puede modificar fácilmente los valores almacenados en cookies, como cadenas de consulta. También valide la longitud, el rango, el formato y el tipo de estos valores.
Valide
el archivo y las direcciones URL.
nombres, direcciones de archivos o rutas de almacenamiento de archivos, debe verificar que estén en el formato correcto y que apunten a una ubicación válida de acuerdo con la situación real de su programa. Si esta verificación falla, es posible que se le solicite acceso a su programa por error.
Verifique la ruta del archivo
enorden.
Para evitar que los usuarios exploten su programa para acceder a los archivos, evite que acepte archivos o rutas de archivos ingresadas mediante código escrito por el usuario. Por ejemplo:
si acepta nombres de archivos de entrada, use el sistema. Método .IO.Path.GetFileName para obtener el nombre completo del archivo. Si es necesario, acepta una ruta de archivo de entrada y usa System.IO.Path.GetFullPath para obtener la ruta completa del archivo. Utilice el método MapPath para evitar la asignación entre aplicaciones. .
Si usa el método MapPath para asignar un directorio virtual proporcionado a un directorio físico en el servidor, use una versión sobrecargada del método Request.MapPath con un parámetro bool para evitar el mapeo entre aplicaciones. Aquí se muestra un código de muestra para esta técnica:
intentar
{
cadena mappedPath = Request.MapPath( inputPath.Text,
Solicitud.ApplicationPath, falso);
}
captura (HttpException)
{
// Se intentó realizar un mapeo entre aplicaciones
}
El último parámetro falso evitará el mapeo entre aplicaciones. Esto significa que los usuarios no pueden usar la sintaxis "..." para proporcionar una ruta ilegal que no esté dentro del directorio virtual que especificó.
Si usa controles de servidor, puede usar el método Control.MapPathSecure para obtener la dirección de directorio real correspondiente al directorio virtual.
El método Control.MapPathSecure genera una excepción HttpException al acceder a un archivo no autorizado. Para obtener más información, consulte la introducción al método Control.MapPathSecure en la documentación de .NET Framework.
Uso de la seguridad de acceso al código para limitar la entrada y salida de archivos
Los administradores pueden limitar la capacidad de un programa para leer y escribir archivos en el directorio virtual donde reside estableciendo su credibilidad en "media". El mecanismo de seguridad del código .NET garantiza que el programa no tenga ningún derecho de acceso a archivos fuera del directorio virtual donde se encuentra.
Para establecer el nivel de confianza de una aplicación en "medio", puede agregar:
<nivel de confianza = "Medio". />
Verificar URL
Puede utilizar expresiones regulares como las siguientes para hacer coincidir las URL
^(?:http|https|ftp)://[a-zA-Z0-9 .-]+(?::d. {1,5})?(?:[A-Za-z0-9.;:@&=+$,? /]|%u[0-9A-Fa- f]{4}|%[0-9A-Fa-f]{2})*$
Esto solo restringe el formato de entrada y no verifica si es aceptable en la aplicación dentro del alcance de su aplicación. Debe verificarlo. es válido dentro del contexto de su aplicación. Por ejemplo, ¿su aplicación se comunica con el servidor que usted especifica?
Paso 3. Codifique código no seguro
Si ingresa texto en una página web, use el método HttpUtility.HtmlEncode para codificarlo. Si el texto proviene de la entrada del usuario, una base de datos o un archivo local, asegúrese de hacer esto siempre.
Del mismo modo, si escribe una URL que contiene caracteres no seguros porque provienen de bases de datos, etc., para contenido ingresado por el usuario. Método HttpUtility.UrlEncode para codificar
Para evitar la codificación antes de almacenar los datos, lo que puede dañar los datos almacenados, asegúrese de codificarlos lo más tarde posible al mostrarlos.
Utilice HtmlEncode Para una codificación de salida insegura,
HtmlEncode reemplaza las etiquetas HTML. con cadenas de texto especiales para representar estos símbolos y evita que el navegador los interprete como etiquetas HTML. Por ejemplo, "<" se reemplaza por < " (dos puntos) y se reemplaza por " Estas etiquetas se muestran como texto inofensivo.
<%@ Page Language="C#" ValidateRequest="false" %>
<script runat="servidor">
void submitBtn_Click (remitente del objeto, EventArgs e)
{
Respuesta.Write(HttpUtility.HtmlEncode(inputTxt.Text));
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<cuerpo>
<formulario id="form1" runat="servidor">
<div>
<asp:TextBox ID="inputTxt" Runat="servidor"
TextMode="MultiLine" Ancho="382px" Alto="152px">
</asp:Cuadro de texto>
<asp:ID de botón="enviarBtn" Runat="servidor" Texto="Enviar"
OnClick="enviarBtn_Click" />
</div>
</formulario>
</cuerpo>
</html>
Para ver el efecto de la codificación HTML, cree un directorio virtual y coloque los archivos antes mencionados en él, ejecute esta página, ingrese algún código HTML en el cuadro de texto y haga clic en el botón enviar. Por ejemplo, la siguiente entrada se muestra como normal. text.
Ejecute el script y diga hola <script>alert('hello');</script>
Si elimina la llamada al método HtmlEncode y simplemente ingresa el contenido del texto, el navegador ejecutará el código y mostrará un cuadro emergente.
Usar el método UrlEncode no es seguro Codificar la dirección URL
Si necesita obtener los parámetros de la URL con la parte de entrada del usuario, lo que puede traer ciertos riesgos de seguridad, use el método HttpUtility.UrlEncode para codificar la cadena de dirección
.
Paso4.
SQL La declaración utiliza el método de parámetro de comando
Para evitar ataques de inyección, utilice el método de parámetro SQL. La colección de parámetros proporciona detección de tipo y longitud. Si utiliza la colección de parámetros, el contenido de entrada se tratará como un. valor de texto y la base de datos no se ejecutará. Un beneficio adicional de usar el método de conjunto de parámetros es que puede limitar estrictamente el tipo y la longitud de la entrada. Se activará una excepción
al llamar a un procedimiento almacenado, use el conjunto de parámetros
a continuación. El fragmento de código muestra un ejemplo del uso de conjuntos de parámetros al llamar a un procedimiento almacenado.
SqlDataAdapter myCommand = nuevo SqlDataAdapter("AuthorLogin",
miConexión);
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
Parámetro SqlParameter = myCommand.SelectCommand.Parameters.Add(
"@LoginId", SqlDbType.VarChar, 11);
parm.Value = Iniciar sesión.Texto;
Utilice conjuntos de parámetros al crear sus propias declaraciones SQL.
Si no puede utilizar procedimientos almacenados, aún puede utilizar conjuntos de parámetros; consulte el código siguiente.
SqlDataAdapter myCommand = nuevo SqlDataAdapter(
"SELECCIONE au_lname, au_fname DE Autores DONDE au_id = @au_id", myConnection);
Parámetro SQLParameter = myCommand.SelectCommand.Parameters.Add(
"@au_id", SqlDbType.VarChar, 11);
Parm.Value = Iniciar sesión.Texto;
Para obtener más información sobre cómo prevenir ataques de inyección SQL, consulte Cómo: Protegerse de la inyección SQL en ASP.NET
Paso 5. Para verificar que los mensajes de error de ASP.NET no se devuelvan al cliente,
puede utilizar el elemento <customErrors>. Para configurar el cliente, el mecanismo de detección de errores del programa debe devolver mensajes de error generales al cliente.
Confirme que ha cambiado el atributo de modo en web.config a "remoteOnly". El siguiente es un ejemplo
. "remoteOnly">
En Después de instalar un programa ASP.NET, puede especificar la página de mensaje de error del cliente de la siguiente manera.
<customErrors mode = "on" defaultRedirect = "YourErrorPage.htm">
Para obtener recursos adicionales, consulte los temas relacionados:
Cómo utilizar expresiones regulares para restringir la entrada en ASP.NET
Prevenir ataques de inyección SQL
y prevenir ataques de secuencias de comandos entre sitios.
PD: Finalmente terminé de leerlo. Estoy muy cansado. Me tomó casi tres días. De hecho, estas oraciones son muy simples si las miras. Esta es la primera vez que hago una traducción. Perdóname si la traducción no es buena, gracias.