Опцията 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'";
Ако името съдържа буквален апостроф, това ще обърка втората заявка в този пример.