Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah mysql_real_escape_string() dan mysql_escape_string() Mencukupi untuk Keselamatan Apl?

Adakah mysql_real_escape_string() dan mysql_escape_string() Mencukupi untuk Keselamatan Apl?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 03:27:03818semak imbas

Are mysql_real_escape_string() and mysql_escape_string() Sufficient for App Security?

Adakah mysql_real_escape_string() dan mysql_escape_string() Cukup Selamat untuk Aplikasi?

Pengenalan:

Mengekalkan keselamatan apl adalah penting dan keselamatan pangkalan data memainkan peranan penting. Walaupun mysql_real_escape_string() dan mysql_escape_string() biasanya digunakan untuk melindungi daripada suntikan SQL, kebimbangan timbul tentang keberkesanannya.

Soalan:

Adakah mysql_real)_event dan mysql_escape_string() mencukupi untuk keselamatan apl?

Jawapan:

Tidak.

Kerentanan daripada mysql_real_escape_string() dan mysql_escape_string()

Fungsi ini tidak mencukupi untuk keselamatan aplikasi yang menyeluruh disebabkan oleh beberapa kelemahan keselamatan:

SQL Injection:

    Walaupun tuntutan perlindungan, fungsi ini kekal terdedah kepada suntikan SQL, terutamanya berkenaan pembolehubah PHP yang digunakan dalam pertanyaan.
  • Contoh:

    $sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  
    Pertanyaan ini boleh dieksploitasi dengan memasukkan data berniat jahat, yang berpotensi membawa kepada akses pangkalan data yang tidak dibenarkan.

LIKE SQL Attacks:

    LIKE pertanyaan boleh dikompromi menggunakan aksara khas, seperti "%" atau "_", untuk memintas kriteria carian yang dimaksudkan.
  • Contoh:

    $sql = "SELECT url FROM GrabbedURLs WHERE " . mysql_real_escape_string($field) . " LIKE '%s%%' LIMIT %s";  
    Pertanyaan ini membenarkan penyerang mendapatkan semula semua rekod, menimbulkan risiko keselamatan.

Eksploitasi Charset:

    Internet Explorer kekal terdedah kepada eksploitasi charset, membenarkan penggodam menyuntik arahan SQL sewenang-wenangnya, termasuk suntikan SQL.

Penyelesaian Disyorkan: Penyata Disediakan

Untuk menangani kelemahan ini, langkah keselamatan yang disyorkan ialah menggunakan kenyataan yang disediakan.

    Pernyataan yang disediakan menggunakan mekanisme keselamatan sedia ada pelayan pangkalan data.
  • Pernyataan ini menghalang suntikan SQL dengan hanya melaksanakan SQL yang dimaksudkan.
  • Pernyataan yang disediakan juga memudahkan kod dan meminimumkan kelemahan.

Contoh:

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.stackoverflow.com/';
$limit = 1;

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs WHERE ' . $column . '=? LIMIT ' . $limit);
$statement->execute(array($value));
while (($data = $statement->fetch())) { }

Kesimpulan:

mysql_real_escape_string() dan mysql_escape_string() menyediakan perlindungan terhad terhadap tertentu Serangan suntikan SQL. Walau bagaimanapun, ia tidak mencukupi untuk melindungi aplikasi daripada pelbagai kelemahan lain. Pendekatan yang disyorkan ialah menggunakan pernyataan yang disediakan untuk memastikan keselamatan apl yang komprehensif.

Atas ialah kandungan terperinci Adakah mysql_real_escape_string() dan mysql_escape_string() Mencukupi untuk Keselamatan Apl?. 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