SQL インジェクションのサンプルを作成しようとしていますが、mysqli_multi_query に変更しない限り、MySQL は 2 番目のクエリを毎回拒否します。
リーリーこのフォームは実際には何もしません。SQL インジェクションを使用してデータを編集できることを示したいだけです。 「DROP TABLE testTable」を入力したインジェクションを行いたいと考えています。私の MySQL は次のようになります:
リーリーインジェクション入力時: ';テーブルテストテーブルを削除 --
出力は次のとおりです。 エラー: SELECT * FROM users WHERE name = ''; テーブル テスト テーブルを削除します --' SQL 構文にエラーがあります。MySQL サーバーのバージョンのマニュアルを確認して、行 1 "DROP TABLE testTable --"
付近で使用する正しい構文を確認してください。チュートリアルを続行すると、MySQLi_query が使用され、正常に動作しましたが、注入を完了するには、Mysqli_multi_query に変更する必要がありました。
###ありがとう###
Indeed
mysqli_query()
複数のクエリは許可されません。これを行うには、mysqli_multi_query() が必要です。この関数の使用を回避すると、DROP TABLE の例など、複数のクエリの実行に依存する SQL インジェクション攻撃から保護されます。ただし、SQL インジェクションは、DROP TABLE に加えて、他の種類の害を引き起こす可能性もあります。
SQL クエリのロジックを制御できる追加パラメーターを使用して、PHP ページの URL にアクセスできます:
テーブル内のすべての行を読み取ります:
リーリー別の表を読む:
リーリーサービス拒否攻撃を実行して、1兆行の一時テーブルを使用してデータベース サーバーを停止します:
リーリーSQL インジェクションは必ずしも悪意のある攻撃であるとは限りません。これは正当な文字列の意図しない使用である可能性があり、予期しない SQL 構文が発生します:
リーリーSQL インジェクションの修正はよく知られており、簡単です: パラメータ化されたクエリを使用します。
完全な例については、 mysqli_prepare() マニュアル またはスタック オーバーフローの人気の質問 ( PHP で SQL インジェクションを防ぐには?) を確認してください。