VB-MySQL编程中动态提供列名
我的代码中有一个MySQL查询:VB-MySQL编程中动态提供列名,mysql,vb.net,sql-injection,Mysql,Vb.net,Sql Injection,我的代码中有一个MySQL查询: Sub MySub(column_name As String) Dim sqlQueryString As String = "SELECT * FROM foo WHERE " & column_name & " IS NULL;" 假设我的SQL表由两列组成,列A和列B 我想传入“column_A”或“column_B”作为方法参数,但这使我对SQL注入非常开放。我研究了使用.Parameters.Add或.Parameters.
Sub MySub(column_name As String)
Dim sqlQueryString As String = "SELECT * FROM foo WHERE " & column_name & " IS NULL;"
假设我的SQL表由两列组成,列A和列B
我想传入“column_A”或“column_B”作为方法参数,但这使我对SQL注入非常开放。我研究了使用.Parameters.Add或.Parameters.AddWithValue传递值,但这会导致将“column_name”转换为字符串值而不是正确的列名(因为它将值封装在引号中,将其转换为字符串)。如何解决此问题?您可以首先使用
信息\u SCHEMA.columns
选择此表中实际列的列表,并仅在列中替换有效的列
i、 e.这一联系
运行此命令以获取表中的列列表
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'foo'
然后比较应用程序中SQL注入不会造成伤害的字符串。如果该列确实存在,则将其分入,否则退出要实现SQL Server函数
QUOTENAME
(假设这是SQL Server)。另请参见,您可以首先使用元数据ciew(假设MySQL有)选择此表中实际列的列表,并仅在列中替换有效的列。