Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 16201|Respuesta: 0

[ASP.NET] ASP.NET de la inyección Anti-SQL

[Copiar enlace]
Publicado en 17/4/2015 13:06:50 | | |

1. ¿Qué es la inyección SQL?
     La llamada inyección SQL consiste en insertar comandos SQL en el formulario para enviar o introducir la cadena de consulta del nombre de dominio o la solicitud de página, y finalmente engañar al servidor para que ejecute algunos comandos SQL maliciosos. Al enviar parámetros para construir sentencias SQL ingeniosas, puedes obtener con éxito los datos deseados.

2. SQL tipo de inyección
Específicamente, la inyección SQL puede dividirse en cinco categorías: inyección de números, inyección de caracteres, inyección de búsqueda (como), inyección en la inyección y inyección de conexión de oraciones.
Desde el punto de vista de la aplicación, se debe prestar especial atención a la inyección SQL en IP, búsqueda, eliminación por lotes y transferencia de base de datos a base de datos.

3. Cómo inyectarse

Veamos un ejemplo típico
SqlCommand cmd = new SqlCommand("SELECT * FROM PE_USERS WHERE UserName = '"
2+ Nombre de usuario + "' Y contraseña de usuario = '" + Contraseña + "'", conn);

Como no hay validación para UserName y Password, si UserName="admin' OR 1=1--"
La sentencia SQL ejecutada se convierte en:

SELECCIONA * DE PE_USERS DONDE UserName='admin' O 1=1—' Y UserPassword=''

Esto da lugar a la inyección de SQL, y las condiciones siempre son válidas, por lo que puedes iniciar sesión con éxito sin contraseña.



4. Cómo prevenir la inyección SQL

1. Filtrar o convertir cadenas sospechosas

      Se evita la inyección SQL escribiendo funciones que filtran o convierten cadenas peligrosas, y luego usan GLOBAL.ASAX o reescriben instancias de contexto

     Aquí tienes un ejemplo

bool estático público SqlFilter2(cadena InText)
2  {
3 string word="and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
4 if(InText==null)
5 devuelve false;
6 de Foreach (cadena I en Word). Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 retornan verdadero;
11    }
12   }
13 devuelve falso;
14  }


2. Global.asax

Vacío protegido Application_BeginRequest(Object sender, EventArgs e)
2  {
3 // Recorriendo los parámetros del Post, excepto para dominios ocultos
4 de la hoja (la cadena i en esto). Request.Form)
5   {
6 si(i=="__VIEWSTATE")continúan;
7 esto.goErr(esto). Request.Form.ToString());   
8   }
9 // Recorre el parámetro Get.
10 de foraje (la cadena i en esto). Request.QueryString)
11   {
12 esto.goErr(esto). Request.QueryString.ToString());   
13   }
14  }
vacío privado goErr(string tm)
2  {
3 if(WLCW. Extend.CValidity.SqlFilter2(tm))
4 esto. Response.end()
5  }

Ventajas: Este aspecto es utilizado por la mayoría de los programadores principiantes para evitar la inyección de SQL, y parece funcionar bien para evitar la inyección en la mayoría de los casos.

Desventajas: 1. Filtrará algunos caracteres que no se usaron originalmente para inyecciones, causando problemas inesperados. Por ejemplo, si el nombre de un miembro del foro contiene los mismos caracteres que los caracteres filtrados, esto causará algunos problemas y dificultades inesperadas.

        2. Se requiere filtrado o conversión cada vez, lo que reduce la eficiencia del programa

2. Utilizar procedimientos almacenados para consultas paramétricas

El principal propósito de la inyección SQL es ejecutar comandos maliciosos en la base de datos enviando código SQL malicioso. Por lo tanto, mientras los comandos SQL se procesen antes de su ejecución, la inyección SQL puede evitarse eficazmente. Las consultas parametrizadas pueden prevenir eficazmente la inyección SQL.

Ejemplo

const string strSql = "SELECT * FROM [PE_Users] WHERE UserName = @UserName";
Parámetros parms = nuevos Parameters ("@UserName", DbType.String, usuarioName);

Existe un parámetro @UserName arriba, usando el objeto Prarmeter, a través del cual el parámetro se añade al objeto Comando,
Esto te da una consulta parametrizada.
Como se ha descrito anteriormente, ADO.NET envía la siguiente instrucción SQL a SQL Server:

Exec sp_executesql N 'select * de [pe_users] donde username=@username ',N
'@username nvarchar(20) ',@username=N 'nombre'

SQL Server reemplaza @username por la cadena "name" antes de ejecutar la consulta.
Supongamos que tienes las siguientes entradas:

'unión select @@version, null, null—

La sentencia SQL generada se ve así:

Exec sp_executesql N 'select * de [pe_users] donde username=@username ',N
'@username nvarchar(20) ',@username=N ''' unión selección @@version,null,null--'

Puedes ver que ADO.NET escapa de la entrada.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Copiar código


DbTye o SqlDbType pueden ser una variedad de tipos de datos.
Puedes elegir según tu tipo de datos.
En algunos lugares, también puede usarse para especificar la longitud del parámetro: int size. Esto también previene eficazmente los desbordamientos de bases de datos y las notas SQL
Posibilidad de participar.
Ventajas: Previene eficazmente la inyección SQL.
Desventajas: Algunos lugares no pueden aplicarse, como en.

3. Lista blanca

Descripción:
Algunos rangos de parámetros conocidos pueden gestionarse en forma de listas blancas, lo que puede evitar la inyección y consultas SQL
Incorrecto, por ejemplo: ordenar por + nombre de columna, cuando el nombre de la columna se pasa en forma de parámetro, se puede formular una lista blanca para juzgar primero el parámetro
si el número está en la lista blanca, y luego consulta, de lo contrario se procesará incorrectamente.
Ventajas: seguro y fiable
Desventajas: Pequeña gama de aplicaciones




Anterior:El cuadro de texto solo permite introducir números
Próximo:asp.net Editor de texto (FCKeditor)
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com