Les paramètres de la table SQL Server 2008 sont-ils vulnérables aux attaques par injection SQL?
-
07-07-2019 - |
Question
J'examinais les paramètres table-value dans SQL Server 2008 et j'ai découvert qu'en passant un tel paramètre à une procédure stockée, une requête telle que celle-ci est envoyée au serveur de base de données:
declare @p1 dbo.MyTypeName
insert into @p1 values(N'row1col1',N'row1col2')
insert into @p1 values(N'row2col1',N'row2col2')
insert into @p1 values(N'row3col1',N'row3col2')
insert into @p1 values(N'row4col1',N'row4col2')
insert into @p1 values(N'row5col1',N'row5col2')
exec StoredProcedureName @MyParam=@p1
Ma question est la suivante: quel est le degré de sécurité par rapport aux attaques par injection SQL, étant donné que les instructions insert ne sont pas paramétrées? J’ai tenté l’attaque la plus triviale contre elle, et les citations ont été correctement échappées, mais est-ce que quelqu'un a déjà effectué un test exhaustif ou y at-il autre chose qui pourrait me protéger?
La solution
Vous n'avez pas à vous soucier des attaques par injection SQL avec les TVP.
Cela ressemble à un groupe de singleton appelle mais ce n'est pas. Comme mon collègue Keith Elmore de Microsoft CSS a souligné out, c'est juste la convention utilisée pour permettre aux données d'être affichées ou copié / collé dans une fenêtre de requête et courir. Le TVP n’est pas réellement mis en œuvre de cette façon, les rangées sont traversé comme une masse insérer - mais cela peut avoir conduit à cette impression que c'est simple inserts.