¿Cuál es la forma más segura de generar consultas SQL en C#, incluida la limpieza de la entrada del usuario para que esté a salvo de la inyección? Estoy buscando utilizar una solución simple que no necesite bibliotecas externas.Generar consultas SQL de forma segura en C#
Respuesta
Parámetros utilizar SQL:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter(v=vs.80).aspx
He aquí un ejemplo en C#
SqlCommand tCommand = new SqlCommand();
tCommand.Connection = new SqlConnection("YourConnectionString");
tCommand.CommandText = "UPDATE players SET name = @name, score = @score, active = @active WHERE jerseyNum = @jerseyNum";
tCommand.Parameters.Add(new SqlParameter("@name", System.Data.SqlDbType.VarChar).Value = "Smith, Steve");
tCommand.Parameters.Add(new SqlParameter("@score", System.Data.SqlDbType.Int).Value = "42");
tCommand.Parameters.Add(new SqlParameter("@active", System.Data.SqlDbType.Bit).Value = true);
tCommand.Parameters.Add(new SqlParameter("@jerseyNum", System.Data.SqlDbType.Int).Value = "99");
tCommand.ExecuteNonQuery();
Los parámetros SQL son una excelente manera de comenzar. Si la aplicación comienza a crecer y necesita realizar muchas llamadas SQL, probablemente sea hora de mirar LINQ o un ORM de algún tipo. – NickHeidke
Apruebo (y uso mucho personal LINQ-to-SQL), pero realmente no lo considero una solución simple (hay que entender la filosofía de DataContext para evitar algunos errores), pero como dije en los comentarios, hay algunos pequeños ayudantes para construir consultas parametrizadas que usaría en lugar de usar directamente las clases SqlClient. – Guillaume86
Este es amigo de la vieja escuela – Dilberted
La primera regla de oro es para asegurarse de que utiliza consultas/comandos parametrizados. Básicamente, no compile dinámicamente una cadena sql que incluya algo que el usuario haya ingresado en la página.
Si utiliza en ORM (EF, L2S, Nhib), esto generalmente se maneja en la mayoría de los casos porque la mayoría de ellos ejecuta consultas parametrizadas.
Parametrice sus consultas.
En caso si usted construye algunos TSQL que construye alguna otra TSQL dinámico - then use some described technique
¿Qué significa "parametrización significa
Sede, no usar algo como esto:
sqlCommand.CommandText = "select * from mytable where id = "+someVariable;
uso esto? :
sqlCommand.CommandText = "select * from mytable where id = @id";
sqlCommand.Parameters.AddWithValue("@id", someVariable);
¿Qué significa esto exactamente? –
Respuesta actualizada. –
Gracias, Oleg –
Un nombre propio para DBML es linq2sql o una versión avanzada se llama marco de entidad. Estas tecnologías son provistas por Microsoft y bien integradas con Visual Studio. No requiere bibliotecas adicionales.
productosBastante estables ..
La solución más simple es linq2sql .. No se escriben consultas SQL – Dilberted
¿Más simple? Me gusta esto. de usr en dc.Los usuarios se unen a ug in dc.UserGroups en usr.UserID es igual a ug.UserID join gr en dc.Group en ug.GroupID es igual a gr.PkID select new {usr, gr} –
Hacer uso de parametrizadas consultas.
Ejemplo simple.
var sql = "SELECT * FROM MyTable WHERE MyColumn = @Param1";
using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand(sql, connection))
{
command.Parameters.AddWithValue("@Param1", param1Value);
return command.ExecuteReader();
}
Ejemplo más detallado.
protected void btnGoodAddShipper_Click(object sender, EventArgs e)
{
string connStr = c
"Server=(local);Database=Northwind;Integrated Security=SSPI";
// this is good because all input becomes a
// parameter and not part of the SQL statement
string cmdStr =
"insert into Shippers (CompanyName, Phone) values (" +
"@CompanyName, @Phone)";
using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
{
// add parameters
cmd.Parameters.AddWithValue
("@CompanyName", txtCompanyName.Text);
cmd.Parameters.AddWithValue("@Phone", txtPhone.Text);
conn.Open();
cmd.ExecuteNonQuery();
}
}
En esencia no hacen esto
SqlCommand command = new SqlCommand(MyConnection);
command.CommandText = "Select * From MyTable Where MyColumn = '" + TextBox1.Text + "'"
...
hacer
SqlCommand command = new SqlCommand(MyConnection);
command.CommandText = "Select * From MyTable Where MyColumn = @MyValue";
command.Parameters.AddWithValue("MyValue",TextBox1.Text);
...
Básicamente no construir su comando SQL directamente desde la entrada del usuario.
Si usa un ORM, como EntityFrameworks/POCO, todas las consultas se realizan en el último formulario.
- 1. Generar números aleatorios de forma segura en Objective-C
- 2. cómo generar de forma segura una instrucción SQL como el uso de Python DB-API
- 3. Actualice un recuento (campo) de forma segura en SQL
- 4. La mejor forma de generar consultas LINQ dinámicas
- 5. Escapar valores en consultas SQL (C# con conector SQL)
- 6. crear consultas sql en C++/java?
- 7. uso de variables en las consultas SQL en asp.net (C#)
- 8. Forma segura de codificar un valor de cookie en C#
- 9. Forma correcta de generar números de orden en SQL Server
- 10. Es !! una forma segura de convertir a bool en C++?
- 11. Conversión de consultas personalizadas en SQL
- 12. Manejo de propiedades Cambiado de forma segura
- 13. experto-segura-informe-Plugin no generar segura report.html
- 14. Anidamiento de consultas en SQL
- 15. Significado de (+) en consultas SQL
- 16. Opciones para generar gráficos a partir de consultas de Oracle
- 17. Anular de forma segura las funciones virtuales de C++
- 18. Cómo escapar de forma segura una cadena de C++
- 19. Creador de consultas SQL
- 20. ¿Cómo generar de forma segura hashes SSHA256 o SSHA512 en PHP?
- 21. de consultas SQL para generar la matriz como la salida de la consulta de tabla relacionada en SQL Server
- 22. Detectar Windows de forma segura en Python
- 23. ¿Cómo podría escribirse este fragmento C de forma más segura?
- 24. Relaciones bidireccionales en consultas SQL
- 25. Generador de consultas SQL en rieles
- 26. SQL consultas parametrizadas en Android
- 27. Escapar consultas SQL en Codeigniter
- 28. La mejor forma de generar un flotante aleatorio en C#
- 29. Cómo incrementar de forma segura un contador en Entity Framework
- 30. Rieles anidadas consultas SQL
aproximadamente 1 archivo "bibliotecas externas" podría hacer eso muy simple, como Dapper o PetaPoco – Guillaume86