sql >> データベース >  >> RDS >> Mysql

MySQLでSQLインジェクションを実際に引き起こすことができる文字はどれですか?

    mysql_real_escape_string()<からの以下の行を考慮してください/ a> マニュアル:

    MySQLでのSQLインジェクションは、これらの特殊文字だけでは不可能です:\b \0 \n \r \t \Z

    ただし、文字列リテラルのマニュアルには次のように記載されていますが、指定された(またはされていない)理由はSQLインジェクションとは関係ありません:

    さらに、簡単なテストでは、天候に関係なく、上記の特殊文字がエスケープされているかどうかに関係なく、MySQLは同じ結果をもたらしました。言い換えれば、MySQLは気にしませんでした:

    $query_sql = "SELECT * FROM `user` WHERE user = '$user'";
    

    上記のクエリは、以下に示すように、上記の文字のエスケープされていないバージョンとエスケープされたバージョンでも同様に機能しました:

    $user = chr(8);     // Back Space
    $user = chr(0);     // Null char
    $user = chr(13);    // Carriage Return
    $user = chr(9);     // Horizontal Tab
    $user = chr(26);    // Substitute
    $user = chr(92) .chr(8);    // Escaped Back Space
    $user = chr(92) .chr(0);    // Escaped Null char
    $user = chr(92) .chr(13);   // Escaped Carriage Return
    $user = chr(92) .chr(9);    // Escaped Horizontal Tab
    $user = chr(92) .chr(26);   // Escaped Substitute
    

    簡単なテストで使用されるテストテーブルとデータ:

    -- Table Structure
    
    CREATE TABLE IF NOT EXISTS `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `user` varchar(10) CHARACTER SET utf8 NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    
    -- Table Data
    
    INSERT INTO `user` ( `user` ) VALUES
    ( char( '8' ) ),
    ( char( '0' ) ),
    ( char( '10' ) ),
    ( char( '13' ) ),
    ( char( '9' ) ),
    ( char( '26' ) );
    


    1. IS DISTINCTFROMとISNOTDISTINCT FROMを書き直す方法は?

    2. MySQL IFNULL ELSE

    3. MySQLでテーブルをピボットする方法

    4. 2019データベースのトレンド– SQLとNoSQL、トップデータベース、単一データベースと複数データベースの使用