Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Алгоритъм за избягване на SQL инжектиране на MSSQL сървър от C# код?

Не е необходим алгоритъм - просто не използвайте конкатенация на низове за изграждане на SQL изрази. Вместо това използвайте колекцията SqlCommand.Parameters. Това прави цялото необходимо екраниране на стойности (като замяна на ' с '' ) и гарантира, че командата ще бъде безопасна, защото някой друг (т.е. Microsoft) е извършил цялото тестване.

напр. извикване на съхранена процедура:

using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand("MySprocName", connection))
{
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}

Тази техника работи и за вградени SQL изрази, напр.

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();
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какъв е смисълът на първоначалния каталог в низ за връзка на SQL Server?

  2. Как да копирате запис в SQL таблица, но да замените уникалния идентификатор на новия ред?

  3. Избройте всички външни ключове в таблица в SQL Server

  4. Как да коригирате „Отказът на ALTER TABLE SWITCH е неуспешен“ Msg 4982 (SQL Server)

  5. Инсталирайте SQL Server 2016