0

TableNameとしてのMySqlParameterへの反応として、MySQLのConnector / NETライブラリは、次の方法でユーザー入力からのテーブル名をサポートしていないようです。

MySqlCommand cmd = new MySqlCommand("SELECT * FROM @table");
cmd.Parameters.AddWithValue("@table",TableNameFromUserInput);

そこで、別の方法を見つけようとしましたが、これを実行してくれるライブラリが見つかりませんでした。

これを手動で行う方法を検索したところ、言語に関係なく、すでに定義されているライブラリから「プリペアドステートメント」を使用するように指示されていないものは見つかりませんでした。

SQLについての私の限られた知識では、ユーザー入力の周りにバッククォート( `)を配置してから、バッククォートの入力をチェックするだけでよいと思いますが、確認したかったのです。

質問

MySQLコネクタがサポートしていない場合、ユーザー指定のテーブル名をSQL-Injectionからどのように保護しますか?

4

2 に答える 2

5

確認してください

TableNameFromUserInput

クエリを実行する前の既存のテーブルです。これにより、「テーブルが存在しません」などの他のエラーも防止されます。

于 2012-11-21T15:03:19.830 に答える
1

値のみをサポートしているため、プリペアドステートメントのパラメーターとしてtableNameおよびcolumnName )を追加することはできません。安全のために、tableNameを検証するコードを追加してください。

string tableName = "hello";
tableName = UDFunctionClean(tableName);
string query = String.Format("SELECT * FROM `{0}`", tableName);
MySqlCommand cmd = new MySqlCommand(query);
于 2012-11-21T15:02:09.410 に答える