VB-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.

我的代码中有一个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.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有)选择此表中实际列的列表,并仅在列中替换有效的列。