如何在日志字符串中使用SQL参数防注入且尽量不改数据库结构?
解决日志表的SQL注入问题:参数化Logtext字段
你当前的代码里,Logtext是直接拼接进SQL语句的,这会让maliciousString里的恶意SQL代码被数据库执行,完全起不到防注入的作用。不用改数据库结构,只要把Logtext也改成参数化输入就行,具体改动如下:
Dim User as String = "busssard" Dim Logtext As String = "User performed modification " & maliciousString myCommand = sqlconnection.CreateCommand() ' 把原来拼接的Logtext换成参数@LogText myCommand.CommandText = "INSERT INTO dbo.Logging ([FK_User],[Change]) Values(@Username, @LogText)" myCommand.Parameters.AddWithValue("@Username", User) ' 给Logtext添加对应的参数 myCommand.Parameters.AddWithValue("@LogText", Logtext)
关键说明:
- 把SQL语句里的
'" & Logtext & "'替换成@LogText,彻底避免直接字符串拼接带来的注入风险 - 通过参数绑定,数据库会把
Logtext的内容当作纯文本处理,不会解析其中的SQL代码 - 这种方式完全不需要改动数据库表结构,只是调整了SQL语句的写法和参数绑定逻辑
如果你的Change字段是固定长度的字符串类型(比如varchar(255)),建议明确指定参数类型,避免隐式转换可能带来的问题,示例如下:
myCommand.Parameters.Add("@LogText", SqlDbType.VarChar, 255).Value = Logtext
内容的提问来源于stack exchange,提问作者busssard
相关产品推荐
相关产品推荐

