SQLインジェクションはmysqli_multi_queryを使用しないと機能しません

ノミクロン

SQLインジェクションの例を作成しようとしていますが、mysqli_multi_queryに変更しない限り、MySQLは毎回2番目のクエリを拒否しています。

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="dummyDorm">
        <label>Name: </label>
        <input type="text" name="name"><br>
        <input type="submit" value="Submit">
    </form>

    <?php 
        if($_SERVER["REQUEST_METHOD"] == "POST")
        {
            $name = $_POST['name'];
            $conn = mysqli_connect("localhost", "root", "", "testDB");
            if (mysqli_connect_errno()){
                echo "failed to connect" . mysqli_connect_error();
                die();
            }
            else
            {

                $sql = "SELECT * FROM users WHERE name = '{$name}'";
                var_dump($sql);
                if (mysqli_query($conn, $sql))
                {
                    echo "Success";
                } 
                else {
                    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
                }

                mysqli_close($conn);
            }

        }
    ?>

フォームは実際には何もしません。SQLインジェクションを使用してデータを編集できることを示したいだけです。「DROPTABLEtestTable」と入力してインジェクションを実行したいと思います。私のMySQLは次のようになります。

DROP DATABASE IF EXISTS testDB;
CREATE DATABASE testDB;
USE testDB;

CREATE TABLE users
(
    userID INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255)
)engine=innodb;

CREATE TABLE testTable
(
    test VARCHAR(10)
)engine=innodb;

INSERT INTO users VALUES(null, "user01");

注射に入るとき: '; DROP TABLEtestTable-

これは出力されます:エラー:SELECT * FROM users WHERE name = ''; DROP TABLE testTable-'SQL構文にエラーがあります。1行目の「DROPTABLEtestTable-」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

私はチュートリアルを続けており、MySQLi_queryを使用しており、正常に機能しますが、インジェクションを実行するには、チュートリアルをMysqli_multi_queryに変更する必要があります。

ありがとう

ビルカーウィン

mysqli_query()マルチクエリを許可しないのは事実ですそのためにはmysqli_multi_query()が必要であり、その関数の使用を控えれば、DROP TABLEの例のように、複数のクエリの実行に依存するSQLインジェクション攻撃から安全です。

ただし、SQLインジェクションは、DROPTABLE以外の種類のいたずらを引き起こす可能性があります。

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

表のすべての行を読み取ります。

?name=x' OR 'x'='x

別の表を読む:

?name=x' UNION ALL SELECT ... FROM othertable WHERE 'x'='x

サービス拒否攻撃を実行し、1兆行の一時テーブルでデータベースサーバーを強制終了します。

?name IN (SELECT 1 FROM othertable CROSS JOIN othertable CROSS JOIN othertable CROSS JOIN othertable CROSS JOIN othertable CROSS JOIN othertable CROSS JOIN othertable) AND 'x'='x

SQLインジェクションは悪意のある攻撃である必要はありません。正当な文字列を無邪気に使用すると、意図しないSQL構文が生成される可能性があります。

?name=O'Reilly

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

mysqli_prepare()のマニュアル、またはPHPでSQLインジェクションを防ぐにはどうすればよいかなどの一般的なStackOverflowの質問の完全な例を参照してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

2つの列にmysqli_multi_queryを使用すると、順序が正しく機能しません

分類Dev

GetFullPathNameAを使用したDllインジェクションが機能していませんか?

分類Dev

SQL-インジェクションが機能しない

分類Dev

javascriptインジェクションが正常に機能していません

分類Dev

mysqli_multi_queryは何もしていません

分類Dev

TestExecutionListenerを使用すると、Springテストインジェクションが機能しない

分類Dev

mysqli_multi_queryを使用し、データベースリンクを開いたままにする

分類Dev

SessionScopedマネージドBeanインジェクションが機能していません

分類Dev

Oracle SQLインジェクション、デュアルからユーザーを選択が機能していません

分類Dev

ジオロケーションgetCurrentPosition()とwatchPosition()は安全でないオリジンでは機能しません

分類Dev

PHPSQL-インジェクションが機能しない

分類Dev

SqlParameterはテーブル名を許可しません-SQLインジェクション攻撃のない他のオプション?

分類Dev

コードインジェクションは、.Net2.xのMSCorLibでは機能しません

分類Dev

SQLインジェクションが機能しないのはなぜですか?

分類Dev

RegisterApiControllers拡張メソッドを使用する場合、プロパティインジェクションは機能しません

分類Dev

odoo 10 javascriptウィジェットが機能しない:クライアントアクション 'petstore.homepage'が見つかりませんでした

分類Dev

Hibernate OneToMany FetchType.LAZYは、コレクションにアクセスしないと機能しませんか?

分類Dev

Roboguiceを使用したFactoryでのAndroid支援インジェクションが機能しない

分類Dev

[既存のAndroidStudioプロジェクトを開く]オプションは、新しくインストールしたAndroidStudioでは機能しません

分類Dev

SQLインジェクションパラメータが私のページで機能していません

分類Dev

作業コピー '<プロジェクト名>' はファイルをコミットできませんでした - ヘルパー アプリケーションと通信できませんでした - ソリューションが機能していません

分類Dev

maxRequestLengthは、マシン構成を変更しないと機能しません

分類Dev

JAX-RS実装としてJerseyを使用したWASLibertyのRESTリソースでCDIインジェクションが機能しない

分類Dev

SQLインジェクションを理解しようとしています

分類Dev

jQueryはテキストを取得しますチェックされたラジオオプションの値が機能していません

分類Dev

Odoo10 Javascriptウィジェットアクションが機能しない:ClientWidgetは関数ではありません

分類Dev

msbuildを使用してasp.netWebプロジェクトを公開することはできませんが、vsのワンクリックソリューションを使用すると機能します

分類Dev

バインドとバインド解除を使用してアニメーションが完了するまで2回目のクリックが発生しないようにしたいのですが、機能しません

分類Dev

SQLをコントローラーアクションに混在させると、SQLが機能しません

Related 関連記事

  1. 1

    2つの列にmysqli_multi_queryを使用すると、順序が正しく機能しません

  2. 2

    GetFullPathNameAを使用したDllインジェクションが機能していませんか?

  3. 3

    SQL-インジェクションが機能しない

  4. 4

    javascriptインジェクションが正常に機能していません

  5. 5

    mysqli_multi_queryは何もしていません

  6. 6

    TestExecutionListenerを使用すると、Springテストインジェクションが機能しない

  7. 7

    mysqli_multi_queryを使用し、データベースリンクを開いたままにする

  8. 8

    SessionScopedマネージドBeanインジェクションが機能していません

  9. 9

    Oracle SQLインジェクション、デュアルからユーザーを選択が機能していません

  10. 10

    ジオロケーションgetCurrentPosition()とwatchPosition()は安全でないオリジンでは機能しません

  11. 11

    PHPSQL-インジェクションが機能しない

  12. 12

    SqlParameterはテーブル名を許可しません-SQLインジェクション攻撃のない他のオプション?

  13. 13

    コードインジェクションは、.Net2.xのMSCorLibでは機能しません

  14. 14

    SQLインジェクションが機能しないのはなぜですか?

  15. 15

    RegisterApiControllers拡張メソッドを使用する場合、プロパティインジェクションは機能しません

  16. 16

    odoo 10 javascriptウィジェットが機能しない:クライアントアクション 'petstore.homepage'が見つかりませんでした

  17. 17

    Hibernate OneToMany FetchType.LAZYは、コレクションにアクセスしないと機能しませんか?

  18. 18

    Roboguiceを使用したFactoryでのAndroid支援インジェクションが機能しない

  19. 19

    [既存のAndroidStudioプロジェクトを開く]オプションは、新しくインストールしたAndroidStudioでは機能しません

  20. 20

    SQLインジェクションパラメータが私のページで機能していません

  21. 21

    作業コピー '<プロジェクト名>' はファイルをコミットできませんでした - ヘルパー アプリケーションと通信できませんでした - ソリューションが機能していません

  22. 22

    maxRequestLengthは、マシン構成を変更しないと機能しません

  23. 23

    JAX-RS実装としてJerseyを使用したWASLibertyのRESTリソースでCDIインジェクションが機能しない

  24. 24

    SQLインジェクションを理解しようとしています

  25. 25

    jQueryはテキストを取得しますチェックされたラジオオプションの値が機能していません

  26. 26

    Odoo10 Javascriptウィジェットアクションが機能しない:ClientWidgetは関数ではありません

  27. 27

    msbuildを使用してasp.netWebプロジェクトを公開することはできませんが、vsのワンクリックソリューションを使用すると機能します

  28. 28

    バインドとバインド解除を使用してアニメーションが完了するまで2回目のクリックが発生しないようにしたいのですが、機能しません

  29. 29

    SQLをコントローラーアクションに混在させると、SQLが機能しません

ホットタグ

アーカイブ