--- title: SQL Injection localeTitle: حقن SQL --- ## حقن SQL ثغرة أمنية في التطبيق بسبب مبرمج لا يعقم المدخلات قبل تضمينها في استعلام في قاعدة البيانات. هذا يؤدي إلى مهاجم قراءة كاملة وكثير من الأحيان كتابة الوصول إلى قاعدة البيانات. مع هذا النوع من الوصول يمكن للمهاجم القيام بأشياء سيئة للغاية. ### مثال على حقن SQL الهجوم يقوم البرنامج النصي PHP أدناه بتشغيل عبارة SQL للحصول على البريد الإلكتروني الخاص بالمستخدم بواسطة المعرّف. ومع ذلك ، لا يتم تعقيم الإدخال مما يجعله عرضة لحقن SQL `connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT email FROM users WHERE id =" . $input; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo $row["email"]; } } else { echo "no results"; } $conn->close(); ` ``SELECT email FROM users WHERE id = `$input`; `` إذاً ، مع ما ذكر أعلاه ، فإن المدخلات ليست من النوع المدبب (بمعنى أن يتم إدخال الإدخال مع (int) بحيث لا يُسمح إلا بعدد واحد فقط) كما لا يمكن الهروب مما يسمح لشخص ما بتنفيذ هجوم حقن SQL - على سبيل المثال عنوان URL `getemailbyuserid.php?id=1'; My Query Here-- -` سيتيح لك تشغيل استعلامات SQL التعسفية دون بذل مجهود كبير. ### الدفاع عن موقع الويب الخاص بك من هجمات حقن SQL في PHP هناك عدة طرق للدفاع عن موقعك الإلكتروني من هجمات حقن SQL. هذه الطرق هي القائمة البيضاء ، نوع الصب ، وهروب الأحرف **هيتليستينغ:** يتم استخدام نهج القائمة البيضاء في الحالات التي يتوقع فيها بعض المدخلات. يمكنك سرد كل إدخال متوقع في أحد مفاتيح تبديل PHP ومن ثم إعداد افتراضي للإدخال غير الصحيح. لا داعي للقلق بشأن مشكلة في كتابة النوع أو تجاوز مسار الهروب ولكن الإدخال المسموح به محدود بشكل غير محدود. يبقى خيارًا ، راجع المثال أدناه. `