ユーザーのログインとパスワードを保存するテーブルがあります。テスト用に、パスワードは極度の暗号化で保存されます。
たとえば、パスワード「one」は暗号化されています。
"[2hVFb>-@#+L4l!_N[1\\i=::3#n.-R$19Z[DgOKKk/X;81=h+Bor%3s:VS)q0-B]QX+%AQ6o` Vom##z=[\\od#ma*PT5\\)wU]{)J:I1JuZm$&?RQrrL{TSon`\"dGN\"fG[`%oSuohY4FVqPcmw%6EOU9bn\\B-4j]>4aTh /LV,;{Sm9`M%/x4.?y+2K4?-$-g0$^9AUqh.3UBZfdv0hF:zya|L&-\\wZh`\\Y=T2o8KHv0o>I0?+/xtdiCLWp,Y$= a>&rkj)n(+_-'AI->;|`4jfZq$\\;%|=/{C$lFvI0c%1yl>To&lWe8vBd%t+7%2QgU#s@O$Vh#l[JpO@ /sJNBT\"hFf;,y\"NLstOLz_Q/{BMPq9UTfC^YH6(o*Z'(v83ncoUr{$23ZlJN*KMn2W+'$BX;koh?fG[G3KhA+f/qJa{#PsbrxmOT_E=O4`[.u] \\tヨ zEkaH^`/iLApkzI!az^$MEW:-ihI>^v&onM?bWvNR%'|W[|K(KVUyL`KcQwA064pLwOjIPK:S[O1o>k'-x_QQE|B[vo1pL,%6v>Eb,Gf| *zxm?DVbkl;:Iii?4vo:KDPV@P7sPqy6xz>2>UUh,\\8{bDe05tW)\\ayH/:Ft/aA&k|]1x\"6j#NzHk_peGEXpwh6Y/93TCW9*'']U,/TmhQpr >+aBnhNHkH,LUi@Pn\"?rC;SO$aQumF;'7kENi$UaM\\EYUa:](E6'W*`bYMFFM{(3$a0oIGt((v|'!/"
これは私がログインを確認する方法です:
internal static bool LoginValidation(string login, string password)
{
using (MySqlCommand sql = new MySqlCommand(" select count(*) from user where login = @login and password = @password ", myConnection))
{
sql.Parameters.AddWithValue("@login", login);
sql.Parameters.AddWithValue("@password", password);
sql.Connection.Open();
return Convert.ToInt32(sql.ExecuteScalar()) > 0 ? true : false;
}
}
password は、暗号化されたバージョンのユーザーのパスワードを含む文字列です。上記のコードは、「パスワードに近いシンタックスが正しくありません」という結果になります。もちろん、「パスワード」パラメーターは期待どおりに解析されていません。MS SQL Server を使用していたとき、上記のコマンドはエラーなしで動作します。
このクエリを安全に実行するにはどうすればよいですか?
ラインも変えてみた
sql.Parameters.AddWithValue("@password", password);
に
sql.Parameters.Add("@password", MySqlDbType.VarChar).Value = password;
しかし、間違いなく、不正な構文例外が発生します。