عنصر الخلاصة
·
تمت الإضافة تدوينة واحدة إلى , PHP

في عالم تطوير البرمجيات وتصميم مواقع الإنترنت، تعتبر قاعدة البيانات أساساً حيوياً لإدارة وحفظ البيانات. إحدى العمليات الأكثر شيوعاً في التواصل بين التطبيقات وقواعد البيانات هي تنفيذ استعلامات SQL. ورغم أن sqli_query تعتبر من الطرق الأساسية لتنفيذ هذه الاستعلامات في PHP، فإن استخدامها بشكل غير آمن يمكن أن يعرض موقعك للهجمات الإلكترونية خاصة هجمات الحقن SQL (SQL Injection). في هذا المقال، سنناقش بالتفصيل كل ما يتعلق بـ sqli_query، كما سنتحدث عن أفضل الممارسات لتحسين أمان استخدامها.

ما هي sqli_query؟

تُستخدم sqli_query في لغة البرمجة PHP لتنفيذ استعلامات SQL على قاعدة البيانات. تعتبر هذه الوظيفة جزءًا من مكتبة MySQLi التي توفر تحكماً أفضل وتكامل قوي مع قواعد البيانات. تتطلب sqli_query وسيطين رئيسيين:

  • اتصال قاعدة البيانات: الذي يتم تأسيسه باستخدام دالة mysqli_connect.
  • استعلام SQL: النص الذي يحتوي على الأمر المطلوب تنفيذه مثل SELECT أو INSERT أو UPDATE.

مثال بسيط على استخدام sqli_query:

$db = mysqli_connect("localhost", "username", "password", "database_name");
$query = "SELECT * FROM users";
$result = mysqli_query($db, $query);

LSI Keywords المستخدمة في هذا القسم:

  • قواعد بيانات PHP
  • استعلامات SQL
  • وظيفة sqli_query

كيف تعمل sqli_query؟

وظيفة sqli_query تعمل على إرسال استعلام SQL إلى قاعدة البيانات وتنفيذه مباشرةً. إذا كان الاستعلام صحيحاً ولم يتضمن أي أخطاء، فإنه يتم تنفيذ العملية بنجاح ويعيد النتيجة ككائن. يمكن أن يكون هذا الكائن عبارة عن:

  1. مجموعة نتائج: إذا كان الاستعلام عبارة عن SELECT.
  2. قيمة منطقية: سواء كانت العملية ناجحة أم لا في استعلامات INSERT وUPDATE وDELETE.

للتعامل مع النتائج، غالباً ما يُستخدم الأمر mysqli_fetch_assoc أو mysqli_fetch_array للحصول على الصفوف.

نص المثال:

$db = mysqli_connect("localhost", "username", "password", "database_name");
$query = "SELECT id, name FROM users";
$result = mysqli_query($db, $query);

while ($row = mysqli_fetch_assoc($result)) {
    echo "ID: " . $row['id'] . " - Name: " . $row['name'] . "
"; }

LSI Keywords المستخدمة في هذا القسم:

  • mysqli_fetch_assoc
  • استعلام SELECT
  • اتصال قاعدة البيانات

مخاطر استخدام sqli_query بدون حفظ الأمان

واحدة من أشهر المشكلات التي يمكن أن تحدث عند استخدام sqli_query هي هجمات الحقن SQL (SQL Injection). يمكن للمهاجم استغلال الثغرات إذا كانت المدخلات من المستخدمين تُستخدم مباشرة داخل الاستعلام. يؤدي هذا إلى إمكانية تشغيل أوامر ضارة على السيرفر وقاعدة البيانات مثل حذف الجداول أو تسريب البيانات.

ماذا يحدث عند هجمة الحقن SQL؟

في هجمة الحقن SQL، يقوم المهاجم بإرسال مدخل غير صالح في حقل إدخال المستخدم. إذا كان التطبيق لا يتحقق من المدخلات أو يستخدمها مباشرة في استعلام SQL، فإن المهاجم يمكنه تنفيذ أوامر وفقاً لتحكمه الشخصي. على سبيل المثال:

$username = $_GET['username'];
$password = $_GET['password'];

$db = mysqli_connect("localhost", "root", "", "my_database_name");
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($db, $query);

إذا قام المستخدم بإدخال شيء مثل: username='admin' OR '1'='1'، فإن الاستعلام يصبح غير آمن وقد يعيد جميع الصفوف!

LSI Keywords المستخدمة في هذا القسم:

  • هجمات الحقن SQL
  • ثغرات أمنية
  • MYSQLi الأمن

كيفية حماية sqli_query من هجمات الحقن SQL

لحماية موقعك وتطبيقاتك من حقن SQL، هناك عدد من الطرق والممارسات التي يجب اتباعها:

1. استخدام الاستعدادات (Prepared Statements)

إحدى الطرق الأكثر فاعلية لتجنب هجمات الحقن SQL هي استخدام الاستعدادات. توفر هذه التقنية فصل المدخلات عن النصوص، مما يمنع تشغيل أوامر ضارة.

مثال على استخدام الاستعدادات:

$db = mysqli_connect("localhost", "root", "", "my_database_name");
$stmt = $db->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
    echo "Welcome " . $row['username'];
}

2. التحقق من المدخلات

يجب دائماً التحقق من البيانات المدخلة بواسطة المستخدمين قبل استخدامها في استعلام SQL. يُفضل استخدام دالة mysqli_real_escape_string لتنظيف المدخلات من أي أحرف خاصة.

3. إعداد أذونات أمان قوية

يجب أن تكون قاعدة البيانات محمية بإعدادات الأمان، مثلاً ضبط أذونات المستخدم بحيث يتمكن فقط من الوصول إلى الجداول المطلوبة.

LSI Keywords المستخدمة في هذا القسم:

  • المدخلات الآمنة
  • السياسات الأمنية في قواعد البيانات
  • تقنيات الاستعدادات

خاتمة

تعتبر sqli_query أداة قوية لكتابة وتنفيذ استعلامات SQL في PHP، ولكن استخدامها غير الحذر يمكن أن يؤدي إلى ثغرات أمنية خطيرة. يجب على مطوري المواقع اتباع أفضل الممارسات للحفاظ على أمان تطبيقاتهم وقواعد البيانات بما في ذلك استخدام الاستعدادات، التحقق من المدخلات، وتطبيق سياسات الأمان. إذا كنت تطمح لبناء تطبيق آمن وفعال، فإن فهم كيفية استخدام وتحسين sqli_query سيكون بمثابة الخطوة الأولى نحو النجاح.