【发布时间】:2010-11-27 13:48:45
【问题描述】:
我正在一个类中构建一个搜索功能,供我们的几个 asp 页面使用。这个想法很简单,从用户那里获取一个搜索词并在数据库中查询该项目。目前我这样做是错误的,它很容易受到 SQL 注入攻击(如果出现问题,ELMAH 会在那里挽救一天):
Public Shared Function SearchByName(ByVal searchterm As String) As DataTable
SearchByName = New DataTable
Dim con As New OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings("OracleDB").ConnectionString)
Try
con.Open()
Dim SqlStr As String = "select ID_ELEMENT, ELEMENT_NAME from table_of_elements where upper(ELEMENT_NAME) like upper('%" & searchterm & "%')"
Dim cmd As New OracleCommand(SqlStr, con)
SearchByName.Load(cmd.ExecuteReader)
Catch ex As Exception
Elmah.ErrorSignal.FromCurrentContext().Raise(ex)
End Try
con.Close()
con.Dispose()
Return SearchByName
End Function
字符串连接不好。接下来你知道,Bobby Tables 破坏了我的系统。 现在,执行此操作的正确方法是通过将 :searchterm 放入字符串并添加以下行来创建适当的 oracle 变量:
cmd.Parameters.Add(New OracleParameter("SEARCHTERM", searchterm))
问题是因为我使用了 like 语句,我需要能够在搜索词的任一侧都有 %,而我似乎无法使用 '%:searchterm%' 来做到这一点,它只是给出ORA-01036 错误:非法变量名/编号。
我可以参数化,但我的灵活 like 语句仍然是其中的一部分吗?
【问题讨论】:
标签: asp.net vb.net oracleclient system.data.oracleclient ora-01036