さまざまな言語の.NET、Java、およびその他の高レベルのデータベースAPIは、プレーンテキストコマンドをデータベースサーバーに送信するのではなく、プリペアドステートメントおよびパラメータバインディングと呼ばれる手法を提供することがよくあります。私が知りたいのは、次のようなステートメントを実行するとどうなるかです。
SqlCommand cmd = new SqlCommand("GetMemberByID");
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter("@ID", memberID);
para.DbType = DbType.Integer;
cmd.Parameters.Add(param);
これがベストプラクティスであることを私は知っています。SQLインジェクション攻撃はこの方法で最小限に抑えられます。しかし、これらのステートメントを実行すると、内部で正確に何が起こりますか?最終結果はまだSQLセーフ文字列ですか?そうでない場合、最終結果はどうなりますか?そして、これはSQLインジェクション攻撃を防ぐのに十分ですか?