Latest web development tutorials

MySQL dan SQL injection

Jika Anda mendapatkan data yang dimasukkan oleh pengguna melalui web dan masukkan ke database MySQL, maka itu adalah masalah keamanan injeksi mungkin SQL.

Bagian ini akan memberitahu Anda bagaimana untuk mencegah SQL injection, dan untuk menyaring karakter injeksi SQL dalam naskah.

Yang disebut SQL injection, adalah melalui perintah SQL ke dalam bentuk Web mengirimkan atau masukkan nama domain atau permintaan halaman string kueri, dan akhirnya menipu server untuk mengeksekusi perintah SQL berbahaya.

Kami input pengguna tidak pernah percaya, kita harus mengidentifikasi data yang dimasukkan oleh pengguna yang tidak aman, kita semua perlu untuk input pengguna data proses penyaringan.

Contoh berikut, nama pengguna yang dimasukkan harus kombinasi huruf, angka dan garis bawah, dan panjang nama pengguna adalah antara 8-20 karakter:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysql_query("SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Mari kita lihat situasi ketika tidak ada SQL penyaring karakter khusus muncul:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Atas pernyataan injeksi, kita tidak perlu menyaring $ nama variabel, $ nama kita tidak perlu memasukkan pernyataan SQL akan menghapus semua data dalam tabel user.

mysql_query di PHP () tidak diperbolehkan untuk mengeksekusi beberapa pernyataan SQL, tetapi dalam SQLite dan PostgreSQL dapat menjalankan beberapa pernyataan SQL secara bersamaan, sehingga pengguna data ini kita perlu verifikasi yang ketat.

Mencegah SQL injection, kita perlu memperhatikan hal-hal berikut:

  • 1. input pengguna Jangan pernah percaya. Verifikasi input pengguna, Anda dapat menggunakan ekspresi reguler, atau membatasi panjang; tunggal dan ganda tanda kutip "-" di konversi.
  • 2. Jangan gunakan sql perakitan dinamis, Anda dapat menggunakan parameter penggunaan langsung dari sql atau disimpan prosedur untuk akses data query.
  • 3. Jangan menggunakan administrator hak koneksi database, menggunakan izin individu yang terbatas untuk setiap koneksi database aplikasi.
  • 4. Jangan menyimpan informasi rahasia secara langsung, enkripsi atau hash password dan informasi sensitif.
  • 5. Informasi Aplikasi pengecualian harus diberikan sebagai beberapa petunjuk, yang terbaik adalah untuk menggunakan pesan pesan kesalahan kustom Kesalahan kemasan asli
  • Deteksi 6.sql tempat suntikan secara umum atau mendukung platform perangkat lunak untuk mendeteksi, perangkat lunak yang umum digunakan alat deteksi injeksi sql jsky, internet situs situs miliar berpikir ada alat deteksi platform keamanan. MDCSOFT SCAN suka. Menggunakan MDCSOFT-IPS dapat efektif injeksi pertahanan SQL, serangan XSS.

Mencegah SQL injection

Dalam bahasa scripting seperti Perl dan PHP Anda dapat melarikan diri dari data yang dimasukkan oleh pengguna untuk mencegah SQL injection.

ekstensi PHP MySQL menyediakan mysql_real_escape_string () fungsi untuk melarikan diri input karakter khusus.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Seperti injection pernyataan

seperti query, jika pengguna memasukkan nilai "_" dan "%", maka ini terjadi: Pengguna hanya mencoba query "abcd_", hasil query ada "abcd _", "ABCDE", "abcdf" dll, pengguna untuk query "30%" (Catatan: tiga puluh persen) akan memiliki masalah.

Dalam naskah PHP, kita dapat menggunakan addcslashes () fungsi untuk menangani kasus di atas, contoh-contoh berikut:

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes () fungsi sebelum ditentukan dengan garis miring terbalik.

sintaks:

addcslashes(string,characters)
parameter deskripsi
tali Diperlukan. Untuk memeriksa string yang ditentukan.
karakter Opsional. Ditentukan oleh addcslashes () mempengaruhi karakter atau rentang karakter.

Anda dapat melihat aplikasi spesifik: yang addcslashes PHP () fungsi