WHAT IS SQL INJECTION
May 01, 2024 Copy Link
السلام عليكم 🙌
النهارده راجعين بمقالة جديدة و هنتكلم عن ال SQL Injection و اد إيه هو مهم عشان موقعك ميكونش vulnerable 🙅♂️
اولاً الكلمة دي ممكن نختصرها ب SQLi و هي بتسمح لل attacker انه يتعامل مع ال queries اللي موقعنا بيعملها, و دا بيسمحله انه يشوف داتا مش مسموح ليه انه يشوفها أو ممكن تخلي يوزر يشوف داتا خاصة بيوزر تاني...البيانات دي ممكن تكون Password أو Credit Card 🤐
طيب هو ممكن اعرف إذا كان الموقع بتاعي vulnarable و لا لأ؟ 🤔
نعم ي صديقي تقدر تعرف بحاجتين و هما ال single quote و ال boolean condition...تعالوا سريعاً نشوف المشكلة بتيجي منين
لو أنا هكتب query زي اللي تحت دي و عايز اعملها run بال PHP
$query = "SELECT * FROM users WHERE user = '$username' and password = '$password'";
$result = mysql_query($query);
بالطريقة اللي فوق دي أنا بثق في البيانات اللي هيكتبها اليوزر, فمثلاً لو كتب في خانة اليوزر نيم admin و في خانة الباسورد a' or 1 = '1 عشان يبقا شكل ال query الجديد كدا and password = 'a' or '1' = 1 و طبعاً ال condition اللي هو 1 = '1' هيتحقق علي طول و هيرجعلي بيانات كل المستخدمين
طيب أعمل إيه عشان أحل المشكلة دي؟
الحل إنك تستخدم ال Prepared Statement و دي مُهمتها إنها بتاخد القيمة بتاعة اليوزر زي ما هيا بالظبط, خلونا نعمل run لنفس ال query اللي فاتت بس بإستخدام method تانية في ال PHP
$stmt = $mysqli->prepare("SELECT * FROM users WHERE user = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
الميثود اللي إسمها bind_param دي بقولها إني جايلي two inputs string من اليوزر و عايز أشيل علامة الإستفهام الأولي و أحط مكانها اليوزر نيم و التانية أحط مكانها الباسورد, كدا ي صديقي مهما تكن القيمة اللي اليوزر هيكتبها ال PHP هتاخدها زي ما هي بالظبط و بكدا نكون بأمان 🔐
طيب في ناس ممكن تكتب ال Boolean Condition و ناس ممكن تكتب ال SQL Comment و اللي بتكون عبارة عن two hypens زي ال query اللي تحت دي ✍
SELECT * FROM users WHERE username = 'administrator' -- ' AND password = ''
بالشكل اللي فوق دا هيحصل كومنت للجزء اللي بعد اليوزر نيم و هكون قدرت اجيب كل بيانات المستخدمين تاني 🤡
و بكدا أكون خلصت و أتمني تكون إستفدت ✔