• 0

كيف أمنع SQL-Injection في لغة php؟

في جمل الاستعلام Sql، يمكن أن تتعرض الجملة إلى تغيير من طرف المستخدم، كهذا المثال:

$unsafe_variable = $_POST['user_input']; 

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");

حيث يمكن للمستخدم إذا كان ملمًا بالبرمجة أن يُحدث تغيراً في الكود، كأن يزيل جدول أو ما شابه ذلك بتغيير قيمة المتغير 

$unsafe_variable

إلى:

value'); DROP TABLE table;--

فتصبح جملة الاستعلام:

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')

ما الذي بإمكاني فعله لتفادي مثل هذه الثغرات؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هناك طريقتين لتفادي ذلك:

  • استعمال مكتبة Pdo وهي من أقوى مكتبات جمل الاستعلام المستعملة مع php و Mysql حاليا.

حيث تمنع المستخدم من تغير جملة الاستعلام بعد وظيفة prepare:

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array('name' => $name));

foreach ($stmt as $row) {
    //  $row يمكنك هنا اظهار أو فعل أي أوامر برمجية على المتغير
}

 

  • استعمال مكتبة Mysqli ، حيث تمكنك هذه المكتبة من التواصل مع قاعدة البيانات و إجراء مختلف جمل الاستعلام :
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name);

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // $row يمكنك هنا اظهار أو فعل أي أوامر برمجية على المتغير
}

 

للتعمق أكثر :

1

2

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن