Abdulaziz Aldawk | 🇸🇦
Abdulaziz Aldawk | 🇸🇦

@a_Aldawk

16 تغريدة 13 قراءة Sep 19, 2020
#أمن_المعلومات
#أمن_السيبراني
السلام عليكم
اليوم ثريد للمطورين الويب بشكل عام و كيف تحمي موقعك وتفلتر موقعك من الثغرات مثل xss و SQL Injection
بس بتكلم عنه بشكل بسيط واعرض طريقة فلتره بشكل عام كلها عن طريق اللغه PHP ومااعرف اذا ينطبق مع باقي اللغه.
تذكر هذا موضوع الحماية فقط
الثغرة XSS في نوعين الى هي Reflect و stored
طبعآ store هي اخطر ثغره لانه تتخزن في قواعد بيانات وبنفس الوقت لو هكر نفذ سكربات و انحفظت في قاعده بيانات يصير بسهوله تنسرق البيانات الادمن راح اعطيكم مثال.
XXS Reflect: هذا النوع الثغره للتأكيد و تشييك اذا كان الموقع مصاب بالثغره ولالا
بالغالب لما تجي تنفذ الامر سكربت راح يطلع لك تنبيه يعني الموقع مصااب ليش
لانه احنا ماعملنا فلتره و حمايه عشان نحمي الموقع من تنفيذ هذي سكربات.
مثل ماتلاحظون بالصوره مافي فلتره ابد يعني ماعملنا فلتره فقط حطينا متغير يظهر لنا القيمة فقط من غير فلتره
هذا الكود
echo 'hey ' . $_GET['search'];
طيب كيف نعمل فلتره الحين؟
كل الى علينا نضيف داله و اكيد يوجد انواع واكثر من طرق
ولكن هذي احد الطرق :
htmlspecialchars
يتبع
يعني بعد مانضيف هذا الكود مع الدالة
echo 'hey ' . htmlspecialchars($_GET['search']);
راح تطبع اي شي عن طريق html وليس سكربت او اي نوع من الاكواد وطبعآ هذا نوع من حماية
لما نجي ننفذ هذا الكود راح يطبع كل شي حتى سكربت يعني يصير الثغره ماله قيمة :)
XSS stored:
هذي من الاخطر أنواع من ثغره لانه سكربت يتخزن في قاعده بيانات ثم اي احد يدخل الموقع تنرسل هذي بيانات مثل كوكيز الى هكر مثلآ كوكيز تبع الادمن.
زي ماتلاحظون بالصوره تم تنفيذ سكربت مرتين في contact
بشكل توماتيكي لانه مخزن في قاعده بيانات
طبعآ ماراح يطلع لك كذا
اكيد بتروح الهكر بدال ماتجيك :) بس هذا مجرد مثال
وكيف نحمي الموقع من ثغره هذي ؟
نعمل فلتره للمدخلات يعني اي احد يحاول يدخل سكربت يرفض ومايصير شي
كل الى عليك تسوي دالتين وحده خاصة String وثانيه الايميل مثل الى بالصوره
وطبعآ لك خيار تستخدم انواع كثيره من فلتر. يتبع
مثل الداله stripslashes او الى سويناه فوق html
بس راح استخدم الدالتين الى عرضتها
وطبعآ هذي دالتين احنا سويناها وراح نستخدم تبع كل مدخلات زي بالصوره بضبط .
بهذي طريقة سويناها من الدالة
او تقدر تستخدم دالات اخرى لو تبي :)
هنا لما نجي نطبق السكربت يصير سكربت ماله فايده ويتخزن في قاعده بيانات على انه فقط string وليس سكربت :)
تتذكرون فوق لما دخلت على contact يطلع نافذه يعني سكربت تنفذ مرتين بسبب وجود سكربت في قاعده بيانات
بس هالمره لا خلاص يصير يفلتر اي شي غير عن الاسم والايميل...
Sql Injection:
هذي ثغره قاعده بيانات يعني يصير سهل جدآ وصول الى قاعده بيانات سواء كان يدوي او بالادوات تمام
لما نجي نكتب مثلآ هذي علامة " يعني كأننا نكتب Query و نبيه يرد علينا وفعلآ يرد بس الاسف False لانه غير موجود هذي معلومة بنفس الوقت كذا يعني الموقع مصاب الثغره Sql
طيب ايش يعني هذي ثغره؟
هذي الثغره تكون بسببها لعدم وجود فلتر او امان في الاوامر sql
و الكود الى كتبته هذا بدون فلتر وعملت تجربه بنفسي وفعلآ وصلت البيانات بأسرع وقت :) مثل موضح باليمين
حتى لو مشفره يمديك تكسرها بعد هههه
المهم هذا مش موضوعنا
موضوعنا كيف نحمي الموقع من هذي ثغرات
عشان تحمي الموقع من تسرب البيانات تبعك لازم تستخدم هذا الاوامر مع sql
$mysqli->prepare()
bind_param();
->execute();
هذا ايش يسوي بضبط؟ بالتفاصيل بالتغريده جايه
بس هذا يعمل على فلتره ومايسمح الاي احد يكتب اي شي من الاوامر يعني مايصير في تفاعل ابدآ وحتى لو تجرب ادوات ماراح تنفع
st1 = $mysqli->prepare("select * from messages1 m
left join services s
on m.id_service = s.id_service
where m.id=? limit 1");
هنا استعلام sql ولكن m.id يساوي علامة استفهام
لانه هنا مانبي اي احد يتعامل مع كويري من متصفح زي ماوضحت بالصوره متحركة
$st1->bind_param('i',$ID);
هنا نضع متغير جديد وخاص بالاي دي و اكيد تقدر تضع اكثر من مره
i تعني انتجر
$ID = $_GET["id"];
لما جبنا متغير جديد وخليناه Integer
ونضع الاي دي لكي نستخدمه في php
$st1->execute();
$message = $st1->get_result()->fetch_array(MYSQLI_ASSOC);
هنا اظهار النتيجة.
لما نجي ننفذ ونتأكد
راح نلاحظ الكويري لم يستجيب لنا ابدآ
لانه تم عمل فلتر له
وللعلم لازم تسوي هذي حركة الكود بكل sql
bind_param
i = integer
d = double
s = string
وكذا انتهينا و اذا عندكم معلومات افضل شاركو معاي.
وشكرآ لكم و أشوفكم على خير.

جاري تحميل الاقتراحات...