代码之家  ›  专栏  ›  技术社区  ›  Zack Stone Uemura

如何防止批量插入的动态SQL中的SQL注入?

  •  0
  • Zack Stone Uemura  · 技术社区  · 7 年前

    Bulk insert using stored procedure ).

    DECLARE @sql NVARCHAR(4000) = 'BULK INSERT TblValues FROM ''' + @FileName + ''' WITH ( FIELDTERMINATOR ='','', ROWTERMINATOR =''\n'' )';
    EXEC(@sql);
    

    但是如何避免SQL注入?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Dan Guzman    7 年前

    你可以用 QUOTENAME 要将文件名括在单引号中,请执行以下操作:

    DECLARE @sql NVARCHAR(4000) = 'BULK INSERT TblValues FROM ' + QUOTENAME(@FileName,'''') + ' WITH ( FIELDTERMINATOR ='','', ROWTERMINATOR =''\n'' )';
    EXEC (@sql);
    
        2
  •  1
  •   S3S    7 年前

    一种方法是检索文件名,而不是传入。。。类似于

    DECLARE @fileLocation VARCHAR(128) = '\\some\folder\location'
    
    IF OBJECT_ID('tempdb..#FileNames') IS NOT NULL DROP TABLE #FileNames
    CREATE TABLE #FileNames(
        id int IDENTITY(1,1)
        ,subdirectory nvarchar(512)
        ,depth int
        ,isfile bit)
    INSERT #FileNames(subdirectory,depth,isfile)
    EXEC xp_dirtree @fileLocation, 1, 1