vulnerabilidad ser reales puede posible mas inyección inyecciones inyeccion injection ejemplos comunes casos sql sql-server c#-4.0 sql-injection

ser - Seguridad de la inyección de SQL



sql injection owasp (3)

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["techconn"].ToString()); SqlCommand com = new SqlCommand("select * from hs where ac between''" + TextBox1.Text + "''and ''" + TextBox2.Text + "'' and em=''" + DropDownList1.SelectedItem.Text.ToString() + "''", con); DataTable dt = new DataTable(); con.Open(); SqlDataAdapter sqlDa = new SqlDataAdapter(com); sqlDa.Fill(dt); if (dt.Rows.Count > 0) { GridView1.DataSource = dt; GridView1.DataBind(); } else { GridView1.Visible = false; } con.Close();

¿Este código está a salvo de la inyección de SQL?

De lo contrario, corrija este código de forma segura contra la inyección de SQL.

Estoy usando SQL Server 2008.


En resumen, la respuesta es no. Siempre debe usar parámetros en sus consultas.

SqlCommand com = new SqlCommand("select * from hs where ac between @ac1 and @ac2 and em=@em", con);

A continuación, agrega los parámetros a su objeto SqlCommand (com).


Sí, su código es bastante propenso a los problemas, no solo a los ataques de inyección sql. Pruebe lo siguiente:

public DataTable GetData(string textbox1, string textbox2, string dropdown) { DataTable result = null; string connString = null; if (ConfigurationManager.ConnectionStrings["techconn"] != null) connString = ConfigurationManager.ConnectionStrings["techconn"].ConnectionString; if (!string.IsNullOrEmpty(connString)) using (SqlConnection con = new SqlConnection(connString)) { con.Open(); using (SqlCommand cmd = con.CreateCommand()) { cmd.CommandText = "select * from hs where (ac between @a and @b) and em = @c"; cmd.Parameters.AddWithValue("@a", textbox1); cmd.Parameters.AddWithValue("@b", textbox2); cmd.Parameters.AddWithValue("@c", dropdown); using (SqlDataAdapter da = new SqlDataAdapter(cmd)) { result = new DataTable(); da.Fill(result); } } } return result; }

Pégalo en tu código y úsalo

DataTable dt = GetData(TextBox1.Text, TextBox2.Text, DropDownList1.SelectedItem.Text.ToString()); if (dt != null && dt.Rows.Count > 0) { GridView1.DataSource = dt; GridView1.DataBind(); } else { GridView1.Visible = false; }

Pruébalo también.


SI utiliza una referencia directa de cuadro de texto a su consulta sql, nunca será segura para la inyección de SQL. Cualquier usuario final puede pasar valores de inyección a su cuadro de texto y se inyectará.

Nunca use elementos de IU directamente en su SQL, puede probar la siguiente línea de CÓDIGO

SqlConnection conn = new SqlConnection(_connectionString); conn.Open(); string s = "select * from hs where ac between @TextBoxOnevaluevariable and @TextBoxTwovaluevariable and em=@DropdownSelectedTextVariable"; SqlCommand cmd = new SqlCommand(s); cmd.Parameters.Add("@TextBoxOnevaluevariable", Texbox1.Text); cmd.Parameters.Add("@TextBoxTwovaluevariable", Texbox2.Text); cmd.Parameters.Add("@DropdownSelectedTextVariable",DropDownList1.SelectedItem.Text.ToString()); SqlDataReader reader = cmd.ExecuteReader();