أساليب الحماية موقعك من الهجمات بسبب الثغرات XSS and SQL Injection
الكاتب: Mr.Aziz
تاريخ النشر: 2021-08-10 16:32:42
مساااءكم الخير
اليوم راح اتكلم موضوع مهم للمطورين الويب بشكل عام و كيف تحمي موقعك وتفلتر موقعك من الثغرات مثل xss و SQL Injection
بس بتكلم عنه بشكل بسيط واعرض طريقة فلتره بشكل عام كلها عن طريق اللغه PHP ومااعرف اذا ينطبق مع باقي اللغه.
تذكر هذا موضوع الحماية فقط و غرض تعليمية.
وتذكر انه هذي الثغرات غير كافية و توجد ثغرات أخرى ولكن هذي اشهرها سوف نتكلم عنها...
الثغرة XSS في نوعين الى هي Reflect و stored
طبعآ store هي اخطر ثغره لانه تتخزن في قواعد بيانات وبنفس الوقت لو هكر نفذ سكربات و انحفظت في قاعده بيانات يصير بسهوله تنسرق البيانات الادمن راح اعطيكم مثال بعدين.
XXS Reflect: هذا النوع الثغره للتأكيد و تشييك اذا كان الموقع مصاب بالثغره ولالا بالغالب لما تجي تنفذ الامر سكربت راح يطلع لك تنبيه يعني الموقع مصااب ليش لانه احنا ماعملنا فلتره و حمايه عشان نحمي الموقع من تنفيذ هذي سكربات.
مثل ماتلاحظون بالصوره مافي فلتره ابد يعني ماعملنا فلتره فقط حطينا متغير يظهر لنا القيمة فقط من غير فلتره هذا الكود
1
|
'hey ' . $_GET [ 'search' ]; |
طيب كيف نعمل فلتره الحين؟
كل الى علينا نضيف داله و اكيد يوجد انواع واكثر من طرق ولكن هذي احد الطرق : htmlspecialchars
قبل عمل الفلترة ^
بعد عمل الفلتره ^
يعني بعد مانضيف هذا الكود مع الدالة
1
|
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();
هذا ايش يسوي بضبط؟
بالتفاصيل راح اشرح لكم بس هذا يعمل على فلتره ومايسمح الاي احد يكتب اي شي من الاوامر يعني مايصير في تفاعل ابدآ وحتى لو تجرب ادوات ماراح تنفع.
1
2
3
4
|
$st1 = $mysqli ->prepare("select * from messages1 m left join services s on m.id_service = s.id_service where m.id=? limit 1"); |
هنا جلب الاستعلام ولكن id يساوي الاستفهام ليش؟
لانه مانبغى احد يعبر في بارميتر ويضع الارقام او فاصلات من عنده
1
2
|
$st1 ->bind_param( 'i' , $ID ); $ID = $_GET [ "id" ]; |
هنا كأننا نخفي رقم الاي دي الى وضعنا له الاستفهام
ونعمل له متغير جديد و نعرفه على الاي دي
1
2
|
$st1 ->execute(); $message = $st1 ->get_result()->fetch_array(MYSQLI_ASSOC); |
هنا يبدء العمل ويتنفذ الاستعلام الى سويناه
لما نجي ننفذ ونتأكد راح نلاحظ الكويري لم يستجيب لنا ابدآ
وللعلم لازم تسوي هذي حركة الكود بكل sql
bind_param
i = integer
d = double
s = string
بالمستقبل بأذن الله سوف اشرح طريقة أخفاء الروابط بأبسط طرق بأذن الله
وكذا أنتهينا
أشوفكم على خير.