Prevención de ataques de inyección SQL: ¿por dónde empiezo?

Estoy buscando hacer mi sitio seguro contra ataques de inyección SQL. ¿Alguien tiene buenos enlaces para hacer que el sitio sea seguro contra este tipo de ataques en un sitio ASP.NET (c #, formularios web)?

EDITAR:

Debo señalar que estoy usando el Entity Framework

La primera y mejor línea de defensa es no usar SQL dynamic .

Siempre use consultas parametrizadas .

Eche un vistazo a la página OWASP sobre inyección de SQL .

Vea estos recursos:

  • Cómo: proteger de la inyección de SQL en ASP.NET (MSDN)

  • Seguridad de datos: Detenga los ataques de inyección SQL antes de que lo detengan

  • Ataques de inyección SQL y algunos consejos sobre cómo prevenirlos

  • Evitar la inyección de SQL en ASP.NET

Básicamente, como ya señaló Oded, se reduce a detener la concatenación de las sentencias de SQL, especialmente si eso involucra datos ingresados ​​por los usuarios en cuadros de texto, y utiliza consultas parametrizadas en ADO.NET.

Echa un vistazo aquí:

Bobby Tables: una guía para prevenir la inyección de SQL

Esta es una gran serie que cubre las 10 principales amenazas a la seguridad de las aplicaciones web y cómo mitigarlas mediante ASP.net: http://www.troyhunt.com/2010/05/owasp-top-10-for-net-developers -parte-1.html

Es fácil. La mayoría de los virus de inyección provienen de un código que se ve así:

var myQuery="SELECT something FROM somewhere WHERE somefield="+userSuppliedData; //execute myQuery against db //now suppose userSuppliedData=="'';DROP TABLE somewhere;" 

Si está pasando declaraciones sql de esta manera, está en riesgo. Considere usar un ORM o consultas parametrizadas.

Use procedimientos almacenados con parámetros y evite SQL en línea siempre que sea posible …

obtener datos a través de parámetros como:

 string str = "insert into CustomerHistoryDD(logo,ceoPicture,ceoProfilePicture,coverPhoto,employee1,employee2,employee3,employee4) values(@param1,@param2,@param3,@param4,@param5,@param6,@param7,@param8)"; SqlCommand cmd = new SqlCommand(str, con); con.Open(); cmd.Parameters.AddWithValue("@param1", link); cmd.Parameters.AddWithValue("@param2", link1); cmd.Parameters.AddWithValue("@param3", link2); cmd.Parameters.AddWithValue("@param4", link3); cmd.Parameters.AddWithValue("@param5", tb_Emp1.Text); cmd.Parameters.AddWithValue("@param6", tb_Emp2.Text); cmd.Parameters.AddWithValue("@param7", tb_Emp3.Text); cmd.Parameters.AddWithValue("@param8", tb_Emp4.Text); cmd.ExecuteNonQuery(); con.Close(); lbl_msg.Text = "Data Saved Successfully";