我正试图使我的服务器注入证明,并有一个日志表,我存储人类可读的事件。是否有可能把一个sql参数在Logtext字符串?为了防止任何恶意输入来通过恶意字符串?
Dim User as String = "busssard"
Dim Logtext As String = "User performed modification " & maliciousString
myCommand = sqlconnection.CreateCommand()
myCommand.CommandText = "INSERT INTO dbo.Logging ([FK_User],[Change]) Values(@Username, '" & Logtext & "')"
myCommand.Parameters.AddWithValue("@Username",User)
有变通办法,但我不想改变太多在整个数据库结构..
完全不要使用AddWithValue
。使用Add
并ALWAYS指定具有一个列的大小。为了双方的价值观去做。设FK_User
为varchar(50)
, Change
为nvarchar(max)
:
myCommand.CommandText = "INSERT INTO dbo.Logging ([FK_User], [Change]) VALUES (@FK_User, @Change)"
myCommand.Parameters.Add("@FK_User", SqlDbType.VarChar, 50).Value = user
myCommand.Parameters.Add("@Change", SqlDbType.NVarChar, -1).Value = logText