小编Nan*_*a A的帖子

SQL Server - 在处理传递给存储过程的动态 WHERE 子句时如何防止 SQL 注入

鉴于以下存储过程,我能否在提供的附加WHERE条件下防止 SQL 注入?

CREATE PROCEDURE [dbo].[ProtectDynamicWhereClause]
   (@TableName varchar(50),
    @OldestRecordDate varchar(15),
    @WhereCondition varchar(250) = NULL)
AS
BEGIN
    -- Protect the table name from SQL Injection.
    DECLARE @TableNameClean varchar(150) = QUOTENAME(@TableName)

    DECLARE @sql nvarchar(4000)
    SET @sql = 
            N'
            SELECT * FROM ' + 'dbo.' + @TableNameClean
            + ' WHERE EntryAge > DATEDIFF(year, @OldestRecordDate, GETDATE()) '

    IF (@WhereCondition IS NOT NULL)
    BEGIN
        SET @sql = @sql + ' AND ' + @WhereCondition
    END               

    EXEC  sp_executesql @sql, N'@TableNameClean varchar(50), @OldestRecordDate varchar(15)', 
                                @TableNameClean …
Run Code Online (Sandbox Code Playgroud)

security sql-server parameter

4
推荐指数
1
解决办法
1794
查看次数

标签 统计

parameter ×1

security ×1

sql-server ×1