Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP Какъв е наборът от символи по подразбиране за pdo mysql

Опцията character_set_client е това, което MySQL използва за набора от знаци от заявки и данни, които клиентът изпраща.

По подразбиране е utf8 в MySQL 5.5, 5.6 и 5.7 и utf8mb4 в 8.0.

Може също да се променя глобално във вашия файл с опции my.cnf или на сесия чрез ЗАДАДЕТЕ ИМЕНА изявление.

Добре е да зададете опцията изрично, когато се свързвате, така че да не се налага да приемате нейната стойност по подразбиране.

Отново вашия коментар:

Боя се, че бъркате два различни случая на SQL инжекция. Съществува риск при използване на тези специфични пет набора символи, но той не е свързан с SQL инжектиране от втори ред.

Рискът от набор от знаци се дължи на някои многобайтови набори от знаци. Обичайно е да вмъкнете обратна наклонена черта, за да избегнете буквален цитат. Но в някои набори от знаци обратната наклонена черта байт се слива в предходния байт, образувайки многобайтов символ. Това оставя цитатът неекраниран.

SQL инжектирането от втори ред е напълно различно. Може да се случи с всеки набор от знаци. Това е, когато нападателят добавя данни към вашата база данни чрез законни средства, като попълване на формуляр. Вмъкването на данните се обработва без грешка. Но стойностите, които те вмъкват, съдържат синтаксис, предназначен да използва някои по-късни SQL заявки.

Той разчита на разработчиците, които вярват, че данните, които вече са запазени безопасно в тяхната база данни, са някак си „безопасни“ за използване без подходяща параметризация.

Пример за 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'";

Ако името съдържа буквален апостроф, това ще обърка втората заявка в този пример.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL SELECT ранг на потребител (повече от x и по-малко от y)

  2. Защо използването на IN(...) при избор на индексирани полета ще убие производителността на заявката SELECT?

  3. Извикване на функция-член find() на необект при вмъкване на данни с помощта на PHP mySQL simpleHTMLDOM

  4. Как да направя функцията mysqli connect?

  5. laravel eloquent връзка от конструктора на заявки