-
المساهمات
2852 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
38
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Hassan Hedr
-
من الواضح إذًا أن المشكلة في عدد استعلامات JOIN المسموحة في MYSQL تصل إلى 61 جدول فقط، الحل يكون إما بإعادة التفكير في بنية الاستعلام وهل يمكن تجزئته إلى استعلامين منفصلين بحسب ما هو المطلوب منه، أو أصبح هناك حاجة لتوسيع قاعدة البيانات وتطويرها إلى برنامج إدارة أقوى مثل SQL Server الذي يسمح بعدد 256 عملية JOIN في الاستعلام الواحد، الأمر يعود لطبيعة المشروع والموارد المتاحة من كلفة ووقت وإمكانية للبنية التحتية.
- 11 اجابة
-
- 1
-
-
هل قيم user و db فارغة في الشيفرة الأصلية، إذا كانت كذلك قد تكون سبب المشكلة، وللأسف لا يمكن توضيح المشكلة بدون عرض الاستعلام الحقيقي المنفذ
- 11 اجابة
-
- 1
-
-
حاول تمرير مصفوفة الخيارات التالية للكائن PDO المستخدم للاتصال مع قاعدة البيانات، مما سيؤدي لرمي خطأ من نوع PDOException عند حدوث مشاكل في تنفيذك للاستعلامات، وسيحوي رسالة توضح لك الخطأ الذي يتم: $db = new PDO($dsn, $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ بما أن الاستعلام كبير فهناك احتمال كبير لوجود خطأ إملائي في نص الاستعلام، رسالة الخطأ ستساعدك في تحديد مكان وجود الخطأ في الاستعلام
- 11 اجابة
-
- 1
-
-
هناك مشكلة في نص الاستعلام المستخدم، يرجى إرفاق شيفرة PHP التي ينتج عنها هذا الخطأ حتى تتوضح المشكلة
- 11 اجابة
-
- 1
-
-
يمكنك الدخول في مجال العمل الحر، وبيع مهارتك وما يمكنك إنتاجه، ابدأ بالتركيز على تطوير مهارة معينة، يوجد الكثير من المهارات المطلوبة مثل البرمجة والتصميم والترجمة والكتابة والتسويق والمحاسبة، اختر أقرب مجال إلى خبراتك وحاول تطويرها والتركيز على ما يمكنك تقديمه، بعد هذه المرحلة توجه لعرض تلك المهارات بطريقة ما، مثلًا بإنشاء معرض أعمال لك يمكنك عرضه على أصحاب المشاريع، أو صفحة شخصية تبرز فيها أهم أعمالك حتى لو كانت وهمية بغرض عرض مهاراتك، وابدأ بالبحث عن من يطلب مهاراتك، مثلًا عن طريق منصات التواصل الاجتماعي، أو منصات العمل الحر مثل مستقل، أو اعرض ما يمكنك تقديمه على منصات بيع الخدمات المصغرة مثل خمسات، هناك مهارات إضافية بجانب مهارة خدمتك الأساسية عليك امتلاكها، مثل تنظيم الوقت بين الدراسة والعمل، والتسويق لنفسك والتسعير والتفاوض، يمكنك الاستفادة من قراءة المقالات التالية: وكتاب طريقك إلى العمل الحر عبر الإنترنت:
-
بالتطبيق المستمر سيتقدم مستواك في لغات البرمجة التي تستخدمها، وتبدأ تتآلف مع الأنماط وطرق حل المشاكل الشائعة، وطرق فصل وجمع الشيفرات وكيفية ترتيبها ضمن وحدات وربطها مع بعضها، وستملك مهارة كتابة مكتبة أو أداة خاصة بك من الصفر، عندها ستستطيع عند مواجهة مشكلة في مكتبة أو أداة ما أن تتصفح الشيفرة المصدرية لها إذا كانت مفتوحة المصدر، وتحدد مشكلتك أو الميزة التي ترغب بإضافتها، وستستطيع تقديم التطوير على تلك المكتبة، وإذا وافق صاحب المكتبة عليها ستصدر نسخة جديدة متضمنة تعديلاتك وتكون حللت مشكلة أو أضفت ميزة، أنصحك بالتركيز أولًا على الأساسيات وفهم اللغة جيدًا، والتطبيق العملي المتكرر والبحث والسؤال عن المشاكل، فهو الوحيد الذي يجعلك تتخطى مرحلة المبتدئ، وحاول قراءة الشيفرة المصدرية للمكتبات التي تستخدمها أيضًا ستتعلم الكثير من ذلك عندما ترى عمل مبرمجين آخرين متقدمين عنك، يمكنك الاستفادة من قراءة المقالات التالية:
- 2 اجابة
-
- 2
-
-
يرجى إرفاق نص الخطأ ضمن السؤال بشكل نصي وليس ضمن صورة، المشكلة هي محاولة إدراج مستخدم جديد ضمن جدول users بعنوان بريد الكتروني مكرر مسبقًا لمستخدم آخر ضمن نفس الجدول، إذا كنتِ تحاولين تنفيذ أمر بذر البيانات seeding قد تكون المشكلة محاولتك لتنفيذ نفس العملية مرتين ما يسبب نسخ متكررة من البيانات، يمكنك في حال لم يكن هناك بيانات ضرورية تنفيذ أمر التهجير مع البذر بحيث يتم إدراج كافة البيانات ضمن جداول فارغة جديدة كالتالي: php artisan migrate:fresh --seed في حال بقيت المشكلة يكون السبب من صنف بذر بيانات المستخدمين نفسه UsersSeeder، تأكدي من إدراج المستخدمين بعناوين بريد مميزة مختلفة عن بعضها لتجنب تلك المشكلة
- 1 جواب
-
- 1
-
-
لديك العديد من الأخطاء: btn.click لا تمرر إلى التابع addEventListener بل تعرف بمفردها كالتالي: btn.onclick = function createTweet(){ ... } يوجد خطأ في ذكر اسم المكون الجديد عند تحديد قيمة innerHTML له، يجب المحافظة على ذكر اسم المتغير كما هو في كل مكان: newtweet.innerHTML = inp.value; ^^^^^^^^ يجب إلغاء الحدث الأساسي وهو إرسال بيانات النموذج، يتم ذلك عبر التابع preventDefault كالتالي: btn.onclick = function createTweet(e){ e.preventDefault(); ... } يجب نقل خواص التنسيق إلى ملف CSS وليس معالجتها ضمن جافاسكربت، وذلك لتجنب الأخطاء: .feed-tweet1 { display: flex; } أنصحك بالتأني ومراجعة الأساسيات، من أساسيات لغة جافاسكريبت نفسها واستخدام الدوال فيها، ومعالجة الأحداث باستخدامها، يمكنك الاستفادة من المقالات التالية:
- 7 اجابة
-
- 1
-
-
عندما تخرج من منزلك، ستقفل الباب خلفك عادةً، وبطبيعة الحال سيتمكن الأشخاص الذين يملكون مفاتيح الباب فقط من الدخول إلى منزلك، إذ أنك تفعل ذلك لأسبابٍ أمنية. بنفس الطريقة قد نريد التحكُّم بماذا ومن يملك إمكانية الوصول لمختلف أجزاء شبكتنا، وإحدى طرق تطبيق ذلك هي باستخدام قوائم التحكم بالوصول Access Control Lists -أو اختصارًا ACLs. سنتعمّق في هذا المقال في تطبيق تلك القوائم للتحكم بالوصول للشبكة، إذ سنتناول بنية ACL وكيفية تنفيذها وإمكانية إعداد وتطبيق تلك القوائم؛ كما سنتناول دراسة حالة عمليًا، إذ سنُعِّد قوائم ACL على جهاز بنظام التشغيل الشبكي سيسكو، بحيث يمكنك تطبيق المعرفة المكتسبة من دراسة هذه الحالة على مختلف أجهزة الشركات. قوائم التحكم بالوصول ما هي قائمة التحكم بالوصول؟ قائمة التحكم بالوصول ACL هي قائمةٌ تتحكم بإمكانية الوصول كما يدل اسمها، وعند استخدامها للتحكم بالوصول للشبكة، تحدد تلك القائمة المضيفين المسموح لهم أو غير المسموح لهم بالوصول إلى الأجهزة أو الوجهات الأخرى، إذ يُطبَّق ذلك عادةً على كل رزمة من الرزم الممررة عبر الشبكة، مما يعني أن كل رزمة سيجري التحقُّق منها مع ACL لتحديد منعها أو السماح لها بالمرور. هيكلية قوائم ACL كما ذكرنا مسبقًا ACL هي قائمة، وهذا يعني أنها قائمةٌ تحوي أشياء. نصطلح تقنيًا بأن ACL هي قائمةٌ بمدخلات التحكم بالوصول Access Control Entries -أو اختصارًا ACEs، إذ يحتوي كل مدخل على شرطٍ يطابق رزمةً معينة. بناءً على هذا الوصف، يمكن تقسيم ACL إلى جزئين أساسيين: معرّف ACL الذي يكون عادةً اسمًا أو رقمًا، وكما سنرى لاحقًا يمكن تعريف قوائم ACL من خلال نوعها. عددٌ من مدخلات التحكُّم بالوصول تُعرَّف عادةً بواسطة سلسلةٍ من الأرقام. مدخلات التحكم بالوصول ACEs تشكل ACEs القسم الأكبر من ACL، إذ تحتوي كل قائمة تحكم ACL على واحدٍ أو أكثر من تلك المدخلات التي يسمح بها جهازٌ معين، وبغض النظر عن النوع المحدد لقائمة ACL، يمكننا تحديد مكونات ACE على النحو التالي: معرّف: والذي يكون عادةً رقم السطر، فمثلًا سيمتلك أول ACE ضمن قائمة ACL مُعدَّةٍ على موجّه يعمل بنظام سيسكو رقم السطر 10 افتراضيًا، وسيمتلك ACE التالي رقم السطر 20، وهكذا. حدث: والذي سيُنفَّذ على الرزم التي تتطابق مع المدخل، وتكون عادةً قيمة الحدث، إما الرفض "deny"، أو السماح "permit". يجب في بعض الحالات مطابقة البروتوكول و معلومات المنفذ في رزمة، إذ يمكن مثلًا أن يتطابق مدخل ACE مع كل حركة مرور من نوع IP، بينما يمكن لمدخلٍ آخر أن يتطابق مع حركة مرور من نوع HTTP فقط. المصدر الواجب مطابقته، ويكون عادةً عنوان IP لمصدر الرزمة، الذي يمكن أن يكون عنوانًا مفردًا، أو مجالًا من العناوين، أو مجال شبكة فرعي، ومن الممكن أن يطابق أي عنوان. الوجهة الواجب مطابقتها، وتكون عادةً عنوان IP لوجهة الرزمة، الذي يمكن أن يكون عنوانًا مفردًا، أو مجالًا من العناوين، أو مجال شبكة فرعي، ومن الممكن أن يطابق أي عنوان. يجب الأخذ بالحسبان اعتماد مكوني المصدر والوجهة على جهة الرزمة المرسلة. ألقٍ نظرةً على المخطط البياني التالي: يمكننا ملاحظة سيناريوهين مختلفين من منظور الموجّه R1: إذا كان PC1 هو من أنشأ الاتصال إلى PC2 (مثلًا طلب ping من PC1 إلى PC2)، فسيكون مصدر حركة المرور هو العنوان 192.168.1.100 وعنوان الوجهة هو 192.168.2.200. إذا كان PC2 هو من أنشأ الاتصال إلى PC1 (مثلًا طلب ping من PC2 إلى PC2)، فسيكون مصدر حركة المرور هو العنوان 192.168.2.200 وعنوان الوجهة هو 192.168.1.100. معالجة ACL عندما نتحقق من رزمة ما مع قائمة ACL، تُطبَّق قواعد المعالجة التالية: التحقق من مدخلات ACEs ضمن ACL بالترتيب من الأعلى إلى الأسفل، مما يعني أن التحقق من مدخل ACE رقم 10 سيحدث قبل مدخل ACE رقم 20. إذا لم تتطابق الرزمة مع المدخل ACE، يحدث التحقق منها مع المدخل التالي ضمن قائمة ACL. إذا طابقت الرزمة مدخل ACE، يُوقف التحقق مع كامل قائمة ACL، ويُطبَّق الحدث المحدد ضمن هذا المدخل على الرزمة. إذا لم تطابق الرزمة أيًا من المدخلات ضمن قائمة ACL، فسترمي أو ترفض معظم تضمينات قوائم ACL الرزمة بسبب وجود مدخل رفض ضمني في نهاية كل قائمة ACL. لنأخذ المثال التالي لفهم قواعد المعالجة تلك، فلنتخيل أن لدينا قائمة ACL فيها المدخلات التالية: - Seq #1: Permit ICMP from 192.168.1.100 to 192.168.2.200 - Seq #2: Deny ICMP from any source to any destination - Seq #3: Permit HTTP traffic from 192.168.1.100 to any destination - Seq #4: Permit HTTPS traffic from 192.168.1.0/24 to any destination السؤال الأول: ماذا سيحدث لرزمة ping متوجهة من 192.168.1.100 إلى 192.168.2.200؟ الجواب الأول: بما أن طلب ping مبنيٌ على بروتوكول ICMP سيُسمح للرزمة المتوجهة من 192.168.1.100 إلى 192.168.2.200 لأنها تطابق مدخل ACE رقم 1. السؤال الثاني: ماذا سيحدث لرزمة ping متوجهة من 192.168.1.50 إلى 192.168.2.200؟ الجواب الثاني: سيجري التحقُّق من الرزمة مع قائمة ACL بدءًا من المدخل رقم 1، وبما أنها لا تطابق هذا المدخل، سيجري التحقُّق مع المدخل التالي (المدخل رقم 2). يرفض هذا المُدخل الثاني رسائل ICMP من أي مصدرٍ لأي وجهة، وبما أن الرزمة الحالية هي طلب ping (أي ICMP) والمصدر يطابق "any" والوجهة أيضًا تطابق "any"، لذلك ستُرفض الرزمة. السؤال الثالث: ماذا سيحدث لرزمة HTTPS متوجهةٍ من 192.168.1.50 إلى 41.1.1.1؟ الجواب الثالث: لن تطابق تلك الرزمة أول ثلاثة مُدخلات، لكنها ستطابق المُدخل الرابع لأنها رزمة HTTPS عنوان المصدر لها ضمن مجال العناوين الفرعي 192.168.1.0/24، والوجهة تطابق "any"، لذلك سيُسمح لتلك الرزمة. السؤال الرابع: ماذا سيحدث لرزمة HTTP متوجهة من 192.168.1.50 إلى 41.1.1.1؟ الجواب الرابع: لن تطابق تلك الرزمة أي مدخلٍ من المدخلات الأربعة ضمن قائمة ACL (فقط العنوان 192.168.1.100 مسموحٌ له بإرسال طلبات HTTP)؛ لذلك ستُرفض تلك الرزمة على افتراض تطبيق قاعدة "الرفض الضمني" على هذه القائمة. تطبيق قوائم ACL إعداد قوائم ACL دون تطبيقها لا قيمة له، فكما لو أنك ركَّبت قفلًا لباب منزلك ولم تقفله عند ذهابك؛ فعند استخدام قوائم ACL للتحكم أو تصفية الوصول للشبكة، تُطبَّق تلك القوائم على واجهات الجهاز، مثل الموجّهات والمبدلات متعددة الطبقات وجدران الحماية وغيرها، ويمكن عمومًا تطبيق ACL باتجاهين على الواجهة: جهة الورود: تنطبق على الرزم القادمة إلى الواجهة. جهة الخروج: تنطبق على الرزم الخارجة من الواجهة. قد يكون من الصعب فهم كيفية تحديد الجهة التي تطبِّق عليها قوائم ACL، لذا سنأخذ المثال الموضّح في الصورة التالية، إذ يتصل PC1 مع الواجهة Fa0/0 الخاصة بالموجّه R1، ويتصل PC2 مع الواجهة Fa0/1 الخاصة بالموجّه R1. لنفرض أننا نريد تطبيق قائمة ACL على R1، بحيث يُسمح فقط لحركة مرور البيانات لطلبات ping من نوع ICMP من PC1 إلى PC2، أين يجب تطبيق تلك القائمة؟ أولاً يمكننا تطبيق القائمة ACL على الواجهة Fa0/0 في اتجاه الورود، وذلك لأن حركة مرور طلبات ping من PC1 إلى PC2 تأتي إلى R1 من الواجهة Fa0/0 الخاصة به. يمكننا أيضًا تطبيق القائمة ACL على الواجهة Fa0/1 في اتجاه الخروج، وذلك لأن حركة مرور طلبات ping من PC1 إلى PC2 تخرج من R1 عبر الواجهة Fa0/1 الخاصة به. هناك طريقةٌ تفيد في فهم اتجاه تطبيق قوائم ACL، وهي أن تتخيل نفسك بدل الموجّه مد ذراعيك جانبًا وتخيل أن حركة مرور البيانات تأتي من أصابعك إلى جسمك وهي اتجاه الورود، بينما حركة مرور البيانات من جسمك إلى أصابعك هي اتجاه الخروج. دراسة حالة: قوائم ACL على أجهزة بنظام سيسكو هناك نوعان من قوائم ACL على الأقل على الأجهزة العاملة بنظام سيسكو: قوائم ACL عادية والتي تُطابق مع عنوان المصدر فقط. قوائم ACL مُوسّعة والتي يمكن مطابقتها مع تركيبةٍ من البروتوكولات وعناوين المصدر والوجهة ومنافذ المصدر والوجهة والخيارات وغيرها. ملاحظة: تمتلك سيسكو أنواعًا أخرى من قوائم ACL، مثل القوائم المبنية على الوقت والقوائم الانعكاسية والديناميكية وغيرها، ولن نناقش تلك الأنواع في هذا المقال. يمكن تسمية قوائم ACL على الأجهزة العاملة بنظام سيسكو بغض النظر عن نوعها (مثلًا "TEST_ACL")، أو ترقيمها (مثلًا 100)، كما يجب الانتباه عند ترقيم قوائم ACL، إذ أن هناك مجالات أرقام لقوائم ACL العادية والمُوسّعة. نستخدم عند تعيين عناوين المصدر والوجهة على ACL ضمن ضبط نظام تشغيل سيسكو ما يدعى بالقناع أو يسمى أيضًا القناع المعكوس أو قناع محارف التبديل Wildcard؛ وهو قناع الشبكة الفرعية نفسه لكنه مقلوب، أي تصبح الواحدات "1" أصفارًا "0" وبالعكس، فمثلًا قناع محارف التبديل لقناع الشبكة الفرعية 255.255.255.0 هو 0.0.0.255. ضمن قناع محارف التبديل: الصفر "0" يعني "يجب أن يطابق must match"، بينما الواحد "1" يعني "لا تهتم don’t care"؛ فعلى سبيل المثال، ستطابق الشبكة 10.1.1.0 مع قناع محارف التبديل 0.0.0.3 حركة مرور البيانات من مجال عناوين IP من 10.1.1.1 حتى 10.1.1.3. سنستخدم الشبكة التالية لتطبيق دراسة الحالة: يمكنك بناء تلك الشبكة باستخدام برامج، مثل GNS3 أو Packe Tracer. أُعِدت عناوين IP على كل الواجهات ونُفّذ بروتوكول EIGRP على الشبكة ليصبح هناك تواصلٌ بين كافة الأجهزة: الموجّه R1: الموجّه R2: الموجّه R3: لاختبار الاتصال: سنرسل طلب ping إلى R3 من واجهات loopback إلى R2: إنشاء قوائم ACL على نظام تشغيل سيسكو لنُعدّ الآن قائمة ACL على R1، بحيث تحقق الشروط التالية: السماح لكل حركة مرور للبيانات من نوع ICMP من 192.168.10.0/24 إلى أي وجهة. ينبغي رفض كل حركة مرور البيانات الأخرى من النوع ICMP. ينبغي السماح لكل حركة مرور البيانات في مجال عناوين IP من 192.168.20.0/24 إلى192.168.30.0/24. ينبغي أن تستطيع الأجهزة على الشبكة 192.168.10.0/24 الاتصال مع المضيف 192.168.30.1 باستخدام SSH، وينبغي منع اتصالات Telnet. ينبغي رفض كل حركة مرور البيانات الأخرى. لإعداد قائمة ACL على جهاز بنظام تشغيل سيسكو نتبع الخطوات التالية: تُعرَّف قائمة ACL بواسطة اسم أو رقم، وتكون القوائم المُعرّفة باسم أسهل في الإعداد. وتكون صيغة أمر إعداد قائمة ACL المُعرفة باسم على النحو التالي: ip access-list [extended|standard] <ACL name> إعداد مدخلات ACE ضمن ACL باستخدام الصيغة التالية: [permit|deny] <protocol> <source network> <source wildcard mask> <destination network> <destination wildcard mask> <options> ندخل إلى الواجهة المطلوب إعدادها ونطبق قائمة ACL باستخدام الأمر التالي: ip access-group <ACL name> [in|out] فيكون الضبط اللازم لتحقيق ذلك على R1 على النحو التالي: ip access-list extended EXAMPLE_ACL permit icmp 192.168.10.0 0.0.0.255 any deny icmp any any permit ip 192.168.20.0 0.0.0.255 192.168.30.0 0.0.0.255 permit tcp 192.168.10.0 0.0.0.255 host 192.168.30.1 eq 22 ! interface FastEthernet0/0 ip access-group EXAMPLE_ACL in ! لا بُدّ من ملاحظة الأمور التالية في الضبط السابق: أُعدّت قائمة ACL بالاسم "EXAMPLE_ACL"، وهذه القائمة من النوع الموسع لأننا سنحتاج لمطابقة عدة حقول. يمكن استخدام الكلمة المفتاحية "any" لمطابقة أي عنوان. يمكن استخدام الكلمة المفتاحية "host" لمطابقة عنوانٍ معين. يمكننا تحديد المنفذ الذي سيجري مطابقته باستخدام الكلمات المفتاحية، مثل "eq" والتي تعني يساوي، و "gt" والتي تعني أكبر من وغيرها. لم نرفض صراحةً كل حركة مرور البيانات الباقية، إذ سترفض قاعدة "الرفض الضمني" في نهاية كل قائمة ACL في سيسكو أي حركة مرور بيانات لم تتطابق مع تلك القائمة. طبقنا قائمة ACL على جهة الورود للواجهة Fa0/0، ويمكننا أيضًا تطبيقها على جهة الخروج للواجهة Fa0/1. التحقق من قوائم ACL يمكننا رؤية ضبط وإحصائيات ACL باستخدام الأمر التالي: show ip access-lists or show access-lists لاحظ طريقة الترقيم، إذ تبدأ بالرقم 10 ويُضاف كل مدخلٍ جديد أسفل المدخل السابق. يمكننا استخدام الأمر show ip interface لعرض قوائم ACL المطبقة على الواجهة: تعديل قوائم ACL تطبيق تلك القائمة أحدث لنا مشكلةً بين R1 و R2: أُنهيت علاقة بروتوكول EIGRP لأن قاعدة "الرفض الضمني" تمنع رزم EIGRP في نهاية قائمة ACL، لذا يمكن حل تلك المشكلة عبر التصريح عن السماح لرزم EIGRP ضمن قائمتنا. تحذير: يجب الحذر عند تعديل قائمة ACL لأن مدخلات ACE ستضاف لأسفل القائمة (قبل قاعدة الرفض الضمني)، لكن يمكننا باستخدام قوائم ACL المعرّفة بأسماء تحديد رقم سطر إضافة المدخل الجديد. لا يهم في حالتنا هذه مكان إضافة المدخل للسماح بحركة مرور البيانات EIGRP لعدم وجود أي مدخلٍ آخر يؤثر عليها قبل قاعدة الرفض الضمني، مع ذلك سنضيف المدخل "permit eigrp any any" على السطر رقم 5 ضمن القائمة فقط لنرى كيف يمكن إضافة المدخل ضمن أي سطر: بعد ذلك تكون قد أُعيدت علاقة EIGRP. اختبار قوائم ACL يمكننا الآن البدء باختبار قائمة ACL السابقة، ولذلك تذكر أنه لا بُدّ من اختبار ما يجب أن يعمل وما لا يعمل أيضًا. الاختبار 1: ينبغي السماح لطلب ping من 192.168.10.1 إلى 192.168.30.1 بسبب المدخل في السطر رقم 10 ضمن ACL. يمكننا التحقق من العدادات ضمن ACL لنتأكد أن حركة مرور البيانات تلك تطابقت مع قائمة ACL: الاختبار 2: ينبغي أن يفشل طلب ping من 192.168.20.1 إلى 192.168.30.1 بسبب المدخل في السطر رقم 20 ضمن ACL. الاختبار 3: ينبغي السماح لطلب Telnet و SSH من 192.168.20.1 إلى 192.168.30.1 بسبب المدخل في السطر رقم 30 ضمن ACL. الاختبار 4: ينبغي السماح لطلب SSH من 192.168.10.1 إلى 192.168.30.1 بسبب المدخل في السطر رقم 40 ضمن ACL. الاختبار 5: يبنغي أن يفشل طلب Telnet من 192.168.10.1 إلى 192.168.30.1 بسبب قاعدة الرفض الضمني. يمكننا التحقق من الإحصائيات على ACL للتأكد أن حركة مرور البيانات قد وصلت بالفعل إلى ACL: ملاحظات مفيدة حول قوائم ACL تفيدك الملاحظات التالية خلال تضمين قائمة ACL: بما أن المطابقة مع ACL ستتوقف عند أول مدخل يتطابق، فحاول وضع أكثر المدخلات تحديدًا في أعلى قائمة ACL وأكثر المدخلات عموميةً في الأسفل. فمثلًا إذا وضعنا المدخل التالي: deny icmp any any قبل المدخل: permit icmp host 1.1.1.1 any ستُرفض حركة مرور البيانات من نوع ICMP من المضيف 1.1.1.1. يجري البحث ضمن قوائم ACL من الأعلى للأسفل، لذلك ينبغي وضع قواعد حركة مرور البيانات ذات فرصة المطابقة الأعلى في أعلى قائمة ACL، إذ سيقلل ذلك من وقت البحث وبالتالي استهلاك الموارد. يمكنك استخدام التعليقات لزيادة قابلية قراءة قوائم ACL، أي حتى تتمكن من فهم ماذا يفعل أحد المدخلات ولماذا أُضيف. حاول تطبيق قوائم ACL بأقرب ما يمكن إلى مصدر حركة مرور البيانات، فلا فائدة من عبور حركة مرور البيانات خلال الشبكة لتُرفض في النهاية، وقد لا تتمكن من تطبيق تلك الملاحظة على قوائم ACL العادية. يمكنك تطبيق قوائم ACL في جهة الورود بدلًا من جهة الخروج، ويُفضَّل ذلك إذ ستُعالج الرزم في الحالة الأولى، مثل البحث ضمن جدول التوجيه قبل التحقُّق منها على قائمة ACL في جهة الخروج، فلا داعي لهدر موارد المعالجة إذا كانت ستُرفض حركة مرور البيانات لاحقًا عدا عن بعض الحالات التي يكون ذلك فيها ضروريًا. في الختام شرحنا ضمن هذا المقال قوائم التحكم بالوصول بالتفصيل وركزنا على كيفية استخدامها لتصفية الرزم ضمن الشبكة، ورأينا أيضًا كيف أن قوائم ACL مؤلفة من مدخلات التحكم بالوصول ACEs والتي بدورها تسمح أو تمنع حركة مرور البيانات بناءً على شرطٍ معين. ناقشنا كيفية معالجة القواعد ضمن قوائم ACL، حيث تحدث من الأعلى للأسفل وتتوقف عند أول تطابق. كما شرحنا كيف يمكن لقوائم ACL أن تُطبَّق على الواجهات إما بجهة الورود أو جهة الخروج. وأخيرًا، درسنا حالة تضمين قوائم ACL على أجهزة بنظام سيسكو وناقشنا بعض الملاحظات المفيدة. ترجمة -وبتصرف- للمقال "Access Control Lists – Your Guide to Securing Networks with ACL [ Tutorial & Commands ]" لصاحبه Marc Wilson. اقرأ أيضًا مقدمة إلى لوائح التحكم في الوصول أقنعة محرف البدل واستخدامها في لوائح التحكم في الوصول ACL الشبكات الفرعية والاختصارات في لوائح التحكم في الوصول ACL التحكم بالوصول إلى الأقراص الخارجية في لينكس
-
تستخدم للدلالة على أن القيمة التي يعيدها التابع إذا كانت ساكنة static، يمكن أن تطلب كمرجع reference وليس كقيمة value، وذلك عبر إضافة "&" قبل اسم الدالة أيضًا عند الاستدعاء، مثال للتوضيح: لتكن لدينا الدالة التالية: function &getVariable() { static $var = 2; return $var; } يمكن أن تُستدعى بشكل طبيعي ولا نلاحظ أي تصرف مختلف: $var = getVariable(); echo $var; // 2 $var = 5; echo getVariable(); // 2 وفي حال استدعينا الدالة بطلب القيم كمرجع، ثم عدلنا قيمة المتغير في الخارج، سنلاحظ تغير القيمة الثابتة عند الاستدعاءات اللاحقة: $var = &getVariable(); echo $var; // 2 $var = 5; echo getVariable(); // 5 حاول تجنب هذه الطريقة قدر الإمكان فهي تُصعب من عملية الصيانة وإصلاح الأخطاء خصوصًا في التطبيقات المتوسطة والكبيرة، إلا إذا كنت تطور أداة أو إطار عمل خاص وهذه الميزة قد تفيدك.
- 1 جواب
-
- 1
-
-
يمكن إضافة شيفرة جافاسكربت والاستفادة من الحدث change الذي يُطلق عند كل تغيير لقيمة حقل الإدخال، وداخل تابع المعالجة يمكنك استخراج القيمة الجديدة للحقل وتحديث باقي العناصر حسب المطلوب، كالتالي: const input = document.querySelector('...') // جلب عنصر حقل الإدخال input.addEventListener('change', function(e) { // حدث يُطلق عند كل تغيير لقيمة الحقل const value = e.target.value; // القيمة الجديدة //.. نحدث باقي العناصر بالقيمة الجديدة }) يمكنك الاستفادة من قراءة المقال التالي:
- 1 جواب
-
- 1
-
-
JSON هي صيغة تبادل بيانات، تتميز بأنها سهلة القراءة وبسيطة، وتدعم السلاسل النصية والأرقام والمصفوفات، تُستخدم ضمن أي قناة لتبادل البيانات مثل بين المتصفح والخادم، أو بين الخوادم مع بعضها. API أو واجهة برمجة التطبيقات هي أي واجهة تمكننا من برمجة والتعديل على نظام ما، سواء كان هذا النظام مكتبة برمجية، أو إطار عمل برمجي، أو واجهة برمجية لنظام خلفي ما، وهو مجموعة الأوامر والاستعلامات التي تمكننا من التعامل مع نظام ما، عادة تتيح الأنظمة API يمكن لتطبيقات العملاء سواء من المتصفح أو من تطبيقات الجوال أو الأنظمة الأخرى للتفاعل معها. AJAX هي طريقة بديلة عن إرسال البيانات عبر النموذج form ضمن صفحات الويب، وفيها يتم إرسال طلب HTTP ومعالجة نتيجته وتحديث الواجهة الأمامية دون تحديث الصفحة عَلاقة مفاهيم الثلاث ببعضها يمكن ضمن صفحة ويب إرسال طلب AJAX لمعالجة أمر ما، وضمن هذا الطلب يتم ترميز البيانات الواجب إرسالها في جسم الطلب بصيغة JSON، وتكون وجهة هذا الطلب هي واجهة برمجة تطبيق API، يعالج الطلب ويرسل النتيجة ببيانات ضمن جسم الرد بصيغة JSON أيضًا، يتم معالجة هذا الرد من قبل طلب AJAX لإنهاءه يمكنك الاستفادة من قراءة المقالات التالية:
-
يمكنك التواصل مع مركز مساعدة موقع خمسات للحصول على تفاصيل رسمية بشأن فتح حساب باسم شخص آخر أو العمر الأدنى المسموح به لإنشاء الحسابات، وصف الخدمية يجب أن يعبر عن ما ستقدمه للمشتري بالتفصيل وذكر أي شروط أو متطلبات تحتاجها من المشتري وعرض خدمتك بأفضل شكل، لا تبالغ ولا تنقص من مستوى خدمتك فقط كن صادقًا واعرض ما يمكنك تقديمه بالتفصيل، ويمكنك الاستفادة من قراءة العديد من المقالات بهذا الخصوص على مدونة خمسات ومنها: 4 نصائح لعرض أفضل لخدمتك في رئيسية خمسات 10 نصائح لزيادة فرص بيع خدماتك على خمسات كيفية عمل عروض ترويجية مغرية لزبائنك
- 1 جواب
-
- 1
-
-
يمكن التحقق من القيمة ضمن مجالين: الأول من 18 إلى 19، وهو أن يكون أول عدد 1، والثاني من 8 إلى 9. الثاني من 20 إلى 99، وهو أن يكون أول عدد من 2 إلى 9، والثاني أي عدد من 0 إلى 9. الحل لديك يوجد به أخطاء، وهي الفصل بين الحالتين بعلامة أو "|"، ووضع علامة يبدأ "^" و ينتهي عند كل من الحالتين كالتالي: $valid = preg_match('/^1[8-9]$|^[2-9][0-9]$/') ^ ^^^ ^ يمكن الاستفادة من قراءة المقال التالي:
-
يمكن التحقق من بداية النص ب 059 والطول الكلي للنص هو 10 محارف باستخدام عبارتين منفصلتين كالتالي: /* التحقق بداية الرقم */ $valid_suffix = preg_match('/^056/',$phone); /* التحقق من الطول */ $valid_length = preg_match('/^[0-9]{10}$/',$phone); /* الرقم صحيح */ $valid_phone = $valid_suffix && $valid_length; التحقق من عنوان URL صحيح في المثال المذكور، يمكنك الاستفادة من قراءة المقال التالي:
-
تُعد إدارة الوصول Access Management عملية أمان في تقنية المعلومات، بحيث تمنع المستخدمين من الوصول للشبكة وسرقة البيانات؛ وتُعد إدارة صلاحيات الوصول من أهم النواحي عند تأمين البيانات، إذ تتضمن تلك العملية إنشاء وتوفير وإدارة مختلف المستخدمين والمجموعات والأدوار والسياسات. "ينجز تطبيق إدارة الوصول للهوية Identity Access Management -أو اختصارًا IAM- ذلك تمامًا"، إذ يحفظ معلومات المستخدم وأدواره والمجموعة التي ينتمي إليها والسياسات الواجب تطبيقها، ويعالج طلبات المستخدم للوصول عن طريق التحقُّق من ملفات تعريفه وأدواره. النظامان المتحكِّمان بإدارة أذونات المستخدم وتسهيلها، هما خدمة Active Directory -أو اختصارًا AD-، والبرتوكول الخفيف للوصول إلى الدليل Lightweight Directory Access Protocol -أو اختصارًا LDAP؛ فعلى الرغم من أن الهدف منهما هو نفسه إلا أنهما يختلفان بالوظيفة. تُعد Active Directory خدمةً، وهي قاعدة بيانات هرمية للدليل تحتوي على جميع معلومات المستخدمين على الشبكة، وهي متوافقةٌ مع نظام تشغيل ويندوز فقط؛ وعلى العكس من ذلك يوفّر بروتوكول LDAP الفهرسة وخدمات الدليل، ويُستخدم للتواصل مع خدمة AD. سنناقش ضمن هذا الدليل الشامل لإدارة الوصول النقاط التالية: ما هي خدمة Active Directory؟ التحقق من الاعتماديات باستخدام خدمة Active Directory. ما هي عملية الوصول الخفيفة إلى الدليل؟ بنية بروتوكول LDAP ووظيفته. طرق أخرى للتحكم بالوصول. نظام الهوية وإدارة الوصول. أدوات إدارة وصول موصى بها. ما هي خدمة Active Directory؟ كما ذكرنا سابقًا Active Directory هي خدمة دليل هرمية طُوِّرت من قِبل مايكروسوفت خصيصًا للشبكات العاملة بنطاق ويندوز، إذ تحتوي جميع معلومات المستخدمين وملفات تعريفهم ضمن الشبكة. بدأت AD بمثابة خدمة إدارة نطاق مركزية لخادم ويندوز 2008، واشتهرت حتى أصبحت المفتاح الأساس لمعظم الخدمات المبنية على الدليل، إذ فوِّض كل ما يتعلق بالهوية إليها. تخزن الخدمة أية معلوماتٍ متعلقةٍ بكائنات الشبكة وتجعلها متاحةً وسهلة العثور عليها، إذ يشير الكائن عادةً للموارد المشتركة، مثل المجلدات والطابعات والخوادم والحسابات وغيرها. تستخدم خدمة AD مخزن بيانات هيكلي أساسًا للتنظيم الهيكلي لكافة معلومات الدليل؛ ويُعرف مخزن البيانات هذا بالدليل، وهو يحتوي على جميع المعلومات عن كائنات الدليل. الأمان الذي توفره خدمة AD يمكن للمسؤولين التحكم بكل بيانات الدليل وتنظيمها من الشبكة من خلال تسجيل دخولٍ واحد للشبكة، وتؤمّن خدمة AD النطاق من خلال استيثاق تسجيل الدخول والتحكم بالوصول إلى الكائنات الموجودة ضمن الدليل. خدمات النطاق Active Directory Domain Services -أو اختصارًا AD DS-، هي المسؤولة عن توفير طريقةٍ لتخزين معلومات الدليل وإتاحتها للجميع سواءً كانوا مستخدمين أم مسؤولين، ويمكن القول بأن AD DS يخزن جميع المعلومات عن حسابات المستخدم ويسمح للمستخدمين المسموح لهم فقط بالوصول لتلك المعلومات. يُطلق على خادم AD DS عادةً اسم متحكم النطاق Domain Controller -أو اختصارًا DC-، فهو مسؤول عن الاستيثاق والتحقق من تصاريح كل المستخدمين على الشبكة وتعيين وتطبيق السياسات، ومسؤول أيضًا عن تثبيت وتحديث البرمجيات لكامل شبكة نطاق ويندوز. بنية خدمة AD يمكن تجميع أي كائن يُنشأ ضمن خدمة AD في نطاقات، ولزيادة الأمان تُخزَّن كل الكائنات التي تنتمي للنطاق ضمن قاعدة بيانات واحدةٍ منفصلة، إذ يمكن تمثيل أحد هذه النطاقات أو جميعها بشجرة. تمثّل الصورة التالية مثالًا عن شجرة نطاق خدمة AD ونطاقاتٍ فرعيةٍ لها، إذ أن النطاق acme.com.tw هو النطاق الأساسي ويتبع له عدة أفرع أو نطاقات فرعية. ندعو مجموعةً من تلك الأشجار بالغابة، إذ تتشابه كل الأشجار معًا ضمن الغابة في الكاتالوج مثلًا، ومخطط الدليل والبنية وإعدادات الدليل، ومن محاسن الغابة أن الكاتالوج العام لمتحكم النطاق DC يمكن نسخه وصيانته بسهولة. التشابه مع نظام اسم النطاق DNS تتشابه البنية الهرمية السابقة كثيرًا مع بنية نظام اسم النطاق Domain Name System -أو اختصارًا DNS-؛ وهو نظام تسمية هرمي يُستخدم للشبكات والخدمات والموارد الأخرى، إذ يُترجم أسماء النطاق إلى عنوان IP وبالعكس، ويُعد مكونًا أساسيًا من خدمة AD. لا يقتصر استعلام DNS على تحويل اسم المضيف إلى عنوان IP، بل يمكنه أيضًا العثور على سجلات معينة تعرّف الأدوار والوظائف لخدمة AD؛ فعندما يريد المستخدم مثلًا تسجيل الدخول إلى جهاز ضمن النطاق، فسيحاول العميل أولًا العثور على متحكّم النطاق باستخدام سجلات SRV. التحقق من الاعتماديات باستخدام Active Directory عندما يتلقى عميل ويندوز اعتماديات المستخدم أو الخدمة لأول مرة، فإنه يحمي تلك المعلومات لإيصالها لجهة الاستيثاق، والتي هي غالبًا متحكّم النطاق. تربط اعتماديات المستخدم بين هوية المستخدم وإثبات الموثوقية، ويمكن لتلك الاعتماديات أن تكون كلمة المرور أو شهادة أو حتى رقم تعريف شخصي PIN تُجمع من مدخلات واجهة تسجيل الدخول للمستخدم أو عبر الواجهة البرمجية API ثم تُرسل لخادم الاستيثاق. يحدث التحقق الاعتماديات أولًا خلال عملية تسجيل الدخول في ويندوز عن طريق موازنتها مع قاعدة بيانات مدير أمن الحسابات الموجودة على الحاسب المحلي. يوجد مدير أمن الحسابات Security Accounts Manager -أو اختصارًا SAM- ضمن كل أنظمة تشغيل ويندوز ويخزن معلومات المستخدم المحلي والمجموعات. ولكن عند انضمام الحاسوب إلى نطاق، تُرسل الاعتماديات إلى AD ويحدث التحقُّق منها من خلال موازنتها مع الكاتالوج العام ضمن متحكم النطاق المحلي. ترسِل عملية استيثاق اعتماديات المستخدم اسم المستخدم وكلمة المرور إلى وجهة الاستيثاق، إذ تتضمن الرسالة تفاصيل حول الحاسوب الذي يطلب المستخدم الوصول إليه. من الممكن رفض الوصول حتى عند إدخال المستخدم اسم مستخدم وكلمة مرور صحيحتين، وذلك بسبب عدم امتلاك الجهاز الذي يحاول المستخدم الوصول إليه الصلاحيات اللازمة للوصول للشبكة، أو عندما يحاول المستخدم إدخال كلمة مرور غير صحيحة عدّة مرات، لتُبلَّغ كل متحكمات النطاق ضمن الغابة بذلك وتُقفل بوجه ذلك المستخدم. ما هي عملية الوصول الخفيفة إلى الدليل LDAP؟ عملية الوصول الخفيفة إلى الدليل LDAP هي بروتوكول معياري مفتوح يمكن استخدامه مع العديد من أنظمة الدليل الموزّعة، مثل Apache DS و OpenDS وريدهات DS وغيرها، وهو موجود قبل خدمة AD بكثير. كما هو واضحٌ من اسمها LDAP فهي طريقة خفيفة تُستخدم للوصول وإدارة خدمات الدليل عبر TCP/IP، إذ يمكن باستخدام هذا البروتوكول مشاركة معلومات عن المستخدمين والمجموعات والشبكات بين الخوادم عبر الإنترنت، كما يوفِّر مكانًا مركزيًا لتخزين الاعتماديات والمساعدة في عملية الترخيص. تستخدم العديد التطبيقات والخدمات هذا البروتوكول للمساعدة في عملية التحقق من المستخدم. يوفر خادم LDAP عمليات البحث عن الاسم والتحقق من الاعتماديات، ويخزن أيضًا كائنات ملفات ومجلدات قوائم التحكم بالوصول Access Control List -أو اختصارًا ALCs. نظام X.500 أساس لبروتوكول LDAP اِعتمد بروتوكول LDAP على نظام الاستيثاق السابق X.500، لأنه يحدد عدة معايير حول طريقة عمل آليات خدمة الدليل. تضمن الإصدار LDAPv2 عدة ميزات تغطي معظم سلسلة معايير X.500، ولكن أتى بعده الإصدار الأحدث LDAPv3 وكان أبسط وأخف وغطى قسمًا أكبر من مزايا X.500، خاصةً فيما يتعلق بتحسين مزايا الحماية الأمنية لاتصالات LDAP، إذ أتى بنظام استيثاق وطبقة أمان إطار عمل أبسط للاستيثاق. التحسينات الأمنية في الإصدار LDAPv3 كان الهدف الأساسي من LDAP هو تقديم معلومات الاستيثاق، ولكن كان للإصدارات الأحدث من البروتوكول تطبيقات أكثر بكثير، وكانت التحسينات الأمنية من أهم التحديثات في الإصدار LDAPv3. عند محاولة المستخدم الاستيثاق، يبدأ العميل جلسة LDAP عبر اتصاله بخادم LDAP، وقد يطلب العميل عمليات، مثل اتصال آمن عبر بروتوكول أمان طبقة النقل Transport Layer Security -أو اختصارًا LDAPv3 -TLS (وهو استيثاق عبر إصدارٍ معينٍ من بروتوكول LDAP)، أو البحث والحصول على سجل لدليل معين، إذ يوفر ذلك مرونةً أكثر وحمايةً إضافية؛ كما يمكن أيضًا حماية اتصال LDAP عبر نفق طبقة حماية المقابس Secure Socket Layer -أو اختصارًا SSL-، إذ اسُتخدمت تلك الطريقة مع الإصدار السابق LDAPv2، لكنها لم تُعتمد معيارًا ضمن التوصيفات الرسمية حتى إصدار LDAPv3. بنية بروتوكول LDAP ووظيفته يملك دليل LDAP بنية شجرة هرمية، بحيث تملك كل السجلات والكائنات ضمنه مكانًا محددًا، ويمكن للكائن أن يكون مستخدمًا أو موردًا، مثل حاسوب مشترك أو طابعة. تُطلق على تلك الهرمية المُعرَّف ضمنها الكائنات اسم شجرة معلومات الدليل Directory Information Tree -أو اختصارًا DIT-، والتي تتضمن أسماءً مميزة Distinguished Names -أو اختصارًا DNs- لسجلات خدمة الدليل. يمكن تنظيم جميع أنواع قوائم المعلومات ضمن DITs، والتي تُخزَّن ضمن قاعدة بيانات LDAP، كما أن الأذونات على قاعدة بيانات LDAP بحد ذاتها مخزنةٌ ومرتبةٌ ضمن شجرة DIT، وسيحتاج المستخدم للمرور بعملية الاستيثاق قبل محاولته الوصول للمعلومات ضمن قاعدة بيانات LDAP. يمكن توضيح وظيفة LDAP من خلال موازنتها مع طريقة عمل DNS، كما حدث مع خدمة AD. يستخدم DNS إجراء LDAP تُدار عملية الوصول لنظام DNS عبر عملية LDAP. في الواقع، يُعد DNS سريعًا لعدم احتواءه على نسخةٍ كاملةٍ من قاعدة البيانات، فهو يتحقق من قاعدة البيانات المحلية أولًا، وفي حال عدم عثوره على السجل، سيستعلم من خادم أب وهكذا حتى يعثر على إجابة. على نحوٍ مشابه لما يحصل في DNS، يستطيع LDAP -عند وجود استعلامٍ ما- أن يمرره إلى مكان وجود البيانات المطلوبة؛ وعندما يحتاج مستخدمٌ ما الوصول لمورد LDAP بعيد، يرسل الخادم المحلي أولًا طلب إذنٍ بالوصول لقاعدة البيانات المحلية؛ ففي حالة استعلام DNS مثلًا، إذا أراد المستخدم العثور على yahoo.com، سيطلب ذلك بدايةً من خادم DNS المحلي، وإذا كان لا يملك الجواب سيطلب ذلك من خادم DNS الجذر الذي يملك الإجابة ويعلم طريقة الوصول إليه. طرق أخرى للتحكم بالوصول تُعد قوائم التحكم بالوصول Access Control Lists -أو اختصارًا ACL- من أكثر طرق التحكُّم بالوصول شيوعًا وبساطةً ضمن الأنظمة والشبكات، وهي قائمةٌ من الأذونات على ملفٍ أو مجلدٍ تُمنح لمستخدمين معينين أو مجموعات. بالرغم من أنها لا تُعد من خدمات الدليل، لكن يمكن استخدامها أنظمةً لإدارة الوصول للمجلدات والملفات؛ فهي قويةٌ جدًا على سبيل المثال في إدارة الأذونات ضمن نظام الملفات مثل NFS، إذ تتمكن من إدارة الوصول لأنها تستطيع توفير أذونات القراءة والكتابة والتنفيذ لمجموعةٍ معينة من المستخدمين، ويمكنك أن تملك العديد من القوائم لمنح أو رفض الإذن. ليست قوائم ACL طرق استيثاق، إلا أنها توفر حمايةً ممتازةً لموارد الشركة. نظام الهوية وإدارة الوصول تُنفّذ عادةً أتمتة وصيانة خدمات الدليل والبروتوكولات، مثل AD و LDAP من قِبل التطبيقات الأخرى، وستحتاج لاستخدام نظام إدارة الوصول للهوية IAM للإعداد والضبط الأولي لتلك الخدمات. الهدف الأساسي من تلك الأنظمة هو جمع كافة المعلومات المتاحة ضمن خدمات الوصول للدليل في مكانٍ واحد، إذ يُعد IAM إطار عمل يبسِّط عملية الإدارة والوصول للهويات المختلفة، ويحتوي على جميع السياسات والتقنيات التي تسهِّل عملية إدارة الهويات. قد يأتي نظام IAM كاملًا مع تحكُّمٍ بالوصول باستخدام الأدوار، مما يسمح بإدارة وتنظيم الوصول للشبكات والأنظمة بناءً على الأدوار الممنوحة للمستخدمين؛ إذ يمكن تعريف الدور بناءً على سلطة ومسؤولية المستخدم وكفاءته الوظيفية، فإذا كان للمستخدم مثلًا دور المدقق، فيمكن منحه الصلاحية لقراءة كل الملفات، ويمكن في حالةٍ أخرى منح المهندس صلاحية الوصول لقراءة وكتابة وعرض بعض الأنواع من الملفات فقط. بعض المزايا الأخرى التي قد يتضمنها نظام IAM: آليات جمع وتوثيق معلومات تسجيل الدخول للمستخدم. إمكانية إدارة قاعدة بيانات هوية المستخدم. إدارة التخصيص والإزالة لامتيازات الوصول. إمكانية تبسيط عملية تسجيل المستخدمين الجدد وإعداد الحسابات. القدرة على مراقبة وتعديل صلاحيات الوصول. المساعدة في تطبيق الأنظمة التي تتطلب تقارير دورية عن الوصول للبيانات. برمجيات إدارة وصول كما ذكرنا سابقًا، IAM هو إطار عمل لإدارة الهويات الرقمية والوصول، إذ يمكّنك من مراقبة الأخطار والتحكُّم بها من مكانٍ مركزي. تنتمي بعض الأدوات التي سنذكرها لأنظمةٍ كاملة ومعقدة لإدارة الشبكة؛ إذ تُضمِّن تلك الأنظمة إدارة الوصول ضمن حزمة منتجاتها. قد تكون تلك الأنواع من الأدوات مكلفةً، لكنها تناسب شبكات المؤسسات؛ وهناك أيضًأ أدوات مفتوحة المصدر ومجانية، وهي ببساطة مفسرات بسيطةٌ للدليل، وتساعد في إدارة إذن النظام على مستوًى بسيط، وهي مناسبةٌ للاستخدام الفردي والشبكات الصغيرة، ولكن قد تجد صعوبةً في إعدادها. تتضمن القائمة التالية أدوات إدارة الوصول المناسبة لكل أنواع الشبكات: 1. SolarWinds Access Rights Manager تطوِّر SolarWinds برمجيات تساعد في إدارة الشبكات والأنظمة والبنية التحتية لتكنولوجيا المعلومات IT، وقد استحوذت هذه البرمجيات على مزود إدارة صلاحيات الوصول 8MAN لإضافة وظائف التدقيق لزبائنهم من المؤسسات، وعدَّلت اسمه ليصبح مدير صلاحيات الوصول Access Rights Manager -أو اختصارًا ARM، ومع أن لدى SolarWinds العديد من أدوات مراقبة الوصول للدليل لكن تبقى أداة ARM أكثرها شمولية. يساعد ARM المدراء على إعداد التحقق من المستخدمين وأذونات الوصول وحماية الشبكات من الاستخدام غير المصرح به وحذف البيانات، وتدعم البرمجية الشبكات المبنية على خدمة AD فقط، لذا فهي تعمل على خادم ويندوز فقط. الهدف الأساسي من هذا المنتج هو تسهيل عملية تسجيل المستخدم وإزالته والتتبع؛ إذ يستطيع ARM المساعدة في حماية الأنظمة والبيانات من الاستخدام غير المصرح به والحذف من خلال التحكم وتحديد الوصول إلى المكونات الهامة، مثل خوادم الملفات وخدمة Active Directory وخادم Microsoft Exchange؛ كما يمكن بواسطة ARM توليد تقارير مخصصة توضح من لديه إذنٌ بالوصول إلى ماذا ومتى حدث الوصول لتلك البيانات، وكذلك إضافة وإزالة مستخدمين بسرعةٍ وسهولة باستخدام قوالب أدوارٍ محددة. بعض المزايا الأساسية: مراقبة وتتبع Active Directory. تدقيق مشاركة ملفات ويندوز. إدارة وصول SharePoint والمراقبة. إضافة وإزالة المستخدمين باستخدام القوالب. مراقبة خادم Microsoft Exchange. 2. ManageEngine AD360 تطوِّر ManageEngine برامجًا لإدارة تكنولوجيا المعلومات IT للمؤسسات بهدف توفير الأمان وإدارة الخدمات والعمليات وخدمة Active Directory، ويُعد AD360 المُقدَّم من ManageEngine حلًا متكاملًا لإدارة خدمة AD و Exchange بسهولة؛ فهذا البرنامج هو حل IAM شاملٌ ومصمَّمٌ لإدارة هوية المستخدم والتحكم بالوصول للموارد وتطبيق قواعد الأمان وتحقيقها في بيئات ويندوز، كما يتميز بواجهة مستخدم سهلة الاستخدام تسمح بتنفيذ مزايا إدارة وصول متقدمة، ومن أهم المزايا التي يقدِّمها AD360 لويندوز AD وخوادم Exchange وحتى Office 360 هي: أتمتة تزويد وإيقاف الوصول لحسابات المستخدمين. إدارة الخدمة الذاتية لكلمات المرور. مراقبة التغييرات على Active Directory. تدقيق آمن لخدمة AD و Office 360 وخوادم الملفات. ضمان تطبيق السياسات، مثل HIPAA و SOX وغيرها. 3. Apache Directory طوَّرت مؤسسة برمجيات أباتشي مشروع Apache Directory المفتوح المصدر، وهو تطبيقٌ مملوكٌ من قِبل أباتشي نفسها لخادم الدليل LDAP، إذ كُتِب البرنامج باستخدام جافا، وهو متاحٌ تحت رخصة برمجيات أباتشي. دليل أباتشي ApacheDS 2.0 هو خادم دليل LDAP مُوسّعٌ ومُضمّنٌ ومتوافقٌ كليًا مع LDAPv3، ويدعم البرنامج بروتوكولات شبكة أخرى، مثل كيربيروس Kerberos وبروتوكول توقيت الشبكة Network Time Protocol -أو اختصارًا NTP-. طُوِّرت عدة مشاريع فرعية مختصة بخدمات الدليل ضمن مشروع دليل أباتشي الرئيسي، وهذا ما جعل البرنامج متوافقٌ كثيرًا مع الخدمات الأخرى، ومن بين تلك المشاريع الفرعية Apache Directory Studio و eSCIMo و Fortress و Kerby و LDAP API و Mavibot. يُعد أباتشي DS برنامجًا متعدد المنصات، ويمكن تثبيته على نظام ماك ولينكس وويندوز، ويملك العديد من المزايا التي تجعله من أهم خوادم LDAP ومنها: يدعم إضافة المكونات والأنظمة الفرعية. يمكنه تضمين دلائل افتراضية وخوادم بروكسي وبوابات نفاذ إلى أدلة X.500. يدعم التقسيم المبني على BTree. طورت أباتشي Apache Directory Studio، وهو منصة دليل مجانية بُنيت خصيصًا لبرنامج ApacheDS لتسهيل إدارة الوصول، وتوضح الصورة المبينة أعلاه البرنامج أثناء عمله. 4. FreeIPA FreeIPA هو حلٌ مفتوح المصدر لإدارة الهوية لأنظمة لينكس، ويساعد في إدارة الهوية Identity والسياسات Policy والتدقيق Audits -أو اختصارًاIPA- مجانًا، إذ صُمِّم FreeIPA بالتركيز على توفير أتمتة مهام إدارة النشر والضبط. FreeIPA هو منصة IAM لتسهيل عمل مسؤولي أنظمة لينكس؛ وبالرغم من أنه قد طُوِّر لنظام لينكس، لكن يمكن تثبيته على RHEL ونظام ماك ويونكس؛ كما أنه يسمح لك بإدارة المستخدمين والمجموعات والمضيفين والخدمات وغيرها الكثير من مكان مركزيٍ بفضل واجهاته القابلة للتوسُّع وواجهة الويب الخاصة به و RPC وواجهة سطر الأوامر والواجهة البرمجية JSONRPC. يمكنك حماية الهويات بمساعدة FreeIPA من خلال تعريف استيثاق كيربيروس Kerberos وسياسات التصريح لكل الأنظمة والأجهزة لديك. من مزايا البرنامج إمكانية العمل مع أنظمة IAM أخرى بنفس الوقت، مثل مايكروسوفت AD، وأفضل ما في الأمر أنه يشبه Active Directory، إذ لا يوجد ذلك عادةً ضمن أنظمة لينكس. من المزايا الأخرى التي يتضمنها FreeIPA: تفعيل الاستيثاق لمرةٍ واحدة لأنظمتك. تعيين استيثاق كيربيروس Kerberos وسياسات التصريح. إدارة الخدمات، مثل SUDO و SELinux و DNS و NTP و autofs. 5. مدير حساب LDAP الفكرة الأساسية من مدير حساب LDAP -أو اختصارًا LAM- هي تبسيط التعقيدات التقنية لبروتوكول LDAP، إذ يسمح بإدارة المستخدمين والمجموعات الموجودة ضمن دليل LDAP بسهولة عبر تطبيق الويب الخاص به. البرنامج هو IAM مبنيٌ على الحساب، وهذا يتيح للمسؤول أخذ نظرةٍ مجردةٍ على كامل الدليل، كما يوفِّر البرنامج عارضًا ومحرّرًا لقاعدة بيانات LDAP، ويمكن تثبيته على ديبيان وفيدورا وسوزي لينكس. التطبيق الأصلي من LDAP Account Manager مجاني ومفتوح المصدر، ويوجد نسخةٌ مدفوعةٌ وموسَّعة منه تحت الرخصة التجارية، وتُدعى النسخة المدفوعة منه LDAP Account Manager Pro وتتضمن مزايا إضافية. على الرغم من عدم امتلاك النسخة المدفوعة مزايا كاملة كما البرامج الأخرى التي ذكرناها، لكن يبقى سعرها أرخص بكثير ويمكن أن تكون خيارًا مناسبًا لشبكة مؤسسة. بعض مزايا LDAP Account Manager Pro المدفوع: التسجيل الذاتي للخدمة وخيار إعادة تعيين كلمة المرور. خيار استيثاق متعدد العوامل. مزامنة كلمة المرور مع Samba. دعم لطرق تسجيل دخول متعددة، مثل uid والبريد الإلكتروني. الربط مع ملفات CSS خارجية. ملخص يُعد التحكُّم بالوصول والإدارة من أهم مكونات تأمين شبكات المنظمات، إذ أن المشكلة الرئيسية التي يحاول برنامج IAM حلّها هي التحكُّم بالمستخدمين ذوي امتيازات الوصول الكبيرة بهدف حماية الشبكة من أي هجوم داخلي، فالحل يكون باستخدام منصة يمكنها التحكُّم بالوصول إلى Active Directory أو LDAP و خوادم الملفات و Exchange، ويضمن بذلك حماية كل البيانات والأنظمة من الاستخدام غير المصرح به ومن إساءة الاستخدام والتعديل والحذف. اختيار IAM المناسب مهمةٌ صعبة، إذ أن هناك ثلاثة عوامل مسيطرة قد تؤثر على قرار اختيار المنتج، أولها هو نظام التشغيل العامل على شبكتك، ثم حجم تلك الشبكة، ثم الميزانية المتاحة. نظام التشغيل: مع أن LDAP يدعم ويندوز، لكن إذا كنت تعمل على خادم ويندوز ضمن شبكتك يُفضّل العمل على Active Directory، لأنك ستتمكن من الاستفادة من شبكة ويندوز والتحكم بالوصول والتعامل مباشرةً مع خوادم Exchange و Office 365؛ ولكن إذا كنت تعمل على أنظمة لينكس، فستحتاج لاستخدام برمجيات IAM مبنيةٍ على LDAP. حجم الشبكة: إذا كان حجم الشبكة لديك كبيرًا، ستكون مزايا، مثل الاستيثاق عبر تسجيل الدخول لمرةٍ واحدة وإعادة تعيين كلمة المرور ذاتيًا مهمةً جدًا للمسؤولين لتسريع أدائهم، لكن قد لا تناسب تلك المزايا الشبكات الصغيرة. الميزانية: لا يملك الجميع ميزانيةً كافيةً لشراء أفضل المنتجات المُتاحة في السوق، لكن تأتي كل المنتجات التي ذكرناها في هذا المقال مع فترة تجربةٍ مجانية أو تكون مجانية 100%، حتى تتمكن من اختبارها قبل نشرها واستخدامها ضمن شبكتك. أول ما يمكنك فعله هو تحديد احتياجات نظام التشغيل، ثم حجم الشبكة، ثم الميزانية، ويمكنك بعدها تجربة بعض تلك المنتجات وتحديد المنتج الذي يلبي متطلباتك على النحو الأمثل. نأمل أن تساعدك هذه المقالة في فهم إدارة الوصول ودورها المهم ضمن البنية التحتية للشبكة لديك ولعملك بصفة مسؤول IT أو مهندس. ترجمة -وبتصرف- للمقال "Access Management – What is It and How to Manage/Monitor" لصاحبه Marc Wilson. اقرأ أيضًا أنواع لوائح التحكم في الوصول ACL استخدام قوائم التحكم في الوصول ACL وتركيب أنظمة الملفات الشبكية على Red Hat Enterprise Linux الشبكات الفرعية والاختصارات في لوائح التحكم في الوصول ACL التحكم بالوصول إلى الأقراص الخارجية في لينكس
-
تطوير صفحات الويب يتم من خلال بناء صفحات HTML وتنسيقها باستخدام CSS، وذلك يكفي لبناء موقع كامل بصفحات ومحتوى ثابت، يمكن استخدام جافاسكريبت ضمن تلك الصفحات لإضافة ميزات متقدمة تفاعلية تُغني صفحة الويب وتزيد التفاعلية وتوفر مزايا إضافية عليها، حاجتنا للغات برمجية أخرى (مثل بايثون أو PHP) ضمن سياق بناء مواقع الويب يأتي من الحاجة لبناء صفحات الويب تلك بشكل ديناميكي متغير، كعرض محتوى مختلف أو معالجة طلبات ضمن شروط محددة، يمكن استخدام أي لغة واختيار أي إطار عمل قادر على توفير المزايا المطلوبة لموقعك، الاختيار لديك هو في حاجتك لبناء موقع بصفحات ثابتة وهنا لن تحتاج سوى ل HTML و CSS و جافاسكريبت، أو متغيرة وهنا ستحتاج للغة برمجة مثل بايثون، يمكنك الاستفادة جدًا من قراءة المقال التالي الذي يشرح مُفصلًا كافة نواحي تطوير الويب واللغات والتقنيات المستخدمة ودورها:
-
في لغات البرمجة لا يوجد الأفضل، لكل لغة خصائصها التي تميزها، والمكتبات وأطر العمل المتوفرة لها ومجتمع المطورين الذي يستخدمها، إذا كنت تملك خبرة سابقة بلغة بايثون وخبرة في بناء التطبيقات بها واستخدام أطر عملها مثل Flask و Django يفضل أن تبني تطبيقك بها، واستشر صاحب المشروع بذلك في حال كان لديه اطلاع على تلك التفاصيل قد يهمه أن يبنى التطبيق بلغة أو إطار عمل معروف يسهل مستقبلًا عملية العثور على مطور ما لأغراض التطوير والصيانة، يمكنك الاستفادة من قراءة الأجوبة على الأسئلة التالية:
-
في هذه الحالة يجب استخدام طلبات AJAX، يمكن الاستفادة من الحدث change على حقل الإدخال لإرسال طلبات إلى الخادم للاستعلام عن القيمة الحالية كالتالي: <script> document.querySelector('input[name=code]').addEventListener('change', function(e) { const code = e.target.value; // إرسال طلب للاستعلام fetch(`/?code=${code}`) .then(res => res.text()) .then(nameExists => nameExists == 1 ? showError('الاسم مسجل مسبقًا')) : clearError(); }); function showError(message) { // .. HTML إظهار رسالة الخطأ ضمن } function clearError(){ // .. إخفاء رسالة الخطأ } </script> وضمن شيفرة php يمكن تلقي القيمة q من GET_ وإرسال رد إما ب 1 أو 0 ليعبر وجود الاسم مسبقًا أم لا (من الضروري طباعة النتيجة وإنهاء الطلب مباشرة لأنه طلب استعلام فقط )كالتالي: <?php if(isset($_GET['code']){ $code = $_GET['code']; $ser = $database->prepare("SELECT * FROM `test` WHERE CODE = $code"); $ser->execute(); echo count($ser->fetchAll()) > 0 ? "1" : "0"; // طباعة نتيجة الاستعلام exit(); // انهاء الطلب }
- 3 اجابة
-
- 2
-
-
عملية التحقق تتم بالكامل بطرف الخادم، أي لا داعي لوجود شيفرة جافاسكريبت ضمن الصفحة، المشكلة لديك أن الشيفرة تتحقق من ووجود القيمة add في المصفوفة POST_$ وعلى أساسها تدرج سجل جديد ضمن قاعدة البيانات دون التحقق فيما إذا كان موجودًا من قبل، لحل المشكلة يجب نقل عملية التحقق إلى الأعلى قبل عملية الإدراج وتسجيل نتيجة عملية التحقق في حال فشلت في متغير ما يتم عرضه كرسالة للمستخدم أسفل النموذج كالتالي: <?php // محاولة إنشاء جديدة if(isset($_POST['add'])){ // نتحقق أولًا $code=$_POST['code']; $name=$_POST['name']; $ser = $database->prepare("SELECT * FROM `test` WHERE CODE = $code"); $ser->execute(); $error = null; if(count($ser->fetchAll()) > 0) { // نظهر خطأ $error = "الكود مسجل من قبل" . " " . $_POST['add'] ; } else { // نضيف سجل جديد $add=$database->prepare("INSERT INTO `test` (`id`, `code`, `name`) VALUES (NULL, $code, '$name')"); $add->execute(); } } ?> <form action="" method="POST"> <input onchange="search()" name="code" type="number" placeholder="ادخل الكود"> <input name="name" type="text" placeholder="ادخل الاسم"> <button name="add" type="submit">add اضافة</button> </form> <?php /* عرض رسالة الخطأ */ if($error) echo $error; ?>
- 3 اجابة
-
- 2
-
-
لا يمكن استهداف الحالة hover للعنصر after مباشرة، فكما تلاحظ حتى ضمن أدوات المطور لا يمكنك تفعيلها، ما يمكنك فعله بدلًا من ذلك هو عند وضع المؤشر فوق العنصر صاحب الصنف submit-wrapper أن يتم تغيير تنسيقات العنصر after، ذلك ممكن بتغيير المحدد إلى التالي: .form-section .submit-wrapper:hover::after { .. } التنسيقات في هذا المحدد سيتم تطبيقها على العنصر after
- 4 اجابة
-
- 1
-
-
في CSS لا يمكن استخدام المحدد after للعناصر مثل input، لحل المشكلة يمكنك وضع العنصر input ضمن حاوية بالصنف submit-wrapper و استهداف تلك الحاوية بالمحدد after وتنسيقها كما المطلوب كالتالي: <div class="submit-wrapper"> <input type="submit" value="Send me a letter" class="showForm" /> </div> وفي CSS .form-section .submit-wrapper::after { .. ^^^^^^^^^^^^^^^ }
- 5 اجابة
-
- 1
-
-
المتصفح الافتراضي يتم تعيينه من قبل نظام التشغيل، Live Server فقط يفتح المتصفح الافتراضي المُعين على نظام التشغيل، على ويندوز يمكنك تغيير المتصفح الافتراضي كالتالي: من Start نبحث عن Default apps ونختارها ضمن القائمة التي تظهر نختار Web browser (سيكون مُعيّنًا افتراضيًا إلى Edge) ومن القائمة اختر المتصفح الافتراضي الذي تريد
- 1 جواب
-
- 1
-
-
يرجى إرفاق شيفرة HTML المتعلقة بالمشكلة كاملة نصيًا ضمن السؤال حتى نتمكن من المساعدة
-
يمكن باستخدام تحويل النوع الصريح لتحويل كلا الكائنين إلى مصفوفة ترابطية associative عبر النوع array كالتالي: <?php (array) $obj1; // ["a" => "a", "b" => "b"] (array) $obj2; // ["c" => "c", "d" => "d"] ثم نستفيد من التابع array_merge لدمج المصفوفتين الناتجتين في مصفوفة واحدة كالتالي: <?php array_merge((array) $objectA, (array) $objectB); // ["a" => "a", "b" => "b", "c" => "c", "d" => "d"] ثم يمكن تحول المصفوفة الناتجة إلى كائن مجددًا عبر النوع object كالتالي: <?php $newObj = (object) array_merge((array) $objectA, (array) $objectB); echo $newObj->a; // a echo $newObj->b; // b echo $newObj->c; // c echo $newObj->d; // d لكن هذا النوع من الدمج محدود ويقوم بدمج الخصائص العامة فقط ولا يدمج التوابع
- 2 اجابة
-
- 1
-