C# の odbc ドライバーへの OdbcConnection へのパラメーター化された SQL クエリを実行する際に問題があります。列名とテーブル名は Web GUI から設定できるので、インジェクションから保護したい
using (OdbcCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT ? FROM ?";
command.CommandTimeout = SynchTimeout;
command.CommandType = CommandType.Text;
command.Parameters.Add(new OdbcParameter(string.Empty, "User"));
command.Parameters.Add(new OdbcParameter(string.Empty, "TableName"));
OdbcDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// TODO: Do something clever..
}
}
columnname "User" に odcparameters を使用しても問題ないようです。しかし、プレースホルダー「?」を使用してテーブル名をパラメーターとして追加すると、次のエラーが表示されます: ERROR [HY000] [Microsoft][ODBC Excel Driver] パラメータ 'Pa_RaM002' がテーブル名が必要な場所に指定されました。
OdbcParameterにできない場合、この状況でテーブル名を安全に渡す方法を知っている人はいますか?