sql >> Database >  >> RDS >> Mysql

PHP Wat is de standaard karakterset voor pdo mysql

De optie character_set_client is wat MySQL gebruikt voor de tekenset van query's en gegevens die de client verzendt.

De standaard is utf8 in MySQL 5.5, 5.6 en 5.7 en utf8mb4 in 8.0.

Het kan ook globaal worden gewijzigd in uw my.cnf-optiesbestand, of per sessie door een NAMEN INSTELLEN verklaring.

Het is goed om de optie expliciet in te stellen wanneer u verbinding maakt, zodat u niet de standaardwaarde hoeft aan te nemen.

Opnieuw uw opmerking:

Ik ben bang dat je twee verschillende gevallen van SQL-injectie door elkaar haalt. Er is een risico bij het gebruik van die specifieke vijf tekensets, maar het is niet gerelateerd aan SQL-injectie van de tweede orde.

Het tekensetrisico is te wijten aan sommige multi-byte tekensets. Het is gebruikelijk om een ​​backslash in te voegen om te ontsnappen aan een letterlijk aanhalingsteken. Maar in sommige tekensets wordt de backslash-byte samengevoegd met de voorgaande byte, waardoor een multi-byte-teken wordt gevormd. Dat laat het citaat niet ontsnappen.

Tweede-orde SQL-injectie is totaal anders. Het kan bij elke tekenset voorkomen. Dit is wanneer een aanvaller op legitieme wijze gegevens aan uw database toevoegt, zoals het invullen van een formulier. Het invoegen van de gegevens verloopt foutloos. Maar de waarden die ze invoegen bevatten syntaxis die is ontworpen om een ​​latere SQL-query te exploiteren.

Het is afhankelijk van ontwikkelaars die geloven dat gegevens die al veilig in hun database zijn opgeslagen, op de een of andere manier "veilig" zijn voor gebruik zonder de juiste parametrering.

Een voorbeeld van een tweede-orde SQL-injectie die louter per ongeluk in plaats van kwaadaardig is, kan zijn dat een persoon de achternaam "O'Reilly" heeft en de naam wordt gelezen door de code en gebruikt in een volgende zoekopdracht.

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

Als de naam een ​​letterlijke apostrof bevat, zou dit de tweede zoekopdracht in dat voorbeeld verpesten.




  1. Hoe de vervolgkeuzelijst te vernieuwen zonder paginavernieuwing?

  2. Verward over UPDLOCK, HOLDLOCK

  3. Stuur meerdere <select> elementen met jQuery POST

  4. Een opgeslagen procedure maken in SQL Server