كده دي الاساسيات اللي المفروض تبقي معاك قبل الدخول ف اي تخصصات ف شد حيلك و ابدء ياحبيبي
بالتوفيق ياصديق 🔥👊
بالتوفيق ياصديق 🔥👊
This media is not supported in your browser
VIEW IN TELEGRAM
⚡23👍8❤4🔥4❤🔥3🤩3🤣3💘2🏆1
OneCube
مش عارف ازاي تبدء؟ كمل تحت 👇
المصادر اللي تذاكر منها
أولاً: الشبكات
عشان تتعلم الشبكات، عندك خيارين:
لو عايز تمشي علي النصيحة؟
شوف البلاي ليست دي:
لو عايز كورس كامل يغطي كل التفاصيل؟
ده الكورس اللي هيشرحلك كل حاجة:
ان شاء الله قريب هشرح الشبكات عملي هنا علي القناة
ثانياً: لينكس
اتعلم اللينكس من واحد من الكورسين دول، شوف اللي يناسبك:
الاتنين زي بعض تقريباً، اختار اللي شرح المدرس فيه يعجبك أكتر.
ثالثاً: Security+
لو هنتكلم عن Security+، فلازم نذكر كورس أحمد سلطان:
الإصدار القديم مجاني ومتاح على يوتيوب:
الإصدار الجديد مدفوع على موقع NetRiders.
لو مش مستعجل، قريب هيتم نشره مجاناً على موقع HiddenLockTeam.com.
رابعاً: البرمجة
بايثون (Python):
ابدأ بكورس الزيرو، شوف لحد الفيديو 133، ولو كملت باقي الكورس هيكون أفضل:
باش (Bash):
ده كورس لازم تشوفه بالكامل:
لو عندك سؤال او طلب لشرح اكتب ف التعليقات 👇
أولاً: الشبكات
عشان تتعلم الشبكات، عندك خيارين:
لو عايز تمشي علي النصيحة؟
شوف البلاي ليست دي:
https://youtube.com/playlist?list=PL7Gr36YWMQJce2BRY8rqxkygVyBb618iF&si=D03koWx49dKS_unJ
لو عايز كورس كامل يغطي كل التفاصيل؟
ده الكورس اللي هيشرحلك كل حاجة:
https://youtube.com/playlist?list=PLLlr6jKKdyK1zEvFvbRefQSngzxoYGID1&si=o34axUQqCkiltOm1
ان شاء الله قريب هشرح الشبكات عملي هنا علي القناة
ثانياً: لينكس
اتعلم اللينكس من واحد من الكورسين دول، شوف اللي يناسبك:
https://youtube.com/playlist?list=PLLlr6jKKdyK1FBi3pLVAmilLvMwWHw-84&si=kaCIdgbpJU873uwy
https://youtube.com/playlist?list=PLLlr6jKKdyK30uy0ikRjFpYMHXd4Cez1I&si=XwgeuD7VXXCPWrC3
الاتنين زي بعض تقريباً، اختار اللي شرح المدرس فيه يعجبك أكتر.
ثالثاً: Security+
لو هنتكلم عن Security+، فلازم نذكر كورس أحمد سلطان:
الإصدار القديم مجاني ومتاح على يوتيوب:
https://youtube.com/playlist?list=PLky4bd7_03m8o1NB0j96OsxZs0KcKlgMO&si=s8_OqJIR-g3OHQbk
الإصدار الجديد مدفوع على موقع NetRiders.
لو مش مستعجل، قريب هيتم نشره مجاناً على موقع HiddenLockTeam.com.
رابعاً: البرمجة
بايثون (Python):
ابدأ بكورس الزيرو، شوف لحد الفيديو 133، ولو كملت باقي الكورس هيكون أفضل:
https://youtube.com/playlist?list=PLDoPjvoNmBAyE_gei5d18qkfIe-Z8mocs&si=GuNdFlBwULWphEOp
باش (Bash):
ده كورس لازم تشوفه بالكامل:
https://youtube.com/playlist?list=PLBdyyeW_Z41DykncH9zzMk8T7Rm5UlZXd&si=iYsFnDpsGOwgL_xG
لو عندك سؤال او طلب لشرح اكتب ف التعليقات 👇
❤36🔥6👍4⚡1❤🔥1💘1
بروتوكول HTTPS بالتفصيل
الأول خلينا نتكلم عن وظيفة البروتوكول ده.
كلمة HTTPS هي اختصار لـ Hypertext Transfer Protocol Secure واللي معناها "بروتوكول نقل النص التشعبي الآمن". وظيفة البروتوكول ده هو إنه ينقل المعلومات بينك وبين السيرفر بأمان.
تخيل إنك قاعد في كافيه وعايز توصل رسالة سرية لصاحبك اللي في آخر القاعة. بس المشكلة إن فيه ناس قاعدة في النص ممكن تسمع الكلام أو تشوشر على كلامك وتوصل لصاحبك كلام مختلف. ودي كانت مشكلة بروتوكول HTTP.
تعال بقى نضرب HTTP ده شوية عشان يتربى ويوصل الكلام صح. لقيناه فجأة بقى HTTPS وبيشفر البيانات بينك وبين صاحبك، ولو حد سمع الرسالة مش هيفهم منها حاجة، ولو حد حاول يغير النص اللي مش مفهوم ده، بروتوكول HTTPS هيعرف ومش هيوصل الرسالة.
التحول من HTTP لـ HTTPS حصل بسبب استخدام تقنية اسمها SSL/TLS (اختصار لـ Secure Sockets Layer / Transport Layer Security). دي اللي بتقوم بعملية التشفير والتحقق من الهوية، وبتضمن إن البيانات تفضل سليمة بين الطرفين.
تعالى نتعمق شوية جوا.
دلوقتي أنت فتحت المتصفح بتاعك وهدفك تدخل تذاكر من موقع https://www.hiddenlockteam.com.
المتصفح بيحاول يوصل للسيرفر اللي عليه الموقع، والسيرفر بيرد عليه بشهادة الـ SSL/TLS، والشهادة دي جواها مفتاح تشفير بنقول عليه المفتاح العام (والسيرفر بيحتفظ بالمفتاح الخاص المسؤول عن فك التشفير).
بعد كده المتصفح بيتأكد من الشهادة دي ويشوف إذا كانت صالحة وصادرة من جهة إصدار شهادات موثوقة ولا لا (الجهات الموثوقة دي زي GoDaddy، وDigiCert، وComodo، وما إلى ذلك).
بمجرد ما المتصفح يتأكد إن الشهادة سليمة، المتصفح بيبدأ هو والسيرفر يتفقوا على مفتاح تشفير متماثل لجلسة الاتصال بينهم، وأخيرًا السيرفر بيبعت الموقع مشفر للمتصفح، والمتصفح بيفك تشفيره بالمفتاح المتفق عليه.
شوية ملاحظات:
1- لو شهادة SSL/TLS اللي السيرفر بعتها غير صالحة أو الموقع مش موثوق، المتصفح بيعرض رسالة تحذير للمستخدم.
2- شهادة SSL/TLS زمان كان اسمها SSL فقط، بس كانت شهادة فاشلة ومليانة ثغرات، وTLS ده التحديث بتاعها اللي حل كل المشاكل بتاعتها، ودلوقتي بقى بيطلق عليها SSL/TLS
🔥26👍13❤12👌2⚡1🏆1💘1
البوست ده من البشمهندس ابراهيم حجازي و ده اللينك بتاعه
https://www.facebook.com/share/p/1AzXzmE5WX/
إزاي تبدأ في مجال أمن المعلومات؟
أول خطوة هي انك تفهم الوظائف المختلفة في مجال أمن المعلومات عشان تقدر تحدد انت عايز تتخصص في إيه منها.
ده فيديو عملته بشرح فيه الوظائف المختلفه في مجال أمن المعلومات وإيه الكورسات اللي محتاجها عشان تبدأ فيها:
https://www.youtube.com/watch?v=fzkHCqCJ0as
بعد ما تفهم الوظائف المختلفة, دي roadmap مفصلة لتلات مجالات في أمن المعلومات (Red teaming, Pentesting and bug hunting) تمشي عليها من البداية لحد ما توصل لمستوي احترافي ان شاء الله:
https://www.youtube.com/watch?v=f3hP49LGoik&list=PLv7cogHXoVhVqQyou7hWWpUHwWZEcMR2x&index=5
وده الكورس اللي بشرح فيه مجال ال penetration testing واكتشاف الثغرات بالتفصيل:
https://www.youtube.com/watch?v=BjfCWSFmIFI&list=PLv7cogHXoVhXvHPzIl1dWtBiYUAL8baHj
وفي الفيديو ده هتلاقي نصائح لإزاي تجهز للإنترفيو و ايه الأسئلة اللي بتتسأل في مجالات ال Penetration testing, Malware analysis and SOC:
https://www.youtube.com/watch?v=4tAN5SpAj_g&list=PLv7cogHXoVhVqQyou7hWWpUHwWZEcMR2x
ولو عايز تدور علي وظيفة بره مصر, فده فيديو اتكلمت فيه مع مهندسين أمن معلومات من شركات عالمية زي Facebook, Deloitte, Visa وغيرها في دول مختلفة عن ازاي حصلو علي وظائفهم في الشركات دي وايه أسهل طريقة تقدر تلاقي وظيفة بره مصر في مجال أمن المعلومات:
https://www.youtube.com/watch?v=Oo0QTeV6WaY&list=PLv7cogHXoVhVqQyou7hWWpUHwWZEcMR2x&index=6
وهنا جمعتلكم لسته بمعظم شركات السكيورتي فمصر وصفحاتهم علي الفيس بوك ولينكد ان، فتابعهم عشان لما يعلنو عن الايفنتات والتدريب والوظايف:
https://www.facebook.com/Zigoo.eg/posts/pfbid028VwVQt7tSBDxFTYiJLxa3jxMVJwrFeyau4u8nUmNGhsfkVAcenkrBFttV1QdGztfl
وفي الأخير, النصيحة الذهبية اللي دايما بقولها هي انك تبدأ بتعلم البرمجة, عشان البرمجة هتسهل عليك دخول مجال أمن المعلومات بكل تخصصاته.
ولما نتكلم عن البرمجة فأفضل حد بيشرح بالعربي وعامل شروحات مفصلة لأكتر من لغة هو أسامة محمد. تقدر تتابعه علي صفحته هنا
https://www.facebook.com/OsElzero
أكتر سؤال بتسأله, اتعلم برمجة لغاية فين؟
لغاية ما تبقي قادر لوحدك تبرمج 5 مواقع بقاعدة بيانات وبصفحات مختلفة زي الصفحة الرئيسية للموقع وصفحة تسجيل في الموقع signup وصفحة تسجيل دخول وصفحة اضافة وتعديل اخبار وصفحة بحث في الاخبار وكام صفحة لمدير الموقع وهكذا. واعمل ده بافكار مختلفة زي موقع لادارة المخازن وموقع لادارة صيدلية الخ. لما تخلصهم انت كده مستواك كافي انك تدخل أمن المعلومات وهتتعلمه اسرع بكتير لانك بتعلمك للبرمجة قطعت مسافة كبيرة في أمن المعلومات نظرا لاعتمادها علي البرمجة.
أختار انهي لغة برمجة؟ اقرا عنهم واختار اللي لقيتها أسهل بالنسبالك. ولو دورت كتير ومش عارف تختار ايه, فتوكل علي الله واختار Python
رجاء, متفكرش كتير ومتسوفش ومتعملش خطط, ابدأ علطووول وكل حاجة هتوضح معاك في الطريق :D
ولو عطلت في حاجة او عندك أي سؤال فتقدر تنضم لينا في الجروب اللي بيضم أكبر عدد من المحترفين العرب في مجال أمن المعلومات اللي هيساعدوك ويجاوبو علي أسالتك:
https://www.facebook.com/groups/pentesting4arabs/
ولا تنسوني من دعائكم ولكم بالمثل ان شاء الله
https://www.facebook.com/share/p/1AzXzmE5WX/
إزاي تبدأ في مجال أمن المعلومات؟
أول خطوة هي انك تفهم الوظائف المختلفة في مجال أمن المعلومات عشان تقدر تحدد انت عايز تتخصص في إيه منها.
ده فيديو عملته بشرح فيه الوظائف المختلفه في مجال أمن المعلومات وإيه الكورسات اللي محتاجها عشان تبدأ فيها:
https://www.youtube.com/watch?v=fzkHCqCJ0as
بعد ما تفهم الوظائف المختلفة, دي roadmap مفصلة لتلات مجالات في أمن المعلومات (Red teaming, Pentesting and bug hunting) تمشي عليها من البداية لحد ما توصل لمستوي احترافي ان شاء الله:
https://www.youtube.com/watch?v=f3hP49LGoik&list=PLv7cogHXoVhVqQyou7hWWpUHwWZEcMR2x&index=5
وده الكورس اللي بشرح فيه مجال ال penetration testing واكتشاف الثغرات بالتفصيل:
https://www.youtube.com/watch?v=BjfCWSFmIFI&list=PLv7cogHXoVhXvHPzIl1dWtBiYUAL8baHj
وفي الفيديو ده هتلاقي نصائح لإزاي تجهز للإنترفيو و ايه الأسئلة اللي بتتسأل في مجالات ال Penetration testing, Malware analysis and SOC:
https://www.youtube.com/watch?v=4tAN5SpAj_g&list=PLv7cogHXoVhVqQyou7hWWpUHwWZEcMR2x
ولو عايز تدور علي وظيفة بره مصر, فده فيديو اتكلمت فيه مع مهندسين أمن معلومات من شركات عالمية زي Facebook, Deloitte, Visa وغيرها في دول مختلفة عن ازاي حصلو علي وظائفهم في الشركات دي وايه أسهل طريقة تقدر تلاقي وظيفة بره مصر في مجال أمن المعلومات:
https://www.youtube.com/watch?v=Oo0QTeV6WaY&list=PLv7cogHXoVhVqQyou7hWWpUHwWZEcMR2x&index=6
وهنا جمعتلكم لسته بمعظم شركات السكيورتي فمصر وصفحاتهم علي الفيس بوك ولينكد ان، فتابعهم عشان لما يعلنو عن الايفنتات والتدريب والوظايف:
https://www.facebook.com/Zigoo.eg/posts/pfbid028VwVQt7tSBDxFTYiJLxa3jxMVJwrFeyau4u8nUmNGhsfkVAcenkrBFttV1QdGztfl
وفي الأخير, النصيحة الذهبية اللي دايما بقولها هي انك تبدأ بتعلم البرمجة, عشان البرمجة هتسهل عليك دخول مجال أمن المعلومات بكل تخصصاته.
ولما نتكلم عن البرمجة فأفضل حد بيشرح بالعربي وعامل شروحات مفصلة لأكتر من لغة هو أسامة محمد. تقدر تتابعه علي صفحته هنا
https://www.facebook.com/OsElzero
أكتر سؤال بتسأله, اتعلم برمجة لغاية فين؟
لغاية ما تبقي قادر لوحدك تبرمج 5 مواقع بقاعدة بيانات وبصفحات مختلفة زي الصفحة الرئيسية للموقع وصفحة تسجيل في الموقع signup وصفحة تسجيل دخول وصفحة اضافة وتعديل اخبار وصفحة بحث في الاخبار وكام صفحة لمدير الموقع وهكذا. واعمل ده بافكار مختلفة زي موقع لادارة المخازن وموقع لادارة صيدلية الخ. لما تخلصهم انت كده مستواك كافي انك تدخل أمن المعلومات وهتتعلمه اسرع بكتير لانك بتعلمك للبرمجة قطعت مسافة كبيرة في أمن المعلومات نظرا لاعتمادها علي البرمجة.
أختار انهي لغة برمجة؟ اقرا عنهم واختار اللي لقيتها أسهل بالنسبالك. ولو دورت كتير ومش عارف تختار ايه, فتوكل علي الله واختار Python
رجاء, متفكرش كتير ومتسوفش ومتعملش خطط, ابدأ علطووول وكل حاجة هتوضح معاك في الطريق :D
ولو عطلت في حاجة او عندك أي سؤال فتقدر تنضم لينا في الجروب اللي بيضم أكبر عدد من المحترفين العرب في مجال أمن المعلومات اللي هيساعدوك ويجاوبو علي أسالتك:
https://www.facebook.com/groups/pentesting4arabs/
ولا تنسوني من دعائكم ولكم بالمثل ان شاء الله
❤38👍11❤🔥6⚡2💘2🔥1
OneCube
البوست ده من البشمهندس ابراهيم حجازي و ده اللينك بتاعه https://www.facebook.com/share/p/1AzXzmE5WX/ إزاي تبدأ في مجال أمن المعلومات؟ أول خطوة هي انك تفهم الوظائف المختلفة في مجال أمن المعلومات عشان تقدر تحدد انت عايز تتخصص في إيه منها. ده فيديو عملته…
مهم تشوف البوست ده و تشوف الفديوهات لو مهتم بتخصص من دول
Red teaming
Pentesting
Bug hunting
Malware analysis
SOC
لو مش عارف عاوز تخصص ايه هو بيتكلم عن ده برضو ف فديو
Red teaming
Pentesting
Bug hunting
Malware analysis
SOC
لو مش عارف عاوز تخصص ايه هو بيتكلم عن ده برضو ف فديو
❤16⚡1❤🔥1🔥1👌1💘1
يعني إيه URL؟
الـ URL ده زي العنوان اللي بتكتبه عشان تبعت جواب.
مثلا معانا اللينك ده
http://admin:password@example.com:80/dashboard.php?login=true#top
تعال نشرح اللينك ده براحة:
Scheme (http://): ده زي ما تقول طريقة التوصيل... بالعربية ولا بالدليفري.
User Info (admin:password@): لو الموقع عنده "بواب" بيطلب باسورد، ده الكود اللي هتقدمه عشان تعدي.
Host (example.com): عنوان البيت اللي عايز تزوره.
Port (:80): دي شقة كام؟ لو مش محدد، غالبًا هي الشقة الأرضي (80).
Path (/dashboard.php): أهو ده المكان اللي عايز توصله جوة البيت، زي المطبخ بالضبط.
Query String (?login=true): لو عايز تسأل عن حاجة مخصوصة.
Fragments (#top): الجزء اللي عايز تبدأ منه، زي ما تدخل وتقول: "فين الكرسي بتاعي؟".
تدفق HTTP:
أول ما تكتب عنوان الموقع في المتصفح، ده اللي بيحصل:
1. المتصفح يسأل: "يا DNS، فين عنوان البيت بتاع الموقع؟".
2. الـ DNS يقول: "استنى، ده عنوانه 93.184.215.14"
3. المتصفح يروح يخبط على الباب ويقول: "لو سمحت، أنا عايز الصفحة الرئيسية".
4. الموقع يرد: "خدها يا معلم، وعليها بوسة كود 200 OK!"
ملحوظة: لو لقيت كود "503"، ده معناه إن الخادم في إجازة وبيقولك "تعالى بكرة".
أداة cURL:
لو عايز تبعت طلبات للمواقع من غير دوشة المتصفح، عندك أداة اسمها cURL.
تستخدم cURL إزاي؟
لو عايز تشوف الموقع في شكله الخام:
$ curl http://testphp.vulnweb.com
ده زي ما تكون بتطلب أكل وتاخده على السريع من غير ديكور. مش هتشوف الصور ولا الألوان... بس كل حاجة أصلية.
لو عايز تحفظ الصفحة عندك:
$ curl -O http://testphp.vulnweb.com/index.html
ده كأنك بتاخد الأكل "تيك أواي" وتحطه في كيس.
لو عايز تحفظ الصفحة عندك من غير ما تظهر النتيجة:
$ curl -s -O http://testphp.vulnweb.com/index.html
هنا بقى cURL يقولك: "ماشي يا باشا، أنا هشتغل في هدوء."
لو عايز تعرف كل الخيارات:
$ curl -h
لحد دلوقتي كنا بنتعامل مع بروتوكول http في الأمثلة اللي فاتت.
دلوقتي ندخل على بروتوكول https.
لما بتستخدم أداة curl على بروتوكول https هو تلقائيًا بيعمل المصافحة الآمنة (SSL Handshake) وتشفير وفك تشفير البيانات. بس طبعًا ده مش هيغير أي حاجة من طريقة الاستخدام عن بروتوكول http وتقدر تسحب الصفحة بالأمر ده برضو:
$ curl https://example.com
بس لو انت دلوقتي عاوز تخترق موقع وجيت تفتحه ولقيت المتصفح بيقولك إن الشهادة غير صالحة وما رضيش يفتحلك الموقع، دي هتكون مشكلة.
بس بسيطة، حلها هو ده:
$ curl -k https://example.com
كده هيتم تنفيذ الطلب بنجاح، وهتظهر النتيجة زي كده:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
...SNIP...
كل اللي عملته هنا هو إني تخطيت التحقق من أمان الشهادة باستخدام الخيار -k.
1❤23👍4❤🔥2🔥2⚡1😍1🏆1🫡1💘1
❤19😁4👍3🔥2⚡1❤🔥1💘1
طلبات واستجابات HTTP
لما بنفتح موقع على النت، فيه حاجة بتحصل في الخلفية اسمها "طلبات واستجابات HTTP". ببساطة، متصفحك (أو أداة زي cURL) هو اللي بيبعت طلب للخادم (Server) عشان يجيبلك الصفحة أو الحاجة اللي عايزها.
الطلب (Request)
الطلب ده بيكون عبارة عن شوية معلومات:
1. الطريقة (Method): بتحدد نوع العملية زي GET (عشان تجيب بيانات) أو POST (لما تبعت بيانات).
2. المسار (Path): هو العنوان اللي عايز توصل له على الموقع، زي
/users/login.html.3. الإصدار (Version): زي HTTP/1.1 (ده نوع البروتوكول اللي شغال بيه الطلب).
الرؤوس (Headers) بتكون بيانات إضافية زي User-Agent اللي بيقول للسيرفر نوع الجهاز أو البرنامج اللي بتستخدمه. وفي الآخر ممكن يكون فيه بيانات زي لو كنت بتبعت فورمة (Form) فيها معلومات.
الاستجابة (Response)
السيرفر لما يستلم طلبك، بيرد عليك بحاجة اسمها "Response".
- أول حاجة بيقولك حالة الطلب بكود زي 200 OK (يعني نجح) أو 401 Unauthorized (يعني مرفوض).
- بعد كده بيبعت بيانات زي Date (تاريخ الاستجابة) و
Content-Type (نوع البيانات المرسلة). - وأخيرًا، ممكن تلاقي المحتوى نفسه زي صفحة HTML أو JSON (اللي هو بيانات).
---
استخدام cURL في انك تعرض الطلب و الاستجابه اللي بتبعتهم و تستلمهم من الموقع.
curl example.com -v
هتلاقي تفاصيل الطلب والاستجابة بالكامل. الطلب ممكن تلاقي فيه:
GET / HTTP/1.1 (الطلب).
والاستجابة فيها:
401 Unauthorized (مش مسموح).
لو عايز تفاصيل أكتر، استخدم -vvv بدل -v.
التفاصيل دي هتظهرلك حتي التعامل مع شهاده ال ssl/tls.
ده مثال لطلب المتصفح او الاداه بتبعته عشان تجيب الموقع.
GET / HTTP/2
Host: example.com
User-Agent: curl/8.9.1
Accept: */*
Request completely sent off
TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
ده مثال للاستجابه اللي بتستقبلها.
HTTP/2 200
age: 324568
cache-control: max-age=604800
content-type: text/html; charset=UTF-8
date: Sat, 04 Jan 2025 19:17:30 GMT
etag: "3147526947+gzip+ident"
expires: Sat, 11 Jan 2025 19:17:30 GMT
last-modified: Thu, 17 Oct 2019 07:18:26 GMT
server: ECAcc (bsb/27BB)
vary: Accept-Encoding
x-cache: HIT
content-length: 1256
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
.............
طبعا ده مش الرد كله انا حطيت جزء بس عشان البوست ميبقاش طويل.
ملحوظه: لما تفتح موقع زي http://example.com بدل ما يكون https://example.com، المفروض الموقع يحولك تلقائيًا للنسخة الآمنة باستخدام HTTPS (لو محولش علي https ف دي تبقي ثغره ف الموقع اسمها Lack of HTTP Strict Transport Security - HSTS).
❤🔥17❤8👍4👏4🔥1😍1💯1💘1
اللي مهتم بمجال DevOps دي Roadmap ليكم
https://github.com/mtahle/DevOps-Foundation-Roadmap
و ده جروب في ناس كتير شاطره ف المجال هتفيدكم جدا
https://t.me/aSysAdmins
https://github.com/mtahle/DevOps-Foundation-Roadmap
و ده جروب في ناس كتير شاطره ف المجال هتفيدكم جدا
https://t.me/aSysAdmins
❤8👍8❤🔥5🔥1🏆1💘1
OneCube
اللي مهتم بمجال DevOps دي Roadmap ليكم https://github.com/mtahle/DevOps-Foundation-Roadmap و ده جروب في ناس كتير شاطره ف المجال هتفيدكم جدا https://t.me/aSysAdmins
المشكله اتحلت ياشباب تقدرو تدخلو دلوقتي 👍
❤🔥6❤2👍1🔥1😍1🏆1
شرح ال HTTP Headers
الـ HTTP Headers دي جزء مهم من عملية التواصل بين العميل (اللي هو المتصفح) والسيرفر (اللي هو الخادم). الـ Headers دي بتنقل معلومات بين الطرفين. في Headers بتكون خاصة بالطلبات أو الردود، وفيه كمان Headers مشتركة بين الطلبات والردود.
أنواع الـ HTTP Headers:
1. General Headers (الهيدر العامة):
دي بتكون موجودة في الطلبات والردود، ومش بتخص المحتوى اللي بتبعت أو بتستقبل، ولكن بتوصف الرسالة نفسها. مثال:
- Date: بيحتفظ بوقت وتاريخ إرسال الرسالة.
- Connection: بتحدد إذا كان الاتصال هيبقى مفتوح بعد ما الرسالة تخلص ولا لأ.
2. Entity Headers (الهيدر الخاصة بالمحتوى):
بتوصف نوع المحتوى اللي تم نقله في الرسالة، يعني مثلاً لو بعت صورة أو ملف PDF. ممكن تشوفها في الردود أو الطلبات زي:
- Content-Type: بتوضح نوع المحتوى زي "text/html" أو "application/pdf".
- Content-Length: بتحدد حجم المحتوى اللي تم نقله.
- Content-Encoding: بتحدد إذا كان المحتوى مضغوط ولا لأ (زي gzip).
3. Request Headers (هيدر الطلب):
دي هي الـ Headers اللي العميل (المتصفح) بيبعتها مع الطلب علشان توضح تفاصيل عن الطلب. زي:
- Host: بتحدد اسم الموقع أو الـ IP اللي العميل عايز يتواصل معاه.
- User-Agent: بتوضح معلومات عن المتصفح والـ OS اللي العميل بيستخدمهم.
- Cookie: بيبعت الـ Cookies مع الطلب علشان السيرفر يعرف العميل ده مين.
4. Response Headers (هيدر الرد):
دي الـ Headers اللي السيرفر بيرجعها مع الرد على العميل. زي:
- Server: بيقول إيه نوع السيرفر اللي رد.
- Set-Cookie: بيحدد الـ Cookies اللي لازم يخزنها العميل.
- WWW-Authenticate: لو الرد بيطلب مصادقة (Authentication).
5. Security Headers (هيدر الأمان):
في بعض الـ Headers دي اللي بتساعد في تأمين الاتصال والحد من الهجمات. زي:
- Content-Security-Policy: بيحدد السياسات الخاصة بالحماية، زي مثلاً إيه السكربتات المسموح ليها تشتغل على الصفحة.
- Strict-Transport-Security: بيجبر المتصفح يستخدم HTTPS بدل HTTP علشان تأمين البيانات.
في الجزء اللي فات شفنا إزاي باستخدام العلامة
-v مع cURL نقدر نعرف تفاصيل كاملة عن طلب واستجابة الـ HTTP. لكن لو عاوزين نشوف رؤوس الاستجابة بس (Headers)، ممكن نستخدم العلامة -I اللي بتعمل طلب نوعه HEAD وبتعرض رؤوس الاستجابة فقط. ولو عايزين نشوف الرؤوس مع جسم الاستجابة (زي الـ HTML) ممكن نستخدم العلامة -i. الفرق إن -I بيبعت طلب HEAD بس، لكن -i بيعرض الرؤوس مع أي طلب بنحدده.مثال: استخدام علامة -I:
$ curl -I https://example.com
Host: example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko)
Cookie: cookie1=298zf09hf012fh2; cookie2=u32t4o3tb3gg4
Accept: text/plain
Referer: https://example.com/
Authorization: BASIC cGFzc3dvcmQK
Date: Sun, 06 Aug 2020 08:49:37 GMT
Connection: keep-alive
Content-Length: 26012
Content-Type: text/html; charset=ISO-8859-4
Content-Encoding: gzip
Server: Apache/2.2.14 (Win32)
Set-Cookie: name1=value1,name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
WWW-Authenticate: BASIC realm="localhost"
Content-Security-Policy: script-src 'self'
Strict-Transport-Security: max-age=31536000
Referrer-Policy: origin
راجع الرؤوس اللي فوق، وحاول تفتكر دور كل واحد منها.
تعيين رؤوس الطلب (Request Headers)
اداة cURL بتسمح لنا نحدد رؤوس الطلب باستخدام العلامة -H. لكن فيه بعض الرؤوس ليها علامات مخصصة.
مثلاً، لو عايزين نغير قيمة User-Agent ممكن نستخدم العلامة -A كالتالي:
$ curl https://www.inlanefreight.com -A 'Mozilla/5.0'
ده هيغير رأس User-Agent للقيمة اللي اخترناها.
جرب تستخدم العلامتين -I أو -v مع المثال ده، وتأكد إن رأس User-Agent اتغير باستخدام -A.
بكده هتقدر تحلل أي طلب HTTP أو استجابة مباشرة من المتصفح!
🔥11❤6👍6❤🔥3⚡1😍1💘1
شرح HTTP Methods and Codes
بروتوكول HTTP بيشتغل بطرق مختلفة عشان نقدر نوصل للمصادر أو البيانات اللي محتاجينها من السيرفر. الطرق دي بتسمح للمتصفح (زي جوجل كروم أو فايرفوكس) إنه يبعت معلومات أو ملفات للسيرفر، وكمان بتحدد للسيرفر إزاي يتعامل مع الطلب اللي بنبعته ويرد علينا إزاي.
إحنا شفنا شوية طرق مختلفة في طلبات HTTP لما جربناها قبل كده. لما بنستخدم cURL مع الخيار -v عشان نشوف تفاصيل الطلب بالكامل، بنلاقي السطر الأول فيه نوع الطريقة اللي استخدمناها (زي GET / HTTP/1.1). في أدوات المطور الموجودة في المتصفح، بنشوف الطريقة دي في عمود اسمه "Method". كمان في رد السيرفر، بنلاقي أكواد استجابة HTTP اللي بتقولنا حالة الطلب اللي بعتناه إذا كان ناجح أو فيه مشكلة.
طرق الطلبات (Request Methods)
في HTTP، فيه طرق مختلفة بنستخدمها عشان نطلب بيانات من السيرفر أو نبعتله بيانات. دول شوية طرق مشهورة:
طريقة GET: بنطلب حاجة معينة من السيرفر، زي لما تفتح صفحة ويب. ممكن كمان نبعت بيانات إضافية للسيرفر عن طريق الحاجات اللي بنكتبها بعد علامة الاستفهام في الرابط (زي ?param=value).
طريقة POST: بنبعت بيانات للسيرفر، زي لما تكتب في فورم تسجيل الدخول أو ترفع صورة. البيانات دي بتتبعت في جسم الطلب (Body) بعد الترويسات.
طريقة HEAD: بنطلب من السيرفر يرد علينا بنفس الترويسات اللي كان هيبعتها مع طلب GET، بس من غير ما يبعث جسم الطلب نفسه. مفيدة لو عايز تعرف حجم الملف قبل ما تنزله.
طريقة PUT: بنستخدمها عشان نعمل مورد جديد على السيرفر. لو استخدمناها من غير حماية كويسة، ممكن حد يرفع حاجات مضرة.
طريقة DELETE: زي ما الاسم بيقول، بنحذف مورد موجود على السيرفر. لو ما تأمنتش، ممكن تتسبب في مشاكل كبيرة زي حذف ملفات مهمة وتعطيل السيرفر (DoS).
طريقة OPTIONS: بنسأل السيرفر عن الطرق اللي بيدعمها، يعني بنطلب معلومات عنه.
طريقة PATCH: بنعمل تعديلات بسيطة على حاجة موجودة بدل ما نغيرها بالكامل.
القائمة دي فيها الطرق الأكثر شيوعًا، لكن فيه طرق تانية ممكن تكون متاحة حسب إعدادات السيرفر والتطبيق اللي بتستخدمه.
معلومة مهمة: معظم مواقع الويب بتستخدم طريقتين أساسيين هما GET وPOST. لو الموقع بيشتغل مع REST APIs، هيحتاج كمان PUT وDELETE عشان يقدر يحدث البيانات أو يحذفها من نقاط النهاية (endpoints).
أكواد الاستجابة (Response Codes)
أكواد حالة HTTP بتوضحلك إيه اللي حصل مع الطلب اللي بعتته للسيرفر. السيرفر ممكن يرد بخمس أنواع من الأكواد:
1xx: معلومات بس، ومش بتأثر على معالجة الطلب.
2xx: الطلب نجح تمام.
3xx: السيرفر بيعمل إعادة توجيه لعنوان تاني.
4xx: فيه مشكلة في الطلب من ناحية العميل، زي طلب حاجة مش موجودة أو تنسيق غلط.
5xx: فيه مشكلة في السيرفر نفسه.
أمثلة على الأكواد دي:
200 OK: الطلب نجح، والسيرفر رجع البيانات المطلوبة.
302 Found: بيحولك لعنوان تاني، زي لما تدخل على صفحة وتتنقل تلقائيًا للوحة التحكم بعد تسجيل الدخول.
400 Bad Request: الطلب فيه خطأ، زي طلب ناقص أو مش مكتوب بطريقة صحيحة.
403 Forbidden: معندكش صلاحية تشوف المورد ده، أو السيرفر اكتشف حاجة مشبوهة في المدخلات اللي بعتها.
404 Not Found: المورد اللي بتدور عليه مش موجود على السيرفر.
500 Internal Server Error: السيرفر حصل فيه مشكلة ومقدرش يتعامل مع الطلب.
فيه أكواد كتيرة تانية، وفيه خوادم زي Cloudflare وAWS بتستخدم أكواد خاصة بيها كمان. لو عايز تعرف اكواد اكتر، ممكن تشوف ده: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status .
❤🔥12👍6❤1🔥1👌1😍1🏆1
طلبات GET
لما بنفتح عنوان URL، المتصفح بيستخدم طلب GET بشكل افتراضي عشان يجيب المحتوى أو الموارد اللي موجودة في السيرفر. الطلب ده زي ما يكون بيقول للسيرفر: "هاتيلي الصفحة دي". أول ما المتصفح يستلم الصفحة الرئيسية، ممكن يبعت طلبات تانية للسيرفر باستخدام طرق HTTP مختلفة زي POST، PUT، أو DELETE على حسب الوظائف اللي الصفحة بتقدمها.
المصادقة الأساسية HTTP Basic Auth
المصادقة الأساسية Basic Auth هي طريقة بسيطة للتحقق من هوية المستخدمين عند وصولهم لصفحة محمية. في الطريقة دي، المتصفح أو العميل بيطلب من المستخدم يدخل اسم مستخدم وكلمة مرور، وده بيتم إرسالهم مباشرة للسيرفر في رأس الطلب (HTTP Header).
المصادقة دي بتكون في شكل اسم مستخدم وكلمة مرور، واللي بيتم تشفيرهم بطريقة Base64، وبعد كده السيرفر بيقرر إذا كان هيسمح للمستخدم بالدخول أو لا بناءً على البيانات دي.
الميزة الرئيسية في المصادقة الأساسية هي إنها بتتم بشكل مباشر من خلال السيرفر، دون الحاجة لتفاعل مع التطبيق نفسه زي ما بيحصل مع طرق المصادقة التانية اللي بتعتمد على POST أو الجلسات (sessions).
إزاي المصادقة الأساسية بتشتغل؟
المستخدم بيبعت بيانات الاعتماد (اسم المستخدم وكلمة المرور) مع كل طلب.
السيرفر بيستخدم هذه البيانات عشان يتأكد من صحة المستخدم.
لو البيانات صحيحة، بيتم السماح بالوصول للمحتوى.
لو البيانات مش صحيحة، السيرفر بيرفض الوصول ويطلب إعادة المحاولة.
المصادقة دي بتستخدم لحماية الصفحات أو الأدلة على السيرفر بدون ما يتدخل التطبيق في عملية التحقق، وده بيخليها بسيطة لكنها في نفس الوقت مش دايمًا آمنة لو ما استخدمناش HTTPS عشان نأمن نقل البيانات.
لو حبينا نخش الصفحة باستخدام أمر cURL، ممكن نضيف الخيار -i عشان نعرض رؤوس الاستجابة مع المحتوى. هنعمل كده:
$ curl -i http://<SERVER_IP>:<PORT>/
في الاستجابة هنشوف كده:
HTTP/1.1 401 Authorization Required
Date: Mon, 21 Feb 2022 13:11:46 GMT
Server: Apache/2.4.41 (Ubuntu)
Cache-Control: no-cache, must-revalidate, max-age=0
WWW-Authenticate: Basic realm="Access denied"
Content-Length: 13
Content-Type: text/html; charset=UTF-8
Access denied
زي ما هنشوف، في الاستجابة مكتوب "Access denied" (دخول مرفوض) في المحتوى، وفيه برضه رأس WWW-Authenticate: Basic realm="Access denied"، وده بيأكد إن الصفحة دي بتستخدم المصادقة الأساسية HTTP Basic Auth.
لو عايزين نبعت بيانات الاعتماد باستخدام cURL، بنستخدم الخيار -u عشان نحدد اسم المستخدم وكلمة المرور زي كده:
$ curl -u admin:admin http://<SERVER_IP>:<PORT>/
المرة دي هنشوف المحتوى بتاع الصفحة في الاستجابة:
<!DOCTYPE html>
<html lang="en">
<head>
...SNIP...
فيه كمان طريقة تانية إننا نضيف بيانات الاعتماد في الرابط نفسه كده: username:password@URL، زي ما شرحنا في القسم الأول. لو جربنا نرسل نفس الطلب باستخدام cURL أو المتصفح، هنقدر نوصل للصفحة زي كده:
$ curl http://admin:admin@<SERVER_IP>:<PORT>/
وهنشوف نفس المحتوى في الاستجابة. كمان لو جربنا نفس الرابط في المتصفح، هيتم المصادقة بنجاح وهنشوف الصفحة.
رأس HTTP Authorization Header
لو أضفنا الخيار -v لأوامر cURL السابقة، هنعرف أكتر عن تفاصيل الطلب اللي بيتبعت، زي كده:
$ curl -v http://admin:admin@<SERVER_IP>:<PORT>/
الاستجابة هتكون زي دي:
* Trying <SERVER_IP>:<PORT>...
* Connected to <SERVER_IP> (<SERVER_IP>) port PORT (#0)
* Server auth using Basic with user 'admin'
> GET / HTTP/1.1
> Host: <SERVER_IP>
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.77.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 21 Feb 2022 13:19:57 GMT
< Server: Apache/2.4.41 (Ubuntu)
< Cache-Control: no-store, no-cache, must-revalidate
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Pragma: no-cache
< Vary: Accept-Encoding
< Content-Length: 1453
< Content-Type: text/html; charset=UTF-8
<
<!DOCTYPE html>
<html lang="en">
<head>
...SNIP...
في الطلب ده، هنلاحظ إن فيه رأس اسمه Authorization فيه القيمة:
Basic YWRtaW46YWRtaW4=
والقيمة دي هي Base64 مشفرة للبيانات admin:admin. لو كنا بنتعامل مع أساليب مصادقة حديثة زي JWT (اللي هي رمز الوصول)، كان هيبقى نوع المصادقة هو Bearer ومش هيكون فيه قيمة صغيرة زي دي، بل هيبقى فيه رمز طويل مشفر.
❤🔥9❤6👍6😍1🏆1💘1
إعداد رأس Authorization يدويًا
ممكن كمان نضيف رأس Authorization يدويًا من غير ما ندي بيانات الاعتماد بشكل مباشر، زي كده:
وهنشوف نفس الاستجابة زي ما كانت، وبالتالي هنقدر نوصل للصفحة.
في التطبيقات الحديثة، بيتم استخدام نماذج تسجيل الدخول اللي بتعتمد على لغات البرمجة الخلفية زي PHP. النماذج دي بتستخدم طلبات POST عشان تتحقق من المستخدمين، وبعد كده بترجع كوكيز (ملفات تعريف الارتباط) عشان تحافظ على الجلسة.
معاملات GET
بعد تسجيل الدخول بنجاح، هتلاقي ميزة بتسمحلك تدخل نص معين، والصفحة هتعرض النتيجة المناسبة.
الصفحة بتجيب البيانات منين؟
لما بتدخل النص وتضغط على البحث، الصفحة ممكن تتواصل مع السيرفر عشان تجيب البيانات المطلوبة. عشان تتأكد من ده، افتح أدوات المطور في المتصفح (DevTools) وروح على تبويب Network باستخدام [CTRL+SHIFT+E].
قبل ما تدخل أي نص، اضغط على أيقونة سلة المهملات لمسح الطلبات القديمة ومتابعة الجديدة بس (جرب علي موقع hiddenlockteam.com).
ملاحظة الطلبات الجديدة
لما تضغط على بحث، هتشوف طلب جديد بيتبعت للسيرفر، بيكون موجه لملف معين زي search.php (مش شرط يظهر امتداد الملف) مع معاملات GET في الرابط. المعاملات دي بتكون في صيغة:
?search=الكلمة
ده بيوضح إن الصفحة بتعتمد على طلب GET لجلب النتائج.
إرسال طلب GET باستخدام cURL
ممكن تبعت نفس الطلب باستخدام cURL بالشكل التالي:
الاستجابة هتكون النتيجة اللي السيرفر بيرجعها بناءً على النص اللي أدخلته.
نسخ طلب GET باستخدام المتصفح
المتصفح بيوفر خيار لنسخ الطلب بسهولة. كليك يمين على الطلب في تبويب Network واختار Copy > Copy as cURL. تقدر تلصق الأمر في التيرمينال وتنفيذه عشان تشوف نفس الاستجابة. كمان تقدر تستخدم Copy as Fetch وتنفذه من Console.
عرض تفاصيل الاستجابة
لما تنفذ الطلب، الاستجابة هتظهر بالكامل. تقدر تضغط عليها وتشوف تفاصيل كل جزء عشان تفهم أكتر ازاي السيرفر بيرد على الطلبات.
ممكن كمان نضيف رأس Authorization يدويًا من غير ما ندي بيانات الاعتماد بشكل مباشر، زي كده:
$ curl -H 'Authorization: Basic YWRtaW46YWRtaW4=' http://<SERVER_IP>:<PORT>/
وهنشوف نفس الاستجابة زي ما كانت، وبالتالي هنقدر نوصل للصفحة.
في التطبيقات الحديثة، بيتم استخدام نماذج تسجيل الدخول اللي بتعتمد على لغات البرمجة الخلفية زي PHP. النماذج دي بتستخدم طلبات POST عشان تتحقق من المستخدمين، وبعد كده بترجع كوكيز (ملفات تعريف الارتباط) عشان تحافظ على الجلسة.
معاملات GET
بعد تسجيل الدخول بنجاح، هتلاقي ميزة بتسمحلك تدخل نص معين، والصفحة هتعرض النتيجة المناسبة.
الصفحة بتجيب البيانات منين؟
لما بتدخل النص وتضغط على البحث، الصفحة ممكن تتواصل مع السيرفر عشان تجيب البيانات المطلوبة. عشان تتأكد من ده، افتح أدوات المطور في المتصفح (DevTools) وروح على تبويب Network باستخدام [CTRL+SHIFT+E].
قبل ما تدخل أي نص، اضغط على أيقونة سلة المهملات لمسح الطلبات القديمة ومتابعة الجديدة بس (جرب علي موقع hiddenlockteam.com).
ملاحظة الطلبات الجديدة
لما تضغط على بحث، هتشوف طلب جديد بيتبعت للسيرفر، بيكون موجه لملف معين زي search.php (مش شرط يظهر امتداد الملف) مع معاملات GET في الرابط. المعاملات دي بتكون في صيغة:
?search=الكلمة
ده بيوضح إن الصفحة بتعتمد على طلب GET لجلب النتائج.
إرسال طلب GET باستخدام cURL
ممكن تبعت نفس الطلب باستخدام cURL بالشكل التالي:
$ curl 'http://<SERVER_IP>:<PORT>/search.php?search=النص' -H 'Authorization: Basic YWRtaW46YWRtaW4='
الاستجابة هتكون النتيجة اللي السيرفر بيرجعها بناءً على النص اللي أدخلته.
نسخ طلب GET باستخدام المتصفح
المتصفح بيوفر خيار لنسخ الطلب بسهولة. كليك يمين على الطلب في تبويب Network واختار Copy > Copy as cURL. تقدر تلصق الأمر في التيرمينال وتنفيذه عشان تشوف نفس الاستجابة. كمان تقدر تستخدم Copy as Fetch وتنفذه من Console.
عرض تفاصيل الاستجابة
لما تنفذ الطلب، الاستجابة هتظهر بالكامل. تقدر تضغط عليها وتشوف تفاصيل كل جزء عشان تفهم أكتر ازاي السيرفر بيرد على الطلبات.
👍9❤🔥3❤3🔥2⚡1🏆1💘1
طلبات POST
في الجزء اللي فات، شفنا إزاي طلبات GET بتتستخدم في تطبيقات الويب عشان تعمل حاجات زي البحث أو الوصول لصفحات معينة. لكن لما تطبيقات الويب تحتاج تبعت ملفات أو تخلي بيانات المستخدم تبقى بعيد عن اللينك (URL)، بتستخدم طلبات POST.
الفرق بين GET وPOST هو إن GET بيحط البيانات اللي بتدخلها في اللينك اللي بتشوفه فوق في المتصفح، إنما POST بيخلي البيانات جوه جسم الطلب (HTTP Request body)، وده ليه ٣ مميزات:
1. مفيش تسجيل للبيانات (Logging): لأن طلبات POST ممكن تنقل ملفات كبيرة زي لما ترفع ملف على موقع، فمش عملي إن السيرفر يسجل كل البيانات دي في اللينك زي ما كان هيحصل لو استخدمت GET.
2. ترميز أقل (Less Encoding): اللينكات مصممة عشان تتشارك بسهولة، فلازم تكون مكتوبة بحروف معينة. بس POST بيخلي البيانات جوه جسم الطلب، فممكن تستخدم أي نوع بيانات حتى لو كانت صور أو ملفات، والترميز بيكون بس للفواصل بين البيانات.
3. تقدر تبعت بيانات أكتر: المتصفحات والخوادم بيحددوا حد أقصى لطول اللينك (URL)، وعادةً مش لازم تعدي 2000 حرف. لكن مع POST تقدر تبعت كميات أكبر من البيانات لأن الطول مش مشكلة زي GET.
نماذج تسجيل الدخول
لما نجرب ندخل علي صفحة باسم المستخدم admin وكلمة السر admin، بننجح في الدخول، وبيظهرلنا الصفحة.
لو مسحنا كل البيانات اللي في تبويب الشبكة (Network) في أدوات المطور في المتصفح وجربنا نسجل دخول تاني، هنلاقي طلبات كتير بتتبعت. نقدر نصفي الطلبات ونخليها بس اللي رايحة لخادم تطبيق الويب بتاعنا (يعني نستبعد الطلبات الخارجية)، وهنلاحظ طلب POST مبعوت بالشكل ده: web_requests_login_request
نقدر نضغط على الطلب ده، وبعدين نروح لتبويب Request عشان نشوف جسم الطلب (Body)، وبعد كده نضغط على زر Raw عشان نشوف البيانات اللي اتبعتت. هنلاقي البيانات المبعوتة شكلها كده:
username=admin&password=admin
دلوقتي معانا بيانات الطلب، نقدر نحاول نبعت طلب زي ده باستخدام cURL ونشوف هل هنقدر نسجل الدخول ولا لأ. زي ما عملنا قبل كده، ممكن نضغط كليك يمين على الطلب ونختار Copy>Copy as cURL. لكن مهم نتعلم إزاي نبني طلبات POST بإيدينا، فتعالوا نجرب نعمل كده.
هنستخدم الخيار -X POST عشان نبعت طلب POST. وبعدين نستخدم -d لإضافة البيانات اللي هنبعتها، زي المثال ده:
$ curl -X POST -d 'username=admin&password=admin' http://<SERVER_IP>:<PORT>/
<!DOCTYPE html>
<html lang="en">
<head>
...SNIP...
لما نبص على كود الـ HTML، مش هنلاقي كود نموذج تسجيل الدخول، لكن هنشوف كود الصفحة بعد التسجيل.
ملاحظة: في نماذج تسجيل دخول كتير، ممكن يحصل إعادة توجيه لصفحة تانية لما ندخل بنجاح (زي /dashboard.php). لو عاوزين نتابع إعادة التوجيه دي باستخدام cURL، ممكن نستخدم الخيار -L.
الكوكيز (Cookies) بعد تسجيل الدخول
لما بنسجل دخول بنجاح، المتصفح بياخد حاجة اسمها كوكيز عشان يفضل فاكر إننا متسجلين دخول. ده بيسهل علينا استخدام الموقع من غير ما ندخل بياناتنا كل مرة. ممكن نستخدم الأمر -v أو -i مع cURL عشان نشوف الاستجابة، وهنلاقي جزء فيها بيقول Set-Cookie مع الكوكي اللي بتثبت إننا متسجلين:
$ curl -X POST -d 'username=admin&password=admin' http://<SERVER_IP>:<PORT>/ -i
HTTP/1.1 200 OK
Date:
Server: Apache/2.4.41 (Ubuntu)
Set-Cookie: PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1; path=/
دلوقتي، عندنا الكوكيز اللي بتأكد إننا متسجلين دخول. ممكن نستخدمها بدل ما نكتب اسم المستخدم والباسورد كل مرة. نعمل ده باستخدام الخيار -b في cURL كده:
$ curl -b 'PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' http://<SERVER_IP>:<PORT>/
هنلاقي إننا مسجلين دخول وبنوصل للبحث من غير ما نرجع نسجل تاني. كمان ممكن نستخدم الكوكي كـ Header بالطريقة دي:
$ curl -H 'Cookie: PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' http://<SERVER_IP>:<PORT>/
لو جربنا بنفسنا في المتصفح، بنعمل Logout الأول ونرجع لصفحة تسجيل الدخول. بعدين نفتح أدوات المطور (DevTools) ونروح على علامة تبويب Storage باستخدام [SHIFT+F9]. بنشوف الكوكيز تحت Cookies ونختار موقعنا. لو مش مسجلين، الكوكي بتاع PHPSESSID مش هيكون فعال، وهنشوف صفحة تسجيل الدخول بدل البحث.
عشان نستخدم الكوكي اللي معانا، ممكن نغير قيمته أو نحذف كل الكوكيز ونعمل واحدة جديدة بالضغط على +. بنكتب اسم الكوكي PHPSESSID والقيمة c1nsa6op7vtk7kdis7bcnbadf1. بعد ما نحدث الصفحة، هنلاقي إننا مسجلين دخول من غير ما نكتب بيانات تاني.
بالتالي، وجود كوكي صالح ممكن يخليك تدخل تطبيقات ويب كتير من غير كلمة سر، وده بيستخدم في بعض الهجمات زي XSS (Cross-Site Scripting).
❤4🔥4👍3❤🔥1⚡1💘1
التعامل مع بيانات JSON
لما بنستخدم وظيفة البحث في الموقع، ممكن نتابع الطلبات اللي بتتبعت باستخدام أدوات المطور في المتصفح. بنروح على علامة تبويب الشبكة (Network) ونضغط على سلة المهملات لتفريغ الطلبات القديمة. بعد كده، بنعمل بحث بأي مدينة ونشوف الطلبات اللي اتبعتت.
هنلاقي إن الطلب بيتبعت كـ POST لملف اسمه search.php، والبيانات اللي بيتعامل معاها مكتوبة بالشكل ده:
{"search":"london"}البيانات دي مكتوبة بصيغة اسمها JSON، وعلشان الموقع يعرف يتعامل مع الصيغة دي، لازم يكون في رأس (Header) اسمه Content-Type متظبط على application/json. نقدر نتأكد من الكلام ده لو ضغطنا كليك يمين على الطلب واخترنا Copy>Copy Request Headers، وهنشوف معلومات الطلب زي كده:
Content-Type: application/json
Cookie: PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1
دلوقتي هنكرر نفس الطلب باستخدام cURL، بس هنضيف الرأس اللي بيحدد نوع المحتوى ورأس الكوكيز عشان نوصل للبحث من غير ما نسجل دخول تاني:
$ curl -X POST -d '{"search":"london"}' -b 'PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' -H 'Content-Type: application/json' http://<SERVER_IP>:<PORT>/search.phpالنتيجة هتكون:
["London (UK)"]
كده إحنا قدرنا نوصل لنتيجة البحث بشكل مباشر ومن غير ما نستخدم واجهة الموقع. الطريقة دي مفيدة جدًا لو بنجري اختبارات أمان أو بندور على أخطاء برمجية، لأنها أسرع بكتير من التعامل مع الموقع بشكل يدوي.
🔥8👍4❤3⚡1❤🔥1💘1
CRUD API
شفنا في الأمثلة اللي فاتت تطبيق ويب للبحث عن المدن بيستخدم PHP parameters علشان يدور على اسم مدينة. في القسم ده، هنبص على إزاي تطبيق الويب ده ممكن يستخدم APIs علشان يعمل نفس الحاجة، وهنتعامل بشكل مباشر مع واجهة API endpoint.
الـ APIs
فيه أنواع كتير من الـ APIs. كتير منها بيستخدم للتعامل مع قواعد البيانات بحيث نقدر نحدد الجدول والسطر اللي عايزين نشتغل عليه في استعلام الـ API، وبعدين نستخدم طريقة HTTP المناسبة لتنفيذ العملية المطلوبة. على سبيل المثال، لو عندنا endpoint باسم api.php في المثال بتاعنا، وعايزين نعمل تحديث لجدول المدن (city table) في قاعدة البيانات، والسطر اللي هنحدثه هو المدينة اللي اسمها لندن، هيبقى الـ URL بالشكل ده:
curl -X PUT http://<SERVER_IP>:<PORT>/api.php/city/london
❤4👍4❤🔥1🔥1💘1