sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué siempre preferimos usar parámetros en sentencias SQL?

El uso de parámetros ayuda a prevenir ataques de inyección de SQL cuando la base de datos se usa junto con una interfaz de programa, como un programa de escritorio o un sitio web.

En su ejemplo, un usuario puede ejecutar código SQL directamente en su base de datos creando declaraciones en txtSalary .

Por ejemplo, si tuvieran que escribir 0 OR 1=1 , el SQL ejecutado sería

 SELECT empSalary from employee where salary = 0 or 1=1

por lo que se devolverían todos los sueldos.

Además, un usuario podría ejecutar comandos mucho peores contra su base de datos, incluida la eliminación Si escribieron 0; Drop Table employee :

SELECT empSalary from employee where salary = 0; Drop Table employee

La tabla employee luego se eliminaría.

En tu caso, parece que estás usando .NET. Usar parámetros es tan fácil como:

string sql = "SELECT empSalary from employee where salary = @salary";

using (SqlConnection connection = new SqlConnection(/* connection info */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
    var salaryParam = new SqlParameter("salary", SqlDbType.Money);
    salaryParam.Value = txtMoney.Text;

    command.Parameters.Add(salaryParam);
    var results = command.ExecuteReader();
}
Dim sql As String = "SELECT empSalary from employee where salary = @salary"
Using connection As New SqlConnection("connectionString")
    Using command As New SqlCommand(sql, connection)
        Dim salaryParam = New SqlParameter("salary", SqlDbType.Money)
        salaryParam.Value = txtMoney.Text

        command.Parameters.Add(salaryParam)

        Dim results = command.ExecuteReader()
    End Using
End Using

Editar 2016-4-25:

Según el comentario de George Stocker, cambié el código de muestra para no usar AddWithValue . Además, generalmente se recomienda envolver IDisposable s en using declaraciones.