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

PHPpdomysqlのデフォルトの文字セットは何ですか

    オプションcharacter_set_client これは、MySQLがクライアントが送信するクエリとデータの文字セットに使用するものです。

    デフォルトは、MySQL 5.5、5.6、および5.7ではutf8、8.0ではutf8mb4です。

    my.cnfオプションファイルでグローバルに変更することも、セッションごとに名前を設定 ステートメント。

    接続時にオプションを明示的に設定すると、デフォルト値を想定する必要がなくなります。

    コメントを再確認してください:

    SQLインジェクションの2つの異なるケースを混同しているのではないかと思います。これらの特定の5文字セットを使用する場合はリスクがありますが、2次SQLインジェクションとは関係ありません。

    文字セットのリスクは、いくつかのマルチバイト文字セットが原因です。リテラル引用文字をエスケープするために円記号を挿入するのが一般的です。ただし、一部の文字セットでは、バックスラッシュバイトが前のバイトにマージされ、マルチバイト文字を形成します。そのため、引用はエスケープされません。

    2次SQLインジェクションはまったく異なります。これは、任意の文字セットで発生する可能性があります。これは、攻撃者がフォームへの入力などの正当な手段でデータベースにデータを追加する場合です。データの挿入はエラーなしで処理されます。ただし、挿入される値には、後のSQLクエリを利用するように設計された構文が含まれています。

    これは、データベースにすでに安全に保存されているデータが、適切なパラメーター化なしで使用するのに何らかの形で「安全」であると開発者が信じていることに依存しています。

    悪意のあるものではなく単なる偶発的な2次SQLインジェクションの例としては、人の名前が「O'Reilly」であり、その名前がコードによって読み取られ、後続のクエリで使用される場合があります。

    $name = $db->query("SELECT last_name FROM people WHERE id = 123")->fetchColumn();
    $sql = "SELECT * FROM accounts WHERE account_owner_last_name = '$name'";
    

    名前に文字通りのアポストロフィが含まれていると、その例の2番目のクエリが台無しになります。




    1. MySQLビューは通常のクエリよりも高速ですか?

    2. MySQLデータベースを作成して特権を設定する方法

    3. SQL2005のPIVOT

    4. すべてのリモート接続を許可する、MySQL