ホームページ  >  記事  >  データベース  >  MySQL で長い文字の切り捨てを実装する方法

MySQL で長い文字の切り捨てを実装する方法

WBOY
WBOY転載
2023-06-03 11:37:121588ブラウズ

MySQL の超長い文字の切り捨て (「SQL-Column-Truncation」とも呼ばれます) は、2008 年 8 月にセキュリティ研究者の Stefan Esser によって提案されました。

MySQL の設定には sql_mode オプションがあります。sql_mode がデフォルトに設定されている場合、つまり STRICT_ALL_TABLES オプションがオンになっていない場合 (MySQLsql_mode のデフォルトはデフォルト)、MySQL は挿入時に警告のみを表示します。長すぎる値。エラーではなく、切り捨ての問題が発生する可能性があります。

テスト用に新しいテーブルを作成します。テーブル構造は次のとおりです (MySQL5.1):

CREATE TABLE USERS(
id int(11) NOT NULL, //长度为7
username varchar(7)NOT NULL,
password varchar(12)NOT NULL , 
)

次の SQL ステートメント (プロンプト メッセージの挿入) をそれぞれ挿入します。

①通常のSQL文を挿入します。

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

② 間違った SQL 文を挿入すると、「admin」の右側にスペースが 3 つあり、長さが 8 となり、本来の指定長を超えています。

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

③間違った SQL ステートメントを挿入したため、長さが元の指定長を超えています。

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

MySQL は、3 つのステートメントがすべてデータベースに挿入されたことを示すプロンプトを表示しますが、最後の 2 つのステートメントでは警告が生成されました。 SQL文を実行することでデータベースに挿入されたかどうかを確認できます。

mysql> select username from users;

3つのデータがすべてデータベースに挿入されましたが、値が変更されていることがわかります。このとき、lengthで長さを取得して値の長さを決定します。

mysql> select length(username)from users where id =1 ;

2 番目と 3 番目のデータの長さは、指定された列の長さである 7 であることがわかります。データがデフォルトの列の長さを超えると、デフォルトで, MySQL は切り詰められます。

しかし、どうしてこれが攻撃になるのでしょうか?

ユーザー名が「admin」であるユーザーをクエリするとわかります。

mysql> select username from users where username='admin';

admin という名前のユーザーのみが照会されますが、長さが一貫していない他の 2 人の管理者ユーザーも照会されるため、セキュリティ上の問題が発生します。たとえば、次のように判断される管理者ログインがあります。文は次のとおりです。

$sql = "select count(*) from users where username='admin' and password='*******;

SQL 文にインジェクションの脆弱性がない場合でも、攻撃者が管理ページにログインする可能性があります。管理者ログインのユーザー名が admin であれば、攻撃者は「admin」ユーザーを登録するだけでバックエンドの管理ページに簡単にアクセスでき、有名な WordPress がこの方法で攻撃を受けています。

以上がMySQL で長い文字の切り捨てを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。