Maison > base de données > tutoriel mysql > le corps du texte

Comment implémenter la troncature des caractères longs dans MySQL

WBOY
Libérer: 2023-06-03 11:37:12
avant
1594 Les gens l'ont consulté

La troncature des caractères longs MySQL, également connue sous le nom de « troncature de colonne SQL », a été proposée par le chercheur en sécurité Stefan Esser en août 2008.

Il existe une option sql_mode dans un paramètre de MySQL. Lorsque sql_mode est défini par défaut, c'est-à-dire lorsque l'option STRICT_ALL_TABLES n'est pas activée (MySQLsql_mode est par défaut), MySQL vous demandera uniquement d'insérer. une valeur trop longue, un avertissement et non une erreur, ce qui peut entraîner des problèmes de troncature.

Créez une nouvelle table pour les tests. La structure de la table est la suivante (MySQL5.1) :

CREATE TABLE USERS(
id int(11) NOT NULL, //长度为7
username varchar(7)NOT NULL,
password varchar(12)NOT NULL , 
)
Copier après la connexion

Insérez respectivement les instructions SQL suivantes (messages d'invite d'injection).

①Insérez une instruction SQL normale.

mysql> insert into users(id,username,password)values(1,'admin','admin');//成功插入,无警告,无错误
 
Query OK,1 row affected(0.00 sec)
Copier après la connexion

②Insérez la mauvaise instruction SQL. À ce stade, il y a trois espaces à droite de "admin" et la longueur est 8, ce qui a dépassé la longueur spécifiée d'origine.

mysql> insert into users(id,username,password)values(2,'admin       ','admin');
//成功插入,一个警告
Query OK,1 row affected,1 warning(0.00 sec)
Copier après la connexion

③La mauvaise instruction SQL a été insérée et la longueur a dépassé la longueur spécifiée d'origine.

mysql> insert into users(id,username,password) values(3,'admin    x','admin');
//成功插入,一个警告
Query OK,1 row affected,1 warning(0.00 sec)
Copier après la connexion

MySQL indique que les trois instructions ont été insérées dans la base de données, mais les deux dernières instructions ont généré des avertissements. Vous pouvez confirmer s'il a été inséré dans la base de données en exécutant une instruction SQL.

mysql> select username from users;
Copier après la connexion

Vous pouvez voir que les trois données ont été insérées dans la base de données, mais les valeurs ont changé. À ce stade, la longueur est obtenue grâce à la longueur pour déterminer la longueur de la valeur. .

mysql> select length(username)from users where id =1 ;
Copier après la connexion

On peut constater que la longueur des deuxième et troisième données est de 7, qui est la longueur spécifiée de la colonne. On peut voir que par défaut, si les données dépassent la longueur par défaut de. la colonne, MySQL la tronquera.

Mais comment peut-on l'attaquer ainsi ?

Vous le saurez si vous interrogez l'utilisateur dont le nom d'utilisateur est 'admin'.

mysql> select username from users where username='admin';
Copier après la connexion

Seul l'utilisateur nommé admin est interrogé, mais les deux autres utilisateurs administrateur avec des longueurs incohérentes sont également interrogés, ce qui entraînera des problèmes de sécurité. Par exemple, il existe une connexion administrateur qui est jugée comme ceci. , l'instruction est la suivante :

$sql = "select count(*) from users where username='admin' and password='*******;
Copier après la connexion

Même si l'instruction SQL ne présente pas de vulnérabilité d'injection, l'attaquant peut toujours se connecter à la page de gestion. En supposant que le nom d'utilisateur de connexion de l'administrateur est admin, l'attaquant n'a alors qu'à enregistrer un utilisateur « admin » pour accéder facilement à la page de gestion du backend. Le célèbre WordPress a été attaqué de cette manière.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!