You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在日志字符串中使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:20:33