私はSQLインジェクションに関するエッセイを持っています(それが何であるか-どのように行われ、どのように回避できるか)。私はそれが何であり、どのように機能するかを理解しています。しかし、データベースでインジェクションを再現できないようです。
ビデオ クラブ用の mysql ワークベンチを使用して、非常に単純なデータベースを作成しました。映画 - 在庫 - 価格 - 顧客のショッピング カートなど。また、映画を追加できる非常にシンプルな HTML ページも作成しました。在庫があるものを表示します。
そのため、映画の名前を入力する txt フィールドがあり、この特定の映画に関する情報が返されます。
入力した名前を取得してクエリを作成するコードは::
$name = $_POST ['txtfld'];
$sql = ("SELECT * FROM test_table WHERE adad = '$Mname'");
if ($result = mysqli_query($dbc,$sql))
入力として「a」を指定すると、すべてが期待どおりに機能します。pk が [a] に等しいエントリを 1 つ取得します。クエリは :: SELECT * FROM test_table WHERE adad= 'a' になります。
次のステップは、テーブル全体またはそこからランダムなエントリを取得できるかどうかを確認することでした。入力は次のとおりです: [ a' OR 'x'='x ] クエリは :: SELECT * FROM test_table where adad = ' a' OR 'x' = 'x ' すべてが期待どおりに機能し、テーブルの内容全体が返されます。
次のステップは、2 番目のクエリを挿入することでした。test_table を更新しようとしました。入力は :: [ a;' でした update test_table set asda = '123456' where adad = 'u ] クエリは :: SELECT * FROM test_table WHERE adad= ' a;' になります。UPDATE test_table SET asda ='123456' WHERE adad = 'u '
構文エラーが発生したので、 [ a; 'を含むと考えられるすべての構文を試しました。UPDATE test_table SET asda = '123456' where adad = 'u';# ] . それらのどれも機能しませんでした。
問題は、構文エラーが発生する理由が本当にわかりません。
上記の入力に対して、mysqli_error はこのメッセージを返します
error: You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'update test_table set asda =
'123456' where adad = 'u'' at line 1
挿入したエコーがこれを返す間
SELECT * FROM test_table WHERE adad = 'a;' UPDATE test_table SET asda = '123456' WHERE
adad = 'u'
エコーリターンに構文エラーは見られず、mysqli_error リターンの最後の 2 番目の [ ' ] 文字がどこから来たのかわかりません。
私が理解していることから、これはむしろ2番目のクエリの実行の失敗です(クエリが何であれ-ドロップ、挿入、更新)
私は何かが恋しいですか?
前もって感謝します。
マイケル。