Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan Sambungan MySQL dalam PHP dengan Selamat untuk Mengelakkan Suntikan SQL dan Perangkap Lain?

Bagaimanakah Saya Boleh Menggunakan Sambungan MySQL dalam PHP dengan Selamat untuk Mengelakkan Suntikan SQL dan Perangkap Lain?

Susan Sarandon
Susan Sarandonasal
2024-12-12 13:27:10124semak imbas

How Can I Securely Use the MySQL Extension in PHP to Avoid SQL Injection and Other Pitfalls?

Soal MySQL Selamat dengan Sambungan MySQL

Pengenalan

Walaupun terdapat PDO, keluarga fungsi mysql_* kekal sebagai pilihan biasa untuk interaksi pangkalan data PHP. Walaupun perpustakaan ini sangat selamat apabila digunakan dengan betul, penggunaannya sering membawa kepada isu keselamatan dan teknikal. Artikel ini menyediakan contoh kod sempurna yang mempamerkan cara menggunakan sambungan MySQL dengan selamat.

Mengelakkan Perangkap Biasa

Fungsi mysql_* terkenal dengan beberapa masalah biasa, termasuk :

  • Suntikan SQL
  • Ralat pengendalian isu
  • Suntikan skrip merentas tapak (XSS)

Kod Contoh

Sampel kod berikut melaksanakan skrip PHP mudah yang mengemas kini baris jadual pangkalan data berdasarkan pembolehubah POST sambil mengurangkan perkara di atas risiko:

<?php

header('Content-type: text/html; charset=utf-8');
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

$config = array(
    'host' => '127.0.0.1',
    'user' => 'my_user',
    'pass' => 'my_pass',
    'db' => 'my_database'
);

$connection = @mysql_connect($config['host'], $config['user'], $config['pass']);

if (!$connection) {
    trigger_error('Unable to connect to database: ' . mysql_error(), E_USER_ERROR);
}

if (!mysql_select_db($config['db'])) {
    trigger_error('Unable to select db: ' . mysql_error(), E_USER_ERROR);
}

if (!mysql_set_charset('utf8')) {
    trigger_error('Unable to set charset for db connection: ' . mysql_error(), E_USER_ERROR);
}

$result = mysql_query(
    'UPDATE tablename SET name = "' . mysql_real_escape_string($_POST['name']) . '" WHERE id = "' . mysql_real_escape_string($_POST['id']) . '"'
);

if ($result) {
    echo htmlentities($_POST['name'], ENT_COMPAT, 'utf-8') . ' updated.';
} else {
    trigger_error('Unable to update db: ' . mysql_error(), E_USER_ERROR);
}
?>

Ciri Utama

  • Pengendalian ralat: Ralat ditangkap dan dilaporkan dengan trigger_error(), menyekat ralat terperinci mesej dalam mod pengeluaran.
  • Suntikan SQL pencegahan: Nilai POST dilarikan menggunakan mysql_real_escape_string() untuk menghalang serangan suntikan SQL.
  • Sokongan Unicode: Sambungan pangkalan data dikonfigurasikan untuk menyokong Unicode.
  • Mod pengeluaran: Mesej ralat boleh dihalang dengan menetapkan paparan_ralat kepada 0 dalam mod pengeluaran.

Kesimpulan

Sampel kod ini menyediakan asas kukuh untuk pertanyaan MySQL yang selamat menggunakan keluarga fungsi mysql_*. Ia menangani masalah biasa dengan melaksanakan pengendalian ralat yang betul, menghalang suntikan SQL dan menyokong Unicode. Dengan mengamalkan amalan ini, pembangun boleh menulis aplikasi dipacu pangkalan data yang selamat dan boleh dipercayai.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Sambungan MySQL dalam PHP dengan Selamat untuk Mengelakkan Suntikan SQL dan Perangkap Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn