Rumah >pangkalan data >tutorial mysql >Bagaimana untuk melaksanakan pemangkasan aksara panjang dalam MySQL
Pemotongan aksara ultra-panjang MySQL, juga dikenali sebagai "SQL-Column-Truncation", telah dicadangkan oleh penyelidik keselamatan Stefan Esser pada Ogos 2008.
Terdapat pilihan sql_mode dalam tetapan dalam MySQL Apabila sql_mode ditetapkan kepada lalai, iaitu apabila pilihan STRICT_ALL_TABLES tidak dihidupkan (MySQLsql_mode lalai), MySQL hanya akan menggesa amaran apabila memasukkan. nilai yang terlalu panjang dan bukannya ralat, ini mungkin menyebabkan beberapa masalah pemotongan.
Buat jadual baharu untuk ujian Struktur jadual adalah seperti berikut (MySQL5.1):
CREATE TABLE USERS( id int(11) NOT NULL, //长度为7 username varchar(7)NOT NULL, password varchar(12)NOT NULL , )
Masukkan pernyataan SQL berikut (inject prompt messages) masing-masing.
①Masukkan pernyataan SQL biasa.
mysql> insert into users(id,username,password)values(1,'admin','admin');//成功插入,无警告,无错误 Query OK,1 row affected(0.00 sec)
②Masukkan pernyataan SQL yang salah Pada masa ini, terdapat tiga ruang di sebelah kanan "admin" dan panjangnya ialah 8, yang telah melebihi panjang asal yang ditetapkan.
mysql> insert into users(id,username,password)values(2,'admin ','admin'); //成功插入,一个警告 Query OK,1 row affected,1 warning(0.00 sec)
③Pernyataan SQL yang salah telah dimasukkan dan panjangnya telah melebihi panjang yang ditentukan asal.
mysql> insert into users(id,username,password) values(3,'admin x','admin'); //成功插入,一个警告 Query OK,1 row affected,1 warning(0.00 sec)
MySQL menggesa bahawa ketiga-tiga pernyataan telah dimasukkan ke dalam pangkalan data, tetapi dua pernyataan terakhir menghasilkan amaran. Anda boleh mengesahkan sama ada ia telah dimasukkan ke dalam pangkalan data dengan melaksanakan pernyataan SQL.
mysql> select username from users;
Anda dapat melihat bahawa ketiga-tiga keping data telah dimasukkan ke dalam pangkalan data, tetapi nilai telah berubah Pada masa ini, panjang diperoleh melalui panjang dan panjang nilai dinilai.
mysql> select length(username)from users where id =1 ;
Ia boleh didapati bahawa panjang data kedua dan ketiga ialah 7, iaitu panjang lajur yang ditentukan Ia boleh dilihat secara lalai, jika data melebihi panjang lalai lajur , MySQL akan Dipotong.
Tetapi bagaimana kita boleh menyerangnya seperti ini?
Hanya tanya pengguna yang nama penggunanya ialah 'admin'.
mysql> select username from users where username='admin';
Hanya bertanya kepada pengguna yang bernama pentadbir, tetapi dua lagi pengguna pentadbir dengan panjang yang tidak konsisten turut disoal, yang akan menyebabkan beberapa masalah keselamatan Sebagai contoh, terdapat log masuk pentadbir yang dinilai seperti ini: Pernyataan itu adalah seperti berikut:
$sql = "select count(*) from users where username='admin' and password='*******;
Walaupun pernyataan SQL tidak mempunyai kerentanan suntikan, penyerang masih boleh log masuk ke halaman pengurusan. Dengan mengandaikan bahawa nama pengguna log masuk pentadbir adalah pentadbir, maka penyerang hanya perlu mendaftarkan pengguna "admin" untuk memasuki halaman pengurusan backend dengan mudah WordPress yang terkenal telah diserang dengan cara ini.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemangkasan aksara panjang dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!