首页 > 解决方案 > SQL 存储过程中将用户输入附加到表并防止 sql 注入的正确方法

问题描述

我在 SQL 中有一个表,其varchar(max)字段基本上是一个日志,由最终用户使用自由格式条目(来自网页)进行更新。

如何防止 SQL 注入?或者也许它已经是了?

create proc stored_procedure
@input varchar(max)
as

update mytable
set logfield = logfield + '  ' + @input;

看起来可能没问题(SQL Server 2012)。但是我能读到的所有内容都坚持认为即使在参数化存储过程中也不应该连接用户输入。

是否有不同的方法来附加用户输入?

标签: sqlsql-serversql-injection

解决方案


SQL 注入只会发生在动态 SQL 上(无论是在 SQL Server 端还是在应用程序端)。您的代码不易受到 SQL 注入的攻击。但是,您正在更新表中的所有行。您应该使用 WHERE 子句限制更新。


推荐阅读