検索

ホームページ  >  に質問  >  本文

SQL インジェクションを成功させるには、mysqli_multi_query の使用が重要です

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 に変更する必要がありました。

###ありがとう###
P粉925239921P粉925239921351日前477

全員に返信(1)返信します

  • P粉795311321

    P粉7953113212023-12-16 00:48:03

    Indeedmysqli_query()複数のクエリは許可されません。これを行うには、mysqli_multi_query() が必要です。この関数の使用を回避すると、DROP TABLE の例など、複数のクエリの実行に依存する SQL インジェクション攻撃から保護されます。

    ただし、SQL インジェクションは、DROP TABLE に加えて、他の種類の害を引き起こす可能性もあります。

    SQL クエリのロジックを制御できる追加パラメーターを使用して、PHP ページの URL にアクセスできます:

    テーブル内のすべての行を読み取ります:

    リーリー

    別の表を読む:

    リーリー

    サービス拒否攻撃を実行して、1兆行の一時テーブルを使用してデータベース サーバーを停止します:

    リーリー

    SQL インジェクションは必ずしも悪意のある攻撃であるとは限りません。これは正当な文字列の意図しない使用である可能性があり、予期しない SQL 構文が発生します:

    リーリー

    SQL インジェクションの修正はよく知られており、簡単です: パラメータ化されたクエリを使用します。

    完全な例については、 mysqli_prepare() マニュアル またはスタック オーバーフローの人気の質問 ( PHP で SQL インジェクションを防ぐには?) を確認してください。

    返事
    0
  • キャンセル返事