Audit keselamatan sambungan pangkalan data: Gunakan protokol keselamatan (TLS/SSL) untuk melindungi komunikasi pangkalan data dan mencegah serangan orang di tengah. Gunakan pertanyaan berparameter untuk memisahkan data daripada rentetan pertanyaan dan menghalang serangan suntikan SQL. Tapis input pengguna untuk mengalih keluar aksara berniat jahat dan arahan SQL untuk memastikan hanya input yang sah dilaksanakan. Gunakan kata laluan yang kukuh, ubahnya dengan kerap dan elakkan kata laluan lalai atau mudah diteka. Hadkan akses pangkalan data kepada mereka yang memerlukan akses sahaja untuk mengurangkan permukaan serangan.
Keselamatan sambungan pangkalan data adalah penting dalam aplikasi PHP. Sambungan yang tidak selamat boleh membawa kepada pendedahan data sensitif atau capaian yang tidak dibenarkan kepada aplikasi. Dalam artikel ini, kami akan meneroka cara untuk menyemak kelemahan keselamatan sambungan pangkalan data dalam kod PHP dan memberikan beberapa contoh praktikal.
Pastikan pelayan pangkalan data dan aplikasi PHP anda menggunakan protokol selamat seperti TLS/SSL. Ini akan menyulitkan komunikasi pangkalan data dan menghalang serangan orang di tengah.
$dsn = 'mysql:dbname=database;host=localhost;port=3306'; $username = 'username'; $password = 'password'; try { $db = new PDO($dsn, $username, $password, [ PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_SSL_KEY => '/path/to/key.pem', PDO::MYSQL_ATTR_SSL_CERT => '/path/to/cert.pem', PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca.pem', ]); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); }
Menggunakan pertanyaan berparameter boleh menghalang serangan suntikan SQL. Ia menghalang arahan SQL yang berniat jahat daripada dilaksanakan dengan memisahkan rentetan pertanyaan dan data.
$stmt = $db->prepare('SELECT * FROM users WHERE username = :username'); $stmt->bindParam(':username', $username, PDO::PARAM_STR); $stmt->execute();
Sentiasa tapis input pengguna untuk mengelakkan watak jahat atau suntikan arahan SQL. Gunakan fungsi terbina dalam seperti filter_var()
和 htmlentities()
untuk mengesahkan dan membersihkan input pengguna.
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING); $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
Sentiasa gunakan kata laluan yang kukuh dan tukarkannya dengan kerap. Elakkan daripada menggunakan kata laluan lalai atau mudah diteka, seperti "kata laluan" atau "admin."
Berikan akses hanya kepada aplikasi atau pengguna yang perlu mengakses pangkalan data. Mengehadkan akses kepada pangkalan data mengurangkan permukaan serangan dan mengurangkan risiko pelanggaran data.
Kes 1:
$db = new PDO('mysql:dbname=database;host=localhost', 'username', 'password');
Kod di atas terdedah kepada serangan suntikan SQL kerana tiada penapisan atau pengesahan input pengguna.
Dibetulkan:
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING); $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING); $db = new PDO('mysql:dbname=database;host=localhost', $username, $password);
Kes 2:
$stmt = $db->query('SELECT * FROM users WHERE username="' . $_POST['username'] . '"');
Kod di atas juga terdedah kepada serangan suntikan SQL kerana ia memasukkan input pengguna terus ke dalam pertanyaan SQL.
Dibetulkan oleh:
$stmt = $db->prepare('SELECT * FROM users WHERE username = :username'); $stmt->bindParam(':username', $_POST['username'], PDO::PARAM_STR); $stmt->execute();
Atas ialah kandungan terperinci Audit Keselamatan Sambungan Pangkalan Data PHP: Semak kod anda untuk mencari kelemahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!