vb.net – 我的用户可以注入我的动态sql吗?
发布时间:2020-12-17 00:33:06 所属栏目:大数据 来源:网络整理
导读:我是一名为内部用户编写的桌面开发人员,因此我并不担心恶意黑客,但我想知道在更新将在服务器上执行sql的值时是否有任何东西可以输入. 业务定义了他们的内容模式,我有一个CRUD应用程序,当模式更改时不必更改它们,因为验证详细信息是由表驱动的,而更新是使用动
我是一名为内部用户编写的桌面开发人员,因此我并不担心恶意黑客,但我想知道在更新将在服务器上执行sql的值时是否有任何东西可以输入.
业务定义了他们的内容模式,我有一个CRUD应用程序,当模式更改时不必更改它们,因为验证详细信息是由表驱动的,而更新是使用动态SQL.我必须在他们的数据条目中支持单引号,所以当他们输入它们时,我会在服务器上执行SQL之前将它们加倍.然而,从我读过的内容来看,这不足以阻止注射. 所以我的问题是,他们可以在自由格式文本字段中输入哪些文本可以更改服务器上的内容而不是存储为字面值? 基本上,我在运行时构建一个遵循模式的SQL语句: update table set field = value其中pkField = pkVal 使用这个VB.NET代码: Friend Function updateVal(ByVal newVal As String) As Integer Dim params As Collection Dim SQL As String Dim ret As Integer SQL = _updateSQL(newVal) params = New Collection params.Add(SQLClientAccess.instance.sqlParam("@SQL",DbType.String,SQL)) Try ret = SQLClientAccess.instance.execSP("usp_execSQL",params) Catch ex As Exception Throw New Exception(ex.Message) End Try Return ret End Function Private Function _updateSQL(ByVal newVal As String) As String Dim SQL As String Dim useDelimiter As Boolean = (_formatType = DisplaySet.formatTypes.text) Dim position As Integer = InStr(newVal,"'") Do Until position = 0 newVal = Left(newVal,position) + Mid(newVal,position) ' double embedded single quotes ' position = InStr(position + 2,newVal,"'") Loop If _formatType = DisplaySet.formatTypes.memo Then SQL = "declare @ptrval binary(16)" SQL = SQL & " select @ptrval = textptr(" & _fieldName & ")" SQL = SQL & " from " & _updateTableName & _PKWhereClauses SQL = SQL & " updatetext " & _updateTableName & "." & _fieldName & " @ptrval 0 null '" & newVal & "'" Else SQL = "Update " & _updateTableName & " set " & _fieldName & " = " If useDelimiter Then SQL = SQL & "'" End If SQL = SQL & newVal If useDelimiter Then SQL = SQL & "'" End If SQL = SQL & _PKWhereClauses End If Return SQL End Function 当我将文本字段更新为值时
它产生: Update caseFile set notes = 'Redmond''; drop table OrdersTable--' where guardianshipID = '001168-3' 并将值更新为他们输入的文字值. 他们还能输入什么来注入SQL? 同样,我并不担心有人想在他们的工作中破解服务器,但想知道如果他们不小心粘贴来自其他地方的文本并破坏某些东西. 谢谢.
假设你逃避字符串文字(你说你正在做的事情),你应该是安全的.我能想到的另一件事是,如果你使用基于unicode的字符集与数据库通信,请确保你发送的字符串在该编码中有效.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |