MySQLのカラム切り捨て問題
2008年10月14日(火曜日)
MySQLのカラム切り捨て問題
MySQLのカラム切り捨て脆弱性 (rryu.sakura.ne.jp)。
こういうことですかね。
- MySQLを使用
- ユーザIDのカラム長は7文字で、一意性はない
- ユーザ登録時に、ユーザID入力欄に maxlength を指定しているものの、サーバ側では長さチェックを怠っている
……という感じのシステムがあり、ユーザbakeraが既に存在するとき、二重登録チェックはこんな感じになり……。
- 「bakera」というユーザを登録しようとすると、アプリケーションは WHERE ID='bakera' で検索して既存ユーザを見つけ出し、「ユーザは既に登録されています」というエラー
- 「bakera 」というユーザを登録しようとすると、アプリケーションは WHERE ID='bakera ' で検索。これは既存ユーザ bakera にヒットして「ユーザは既に登録されています」というエラー
- 「bakera a」というユーザを登録しようとすると、アプリケーションは WHERE ID='bakera a' で検索。これはヒットしないので、「bakera a」は登録できてしまう。IDの列は7文字なので、IDのカラムには「bakera 」が格納される
「bakera 」は登録できないのに、「bakera a」を登録すると「bakera 」で登録できてしまい、さらに「bakera」と同じ WHERE 句で拾われたりすることになると。
ちゃんと長さチェックしようね、という話で良いのでしょうか。
- 「MySQLのカラム切り捨て問題」にコメントを書く
- 前(古い): 脆弱性にぶちきれ
- 次(新しい): IT Pro がまたやっちゃった