Domanda

Sto creando un assembly in C # per MS SQL 2005. Questo assembly crea una procedura memorizzata ed esegue una query dinamica basata sui parametri passati nella procedura memorizzata.

Esiste una semplice funzione in C # per impedire l'iniezione SQL?

Ad esempio

string myQuery = "SELECT * FROM dbo.MyTable WHERE lastName = '" + injectionCheck(arg1) + "'";

A questa domanda è stata data risposta per la query standard ... ma in situazioni in cui non è possibile creare una query veramente dinamica cosa posso usare in C # per il controllo dell'iniezione?

Ad esempio, probabilmente non funzioneranno:

utilizzando @dbName;

SELEZIONA * DA @table

TASTO SIMMETRICO APERTO @keyName

etc

È stato utile?

Soluzione

Usa parametri associati:

SqlCommand cmd = new SqlCommand(myQuery, conn);
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 10, lastName);

Altri suggerimenti

Usa parametri ....

(Questo è già stato pubblicato spesso)

string myQuery = "SELECT * FROM myTable WHERE lastname = @p_name";

SqlCommand cmd = new SqlCommand();
cmd.CommandText = myQuery;
cmd.Parameters.Add ("@p_name", SqlDbType.Varchar).Value = "melp";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top