j'ai lu beaucoup de choses sur les injections SQL ces derniers temps et je sais un SqlParameter
n'empêchera pas des injections sûr, mais est un paramètre de table aussi sûr qu'un seul paramètre?de sécurité C# SQL DataTable comme paramètre
quelques exemples de code non compilé non testé pour la clarification:
... Est-ce
SQL:
CREATE PROCEDURE dbo.InsertSingle
@Name nvarchar(max),
@Phone nvarchar(max)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO FooBar.dbo.SomeTable
VALUES(@Name, @Phone)
END
GO
C#:
foreach(User u in Users)
{
Connection.Open();
SqlCommand com = Connection.CreateCommand();
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "dbo.InsertSingle";
SqlParameter p = new SqlParameter("@Name", u.Name);
com.Parameters.Add(p);
p = new SqlParameter("@Phone", u.Phone);
com.Parameters.Add(p);
com.ExecuteScalar();
}
aussi sûr que cela?
SQL:
CREATE PROCEDURE dbo.InsertBunch
@ValuesAsTable dbo.ValuesAsTableType READONLY
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO FooBar.dbo.SomeTable
SELECT *
FROM @ValuesAsTable
END
GO
C#:
DataTable valuesAsTable = Users.GetSomeInsertData();
Connection.Open();
SqlCommand com = Connection.CreateCommand();
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "dbo.InsertBunch";
SqlParameter p = new SqlParameter("@valuesAsTable", valuesAdTable);
p.SqlDbType = SqlDbType.Structured;
p.TypeName = "dbo.ValuesAsTableType";
com.Parameters.Add(p);
com.ExecuteScalar();
J'ai vraiment essayé de chercher, mais je ne peux pas trouver la bonne entrée. Quelqu'un peut-il me relier dans la bonne direction?
Merci à l'avance
Vous avez déclaré un type sur la table déjà. Si vous voulez que ce soit encore plus fort, passez les noms des champs au lieu de 'select * 'et utilisez' WITH SCHEMABINDING' –