私は最近、特定の顧客の秘密鍵を使用してデータを選択するプログラムに興味深いバグを発見しました。次の点を考慮してください。
SELECT `id` FROM (`customers`) WHERE `authenticationKey` = '#09209!ko2A-' LIMIT 1
キーはリクエスト時に提供され、クエリを実行する前に適切にサニタイズされます。ただし、キーの提供に失敗すると (前に取得する必要があります。無視してください)、次のようなクエリが生成されます。
SELECT `id` FROM (`customers`) WHERE `authenticationKey` = 0 LIMIT 1
customers
最初の例のように、適切な文字列、キーが格納されているにもかかわらず、テーブルから行を返します。
authenticationKey
-field のタイプはですVARCHAR(1024)
。
私の推測では、これは緩やかな比較と関係があると思います。この問題の原因と、それを適切に回避するにはどうすればよいですか?