اذهب إلى المحتوى

لوحة المتصدرين

  1. سامح أشرف

    سامح أشرف

    الأعضاء


    • نقاط

      5

    • المساهمات

      2934


  2. محمد هاني صباغ

    • نقاط

      4

    • المساهمات

      95


  3. محمد أبو عواد

    محمد أبو عواد

    الأعضاء


    • نقاط

      4

    • المساهمات

      6234


  4. Wassim Salem

    Wassim Salem

    الأعضاء


    • نقاط

      3

    • المساهمات

      7


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 09/26/21 في كل الموقع

  1. السلام عليكم ورحمة الله وبركاته أخي الكريم أحس ببعض الصعوبة بوصول الهدف من دروس الاساسيات في جافا سكريبت بعض الفيديوهات تكون سريعه جداً ولا يكون الشرح فيها مبسط لفهم الهدف منها ولا يوجد أملثه كثيره لفهمها جيداً، وبعد البحث مع مبرمجين قالوا لي انه يجب عليك ان يكون عندك اطلاع بلغة html و css قبل الدخول في لغة جافا سكريبت. ١_هل هو صحيح انه يجب ان يكون عندي اطلاع بلغة html و css قبل تعلم لغة جافا سكريبت؟ ٢_ماذا يجب علي ان افعله من أجل فهم الاساسيات وكيف اقوم بترسيخ هذه الاساسيات عندي.؟ وشكراً سلفاً أخي الكريم
    3 نقاط
  2. و عليكم السلام و رحمة الله بداية أدعوك إلى عدم القلق بشأن مواجهة صعوبة في الفهم أو الإحساس بعدم وصول الفكرة , فهذا الأمر شائع جدا في الأوساط البرمجية و ستحتاج أن تتعلم الصبر في التعلم قبل كل شيء . أما عن سؤالك بخصوص تعلم HTML و CSS لتعلم جافاسكربت فإن تعلمهما ليس إلزاميا لتعلم الجافاسكربت , و ذلك لكونها لغة مستقلة بمنطقها و سياقها الخاص و بطريقة تعاملها الخاصة , و لكن تعلم الـ HTML و الـ CSS قبلها أو معها سيأخذ بتعلمها إلى بعد اخر , بعيدا عن التجريد الذي تعتمده لغات البرمجة خصوصا و أنك تلتمس نتائج شيفرة الجافاسكربت على شاشة المتصفح . و هذا لا يعني بالضرورة تطبيق ما يعرف بنموذج كائن الوثيقة DOM أو نموذج كائن المتصفح BOM . بل المقصود هو تطبيقك لمفاهيم الجافاسكربت كالتكرارات و المتغيرات و الدوال و غيرها بطريقة تلخص نتائجها في عرض و تلاعب على الشاشة . أي أن الإجابة بإختصار على السؤال "هل يجب تعلم HTML و CSS قبل الجافاسكربت؟" هي "لا ليس بالضرورة , و لكنها تجعل عملية تعلمها أبسط , أسرع و أكثر فعالية و أبعد عن التجريد التي تأتي به اللغة " . ترسيخ الأساسيات و مفاهيم اللغة لا يأتي اعتباطا , فبعض المفاهيم لا يحتاج شرحها إلا بضع دقائق بالعفل ,.و لكن استيعابها و هضمها من طرفنا يتم على طول مسارنا و أثناء و بعد تطبيقاتنا العملية لها . لذلك فإن أفضل طريقة لإكتسابها هي بممارستها و تطبيقها و مجددا الصبر معها . فقد يحدث أن لا تستوعب بعض الأفكار أو أن تستوعبها جزئيا الان أو خلال تعلمك للأساسيات , ثم يدعوك موقف ما إلى استذكارها و إستيضاحها . كما أن مدربي الأكاديمية في خدمتك في أي لحظة , و على طول مسارك التعليمي في الدورة . و لذلك لا تتردد بشأن السؤال في القسم المخصص لتعليقات الطلبة أسفل كل فيديو حول أي مفهوم أو فكرة أو شيفرة يصعب فهمها لديك , و سيعمل المدربون على إيضاح الفكرة لك و تبسيطها . من شأن هذا أن يجعلك تطور من نفسك في أول خطوة من حل المشكلات و هي " وصفها " و من جهة أخرى سيبسط مناقشة الفكرة و الأخذ و الرد بشأنها فهمها و إيضاحها و إبعاد كل صعوبة عنها .
    3 نقاط
  3. إن لغة البرمجة جافاسكربت هي لغة مستقلة بذاتها وفهمها واستعمالها غير مرتبط بأي لغات برمجة أخرى، حيث يمكن استخدام جافاسكربت للقيام بأي عمليات برمجية وسكربتات، يقتصر ارتباطها ل HTML - CSS في برمجة واجهات المستخدم في مواقع الويب ولا تحتاج لشيئ آخر لاستعمالها معهم. إن كنت تتابع دورة تصميم واجهات المستخدم، فهذه الدورة تبدأ بأساسيات HTML و CSS أما دورة تطوير المواقع بواسطة جافاسكربت، لاتحتاج ل HTML - CSS فكل الشيفرة يتم كتابتها ل javascript ومن ثم يتم تحويلها بدون تدخل المطور لتصبح HTML ليعرضها المتصفح. بعد اشتراكك بأي دورة في أكاديمية حسوب، سيتم فتح المسارات الأولى من باقي الدورات مجاناً ويمكنك الاطلاع عليهم ودراستهم ومنمهم أساسيات HTML - CSS في دورة تطوير واجهات المستخدم وبالطبع سوف تستفيد منها دورة تطوير واجهات المستخدم > أساسيات تطوير الويب حيث أن هنالك جزء JSX (في واجهات المستخدم) في بعض أطر العمل يتم كتابته بتنسيق مثل HTML لكنه غير مرتبط فعليا بها، .. أما React فهي مكتبة واجهات مستخدم ترتبط مباشرة مع HTML - CSS يمكنك طرح أي أسئلة تشائها في قسم التعليقات أسفل الدرس، وطلب توضيحات أو أمثلة وسيعمل المدربين على شرحهم.
    2 نقاط
  4. هل يوجد طريقة ما لحساب ان كان العدد اولي دون المرور من العدد 2 حتى العدد س ؟
    2 نقاط
  5. تُستخدَم قواعد البيانات العلاقيّة منذ وقت طويل. لقد اكتسبت قواعد البيانات من هذا النوع شُهرة بفضل أنظمة إدارتها التي تستخدم النموذج العلاقيّ بشكل جيّد للغاية، وهو النموذج الذي أثبت نفسه كطريقة رائعة للتعامل مع البيانات وخاصة في التطبيقات ذات المهام الحرجة. سنحاول في هذا المقال شرح الفروقات الرئيسيّة في بعض أكثر أنظمة إدارة قواعد البيانات العلاقيّة (RDBMS) شُهرة واستخدامًا. سنستكشف الفروقات الرئيسيّة بينها من حيث المزايا والأداء الوظيفيّ، وكيفية عملها، ومتى تتفوق إحداها على الأخرى، وذلك من أجل مساعدة المطورين على اختيار نظام إدارة قواعد بيانات علاقية (RDBMS). أنظمة إدارة قواعد البيانات قواعد البيانات هي مساحات تخزين مرتبة منطقيًّا لكل الأنواع المختلفة من المعلومات (البيانات). لكل نوع من قواعد البيانات –باستثناء عديمة المخطط– نموذج يقدم هيكلة للبيانات التي يتم التعامل معها. أنظمة إدارة قواعد البيانات هي تطبيقات (أو مكتبات) تدير قواعد البيانات بأشكالها وأحجامها وأنواعها المختلفة. أنظمة إدارة قواعد البيانات العلاقية تستخدم أنظمة قواعد البيانات العلاقيّة النموذج العلاقيّ للعمل على البيانات. يشكّل النموذج العلاقيّ المعلومات التي ستُخَزَّن مهما كان نوعها، وذلك بتعريفها ككيانات مترابطة ذات خصائص تتعدى الجداول (أي مخططات). تتطلب أنظمة إدارة قواعد البيانات من هذا النوع أن تكون البُنى (كالجداول مثلًا) معرّفة لتحوي بيانات وتتعامل معها. لكلّ عمود (مثل الخصائص) في الجداول نوعٌ مختلف من المعلومات (نوع البيانات). يُترجَم كلّ سجلّ في قاعدة البيانات –مُعرّف بمفتاح فريد– إلى صفّ ينتمي إلى جدول، وتكون مجموعة خصائص كل سجل معروضة كأعمدة للجدول. وتكون كلها مرتبطة ببعضها كما هو محدد في النموذج العلاقيّ. العلاقات وأنواع البيانات يمكن اعتبار العلاقات مجموعات حسابية تحوي مجموعة من الخصائص التي تشكّل معًا قاعدة البيانات والمعلومات المحفوظة فيها. تسمح هذه الطريقة في التعريف والتجميع لقواعد البيانات العلاقيّة بالعمل بالطريقة التي تعمل بها. عند تعريف جدول لإدخال سجلات، يجب أن يطابق كلّ عنصر يشكل سجلًّا (كالصفة attribute مثلًا) نوع البيانات المحدّد له (كأن يكون عددًا صحيحًا أو تاريخًا مثلًا). تستخدم أنظمة إدارة قواعد البيانات العلاقيّة أنواعًا مختلفة من البيانات ولا يمكن في العادة تبديل واحدة من هذه الأنواع مكان الأخرى. التعامل مع وعبر قيود –كالتي ذكرناها قبل قليل– شائع مع قواعد البيانات العلاقيّة. في الحقيقة، تشكّل القيودُ مركزَ العلاقات. ملاحظة: إذا كنت تحتاج للتعامل مع معلومات غير مترابطة إطلاقًا وممثلة عشوائيًّا (كالمستندات مثلًا)، فقد تكون مهتمًّا باستخدام NoSQL (قواعد البيانات عديمة المخططات schema-less). قواعد بيانات علاقية شائعة وهامة سنتعرف في هذا المقال على ثلاثة أنواع رئيسيّة وهامّة من أنظمة إدارة قواعد البيانات العلاقيّة مفتوحة المصدر التي ساهمت في تكوين عالم تطوير البرمجيات: SQLite: نظام إدارة قواعد بيانات علاقيّة مضمّن وقويّ جدًّا. MySQL: نظام إدارة قواعد البيانات العلاقيّة الأشهر والأكثر استخدامًا. PostgreSQL: نظام إدارة قواعد البيانات العلاقيّة الكيانيّ مفتوح المصدر المتوافق مع SQL الأكثر تقدّمًا. ملاحظة: تقريبًا دائمًا تتيح التطبيقات مفتوحة المصدر حريّة استخدام الطريقة التي تريدها. وفي غالب الأحيان تسمح لك أيضًا إنشاء تفرّع (fork) عن المشروع (وبالتالي استخدام نصوصه البرمجيّة) لإنشاء شيء جديد. إذا كنت مهتمًّا بأنظمة إدارة قواعد البيانات، فقد ترغب بالاطلاع على بعض المشاريع المتفرّعة المبنية على هذه المشاريع الشهيرة، مثل MariaDB. SQLite إنّ SQLite مكتبة رائعة تُضمَّن في التطبيقات التي تستخدمها. وكونها قاعدة بيانات قائمة بذاتها ومعتمدة على الملفات. تقدّم SQLite مجموعة رائعة من الأدوات للتعامل مع كل أنواع البيانات بقيود أقلّ بكثير وسهولة مقارنة بقواعد البيانات المستضافة المعتمدة على العمليات (خواديم قواعد البيانات). عندما يستخدم برنامج ما SQLite، يعمل هذا التكامل بنداءات (calls) مباشرة ومؤدية للغرض موجهة لملف يحوي البيانات (كقاعدة بيانات SQLite) بدلًا من التواصل عبر واجهة من نوع ما (كالمنافذ ports والمقابس sockets). هذا يجعل SQLite كفؤة وسريعة للغاية، وقويّة كذلك، وهذا بفضل التقنية التي بنيت عليها هذه المكتبة. أنواع البيانات التي تدعمها SQLite: NULL: قيمة فارغة NULL. INTEGER: عدد صحيح ذو إشارة (موجب أو سالب) محفوظ في بايت واحد، 2، 3، 4، 6، أو 8 بايت، وهذا يعتمد على حجم القيمة. REAL: قيمة النقطة العائمة (floating point)، مخزنة كرقم نقطة IEEE عائمة ذي 8-بايت. TEXT: سلسلة نصيّة مخزنة باستخدام ترميز قاعدة البيانات (UTF-8, UTF-16BE or UTF-16LE). BLOB: فقاعة من البيانات، تخزّن كما أدخِلَت تمامًا. ملاحظة: لمعرفة المزيد عن أنواع بيانات SQLite والعلاقات بين أنواع SQLite، ألقِ نظرة على التوثيق الرسميّ حول الموضوع. مزايا SQLite: معتمدة على الملفات: تتكون قاعدة البيانات بأكملها من ملف واحد على القرص، مما يجعلها محمولة تمامًا. مدركة للمعايير: رغم أنها قد تبدو كتطبيق قواعد بيانات "بسيط"، إلّا أن SQLite تستخدم SQL. ورغم أنّها أزالت بعض المزايا ( RIGHT OUTER JOIN أو FOR EACH STATEMENT) إلّا أنها تحوي بداخلها مزايا أخرى إضافيّة. ممتازة للتطوير، بل وحتى للاختبار: أثناء مرحلة تطوير التطبيقات، في الغالب يحتاج أغلب الناس لحلّ يمكن تطويعه للطلبات المتعدّدة. لدى SQLite قاعدة مزايا غنيّة، ويمكنها تقديم أكثر مما تحتاجه للتطوير، وبسهولة العمل مع ملف وحيد ومكتبة مرتبطة مبنية على C. عيوب SQLite: لا توفّر إدارة للمستخدمين: تأتي قواعد البيانات المتقدّمة بإدارة للمستخدمين –فمثلًا، فيها اتصالات مُدارة بصلاحيات الوصول إلى قواعد البيانات والجداول–. وبأخذ هدف وطبيعة SQLite بعين الاعتبار (عدم وجود مستوىً عالٍ من تعدّد المستخدمين في ذات الوقت)، لا وجود لهذه الميزة. عدم توفر إمكانية التلاعب بها للحصول على أداء أفضل: ونظرًا لطبيعة تصميمها أيضًا، لا يمكن التلاعب بـ SQLite للحصول على قدر كبير من الأداء. المكتبة سهلة الضبط والاستخدام. وبما أنها ليست معقّدة، فلا يمكن تقنيًّا جعلها أكثر أداءًا مما هي عليه، وبشكل يفوق أداءها الحاليّ الرائع. متى تستخدم SQLite: التطبيقات المضمّنة: كلّ التطبيقات التي تحتاج لقابليّة النقل، والتي لا تحتاج لتحجيم، كتطبيقات المستخدم المحلي والوحيد، وتطبيقات الهاتف النقّال أو الألعاب. كبديل عن الوصول إلى القرص: في العديد من الحالات، يمكن أن تستفيد التطبيقات التي تحتاج للقراءة من والكتابة إلى الملفات على القرص مباشرة من الانتقال إلى SQLite من أجل المزيد من الوظائف والسهولة اللتان تأتيان من استخدام لغة الاستعلام البنيويّة (Structured Query Language – SQL). الاختبار: من التبذير أن تستخدم نسبة كبيرة من التطبيقات عمليّة إضافيّة لاختبار منطقيّة العمل (أي الهدف الرئيسيّ للتطبيق: الوظيفيّة). متى لا تستخدم SQLite: في التطبيقات متعدّدة المستخدمين: إذا كنت تعمل على تطبيق يحتاج فيه العديد من المستخدمين الوصول إلى نفس قاعدة البيانات واستخدامها، فالغالب أنّ مدير قواعد بيانات علاقيّ كامل المزايا (مثل MySQL) خيار أفضل من SQLite. في التطبيقات التي تحتاج لقدر كبير من الكتابة: من محدوديّات SQLite عمليات الكتابة. يسمح نظام إدارة قواعد البيانات هذا عملية كتابة واحدة وحيدة أن تتم في وقت محدّد، مما يسمح بقدر محدود من الدفق. MySQL تعد MySQL أشهر خوادم قواعد البيانات الكبيرة. وهو منتج مفتوح المصدر غنيّ بالمزايا، ويشغّل الكثير من المواقع والتطبيقات على الإنترنت. من السهل البدء باستخدام MySQL، ولدى المطورين وصول إلى كمّ هائل من المعلومات المتعلقة بقواعد البيانات على الإنترنت. ملاحظة: يجب أن نذكر أنّه نتيجة لشيوع المُنتَج، فإنّ هناك الكثير من تطبيقات الشركات الأخرى وأدواتها ومكتباتها المضمّنة التي تساعد كثيرًا في الهديد من نواحي العمل مع نظام إدارة قواعد البيانات العلاقيّة هذا. ورغم عدم محاولتها تطبيق معيار SQL كامل، إلّا أنّ MySQL تقدّم الكثير من الوظائف للمستخدمين. وكخادم SQL قائم بذاته، تتصل التطبيقات بعملية مراقب MySQL (وهو تطبيق يعمل في الخلفية بعيدًا عن مرأى المستخدم، ويشار إليه أحيانًا بعبارة جنيّ أو عفريت) للوصول إلى قواعد البيانات ذاتها على خلاف SQLite. أنواع البيانات التي تدعمها MySQL: TINYINT: عدد صحيح متناهي الصغر. SMALLINT: عدد صحيح صغير. MEDIUMINT: عدد صحيح متوسّط الحجم. INT or INTEGER: عدد صحيح بحجم عاديّ. BIGINT: عدد صحيح كبير. FLOAT: عدد بفاصلة عائمة صغير أحاديّ الدقّة (single-precision floating-point). لا يمكن إلغاؤه. DOUBLE, DOUBLE PRECISION, REAL: عدد بفاصلة عائمة متوسط الحجم مزدوج الدقّة (normal-size/double-precision floating-point). لا يمكن إلغاؤه. DECIMAL, NUMERIC: عدد بفاصلة عائمة غير مُحتوىً. لا يمكن إلغاؤه. DATE: تاريخ. DATETIME: تجميعة من الوقت والتاريخ TIMESTAMP: ختم زمني (وقت وتاريخ حدوث حدث ما). TIME: وقت. YEAR: سنة بهيئة منزلتين أو أربعة منازل (المبدئيّ 4 منازل). CHAR: سلسلة نصّيّة ذات طول محدّد يتم دائمًا إكمالها من ناحية اليمين بفراغات إلى الطول المحدّد عند تخزينها. VARCHAR: سلسلة نصيّة ذات طول متغيّر. TINYBLOB, TINYTEXT: عمود نصّ أو فقاعة (blob) بحدّ أقصى للطول قدره 255 (أي 2^8 – 1) محرفًا. BLOB, TEXT: عمود نصّ أو فقاعة (blob) بحدّ أقصى للطول قدره 65535 (أي 2^16 – 1) محرفًا. MEDIUMBLOB, MEDIUMTEXT: عمود نصّ أو فقاعة (blob) بحدّ أقصى للطول قدره 16777215 (أي 2^24 - 1) محرفًا. LONGBLOB, LONGTEXT: عمود نصّ أو فقاعة (blob) بحدّ أقصى للطول قدره 4294967295 (أي 2^32 - 1) محرفًا. ENUM: تِعداد. SET: مجموعة. مزايا MySQL سهلة الاستخدام: يمكن تثبيت MySQL بسهولة شديدة. أدوات الأطراف الخارجية (third-party)، بما فيها المرئيّة (أي الواجهات الرسوميّة) تجعل البدء مع قواعد البيانات سهلًا للغاية. غنيّة بالمزايا: تدعم MySQL الكثير من وظائف SQL المتوقّع وجودها في أنظمة إدارة قواعد البيانات العلاقيّة، سواء بطريقة مباشرة أو غير مباشرة. آمنة: الكثير من مزايا الأمن وبعضها متقدّم مبنيّة في MySQL. قويّة وقابلة للتحجيم: يمكن لـMySQL التعامل مع الكثير من البيانات، ويمكنها أيضًا استخدامها على نطاق واسع إذا احتاج الأمر. سريعة: التخليّ عن بعض المعايير سمح لـ MySQL بالعمل بكفاءة عالية وبطريقة سلسة، مما أكسبها سرعة عالية. عيوب MySQL المحدوديّات المعروفة: من حيث التصميم، لا تنوي MySQL عمل كلّ شيء، وتأتي بمحدوديّات وظيفيّة قد تتطلبها بعض التطبيقات المتقدّمة جدًّا من الناحية الفنيّة. القضايا المتعلّقة بالمتانة: الطريقة التي يتم التعامل فيها مع بعض الوظائف في MySQL (كالمراجع، والتبادلات، والتدقيق، وغيرها) تجعلها أقل متانة بقليل من بعض أنظمة إدارة قواعد البيانات العلاقيّة الأخرى. بطء تطويرها: رغم أنّ MySQL ما زالت من الناحية الفنيّة منتجًا مفتوح المصدر، إلّا أنّ هناك انتقادات تتعلق بعمليّة تطويرها منذ الاستحواذ عليها. ولكن علينا التنويه إلى أنّ هناك قواعد بيانات مبنيّة على MySQL ومتكاملة معها تمامًا تضيف مزايا على تثبيت MySQL القياسيّ (مثل MariaDB). متى تستخدم MySQL العمليّات الموزّعة: عندما تحتاج لأكثر مما تتيحه SQLite، فإنّ تضمين MySQL في قائمة التطوير لديك – كذلك بالأمر بالنسبة لتضمين أيّ خادم قواعد بيانات مستقل – يقدّم لك الكثير من الحريّة في العمل إلى جانب بعض المزايا المتقدّمة. الأمان العالي: مزايا MySQL الأمنيّة تقدّم حماية يُعتمد عليها للوصول إلى البيانات (واستخدامها) بطريقة بسيطة. المواقع وتطبيقات الوِب: يمكن للأغلبية العُظمى من المواقع (وتطبيقات الوِب) العمل ببساطة مع MySQL رغم القيود. هذه الأداة المرنة والتي يمكن تحجيمها إلى حدّ ما سهلةُ الاستخدام والإدارة؛ وهذا مفيدٌ جدًّا على المدى البعيد. الحلول الخاصّة: إذا كنت تعمل على حلول محدّدة جدًّا ومخصّصة للغاية، يمكن لـMySQL العمل ضمن احتياجاتك بسهولة، وذلك بفضل إعدادات الضبط الغنيّة فيها وأوضاع العمل. متى لا تستخدم MySQL التوافقيّة مع SQL: بما أنّ MySQL لا تطبّق (ولا تسعى لتطبيق) معيار SQL بأكمله، فإنّ هذه الأداة ليست متوافقة بالكامل مع SQL. إذا كنت قد تحتاج التكامل مع أنظمة إدارة قواعد بيانات علاقيّة كهذه، فإنّ الانتقال من MySQL لن يكون سهلًا. التعدّدية Concurrency: رغم أنّ MySQL وبعض محرّكات الحفظ تعمل بأداء جيّد جدًّا في عمليات القراءة، إلا أنّ عمليات القراءة والكتابة متزامنتين قد تكون سيئة. نقص المزايا: مجدّدًا نقول، اعتمادًا على اختيار محرّك قواعد البيانات، يمكن أن لا تحوي MySQL على بعض المزايا، كالبحث في النصوص الكاملة. PostgreSQL إنّ PostgreSQL هي نظام إدارة قواعد البيانات العلاقيّة الكيانيّ مفتوح المصدر الأكثر تقدّمًا، والتي هدفها الرئيسيّ أن تكون موافقة للمعايير ويمكن الزيادة عليها. تسعى PostgreSQL (أو Postgres) إلى تبني معايير ANSI/ISO SQL مع مراجعاتها. تتميّز PostgreSQL عن أنظمة إدارة المحتوى الأخرى بدعمها للتوجه الكيانيّ (object-oriented) المتكامل والمطلوب بشدّة و/أو وظائف قواعد البيانات العلاقيّة، كدعمها الكامل للتبادلات (القيود transactions) التي يعتمد عليها، أي أن تكون مكونة من عناصر غير قابلة للتجزئة، وأن تكون متّسقة ومعزولة وذات قدرات تحمل عالية (Atomicity, Consistency, Isolation, Durability – ACID). وبسبب التقنية القوية التي تقف خلفها، لدى Postgres قدرات عالية جدًّا في التعامل مع العديد من المهام بكفاءة عالية. يتم الوصول إلى التعدّدية (concurrency) دون قفل قراءة، وذلك بفضل تطبيق تحكم التعدّديّة متعدد الإصدارات (Multiversion Concurrency Control – MVCC). يمكن برمجة الكثير في PostgreSQL، وبالتالي يمكن توسعتها، وذلك باستخدام إجراءات مخصّصة تُدعى "إجراءات التخزين" (store procesures). يُمكن إنشاء هذه الإجراءات لتسهيل تنفيذ عمليات قاعدة البيانات المكررة والمعقدة والتي تكثر الحاجة إليها. رغم أنّ نظام إدارة قواعد البيانات هذا لا يحظى بشعبيّة MySQL، إلّا أنّ هناك الكثير من أدوات الأطراف الأخرى ومكتباتهم مصمّمة لجعل العمل مع PostgreSQL سهلًا، رغم طبيعته القويّة. يمكن الحصول على PostgreSQL هذه الأيام كحزمة تطبيقات من خلال مدير الحزم المبدئيّ للعديد من أنظمة التشغيل بسهولة. أنواع البيانات التي تدعمها PostgreSQL bigint: عدد صحيح من 8-بايت ذو إشارة bigserial: عدد صحيح من 8-بايت يزداد تلقائيًّا [(bit [(n: سلسلة ثنائيّة ذات طول محدّد [(bit varying [(n: سلسلة ثنائيّة متغيرة الأطوال boolean: متغيّر منطقي (صواب/خطأ) box: صندوق مستطيل في سطح مستوٍ bytea: بيانات ثنائيّة ("مصفوفة بايت") [(character varying [(n: سلسلة محارف (character string) ذات طول متغير [(character [(n: سلسلة محارف ذات طول ثابت cidr: عنوان شبكة IPv4 أو IPv6 circle: دائرة في سطح مستوٍ date: تاريخ في تقويم (السنة، الشهر، اليوم) double precision: عدد فاصلة عائمة ذو دقّة مزدوجة (8 بايت) inet: عنوان مضيف IPv4 أو IPv6 integer: عدد صحيح من 4 بايت ذو إشارة [(interval [fields] [(p: مدة زمنية line: خط لا نهائيّ في مستوى lseg: جزء من خطّ مستقيم في مستوى macaddr: عنوان تحكم بالوصول إلى الوسيط (Media Access Control – MAC) money: مقدار من المال [(numeric [(p, s: دقّة رقميّة محدّدة أو يمكن اختيارها path: مسار هندسيّ على سطح point: نقطة هندسيّة على سطح polygon: شكل هندسيّ مغلق على سطح real: عدد فاصلة عائمة ذي دقّة أحاديّة (4 بايت) smallint: عدد صحيح من 2-بايت ذو إشارة serial: عدد صحيح من 4 بايت يزداد تلقائيًّا text: سلسلة محارف ذات طول متغيّر [time [(p)] [without time zone: وقت في اليوم (دون منطقة زمنية) time [(p)] with time zone: الوقت من اليوم (مع منطقة زمنية) [timestamp [(p)] [without time zone: تاريخ ووقت (دون منطقة زمنية) timestamp [(p)] with time zone: تاريخ ووقت يشمل المنطقة الزمنيّة tsquery: استعلام بحث نصّيّ tsvector: مستند بحث نصيّ txid_snapshot: لَقطَة (transaction) لهويّة التبادل على مستوى المستخدم uuid: معرّف فريد عالميًّا xml: بيانات XML مزايا PostgreSQL نظام إدارة قواعد بيانات مفتوح المصدر موافق لمعايير SQL: PostgreSQL مفتوح المصدر ومجانيّ، ولكنه نظام إدارة قواعد بيانات علاقيّة قويّ جدًّا. مجتمع قويّ: PostgreSQL مدعوم من مجتمع خبيرٍ ومخلص يمكن الوصول إليه عبر مواقع الأسئلة والإجابات والقاعدة المعرفيّة طوال الوقت ومجانًا. دعم قويّ من الأطراف الأخرى: بغض النظر عن المزايا المتقدّمة جدًّا، تُزيّن PostgreSQL العديدُ من الأدوات الجيّدة ومفتوحة المصدر من أطراف أخرى لتصميم وإدارة واستخدام نظام الإدارة هذا. إمكانية التوسعة: يمكن توسعة PostgreSQL برمجيًّا باستخدام إجراءات مخزّنة، كما يفترض أن يكون الوضع في نظام إدارة قواعد بيانات علاقيّة متقدّم. كيانيّ: ليس PostgreSQL مجرّد نظام إدارة قواعد بيانات علاقيّة، ولكنه كيانيّ (objective) أيضًا – ويدعم التضمين (nesting)، ومزايا أخرى. عيوب PostgreSQL الأداء: للعمليات البسيطة كثيفة القراءة، يمكن أن تكون PostgreSQL مبالغًا فيها، ويمكن أن تبدو أقلّ أداءً من منافساتها، مثل MySQL. الشعبيّة: نظرًا لطبيعة هذه الأداة، فإنها تقبع في الخلف فيما يتعلق بشعبيتها، رغم كثرة من استخدامها – مما قد يؤثر على سهولة الحصول على دعم. الاستضافة: نتيجة للعوامل المذكورة أعلاه، يصعب إيجاد مستضيفين أو مقدمي خدمة يعرضون خدمات PostgreSQL مُدارة. متى تستخدم PostgreSQL صحّة البيانات: عندما تكون صحّة البيانات وإمكانية التعويل عليها ضرورة حتميّة، ولا يكون هناك عذر إذا حدث خطب ما، فستكون PostgreSQL الخيار الأفضل. الإجراءات المخصّصة المعقّدة: إذا كنت تتطلّب من قاعدة بياناتك أداء إجراءات مخصّصة، فـPostgreSQL هي الخيار الأفضل، كونه يمكن توسعتها. التكامل: إذا كان يُحتمل في المستقبل أن تكون هناك حاجة لنقل نظام قاعدة البيانات بأكمله إلى حلّ مملوك (مثل أوراكل)، فستكون PostgreSQL الأكثر توافقًا والأسهل في التعامل معها عند الانتقال. التصاميم المعقّدة: مقارنة بتطبيقات أنظمة إدارة قواعد البيانات العلاقيّة المجانية ومفتوحة المصدر الأخرى، تقدّم PostgreSQL لتصاميم قواعد البيانات المعقّدة أكبر قدر من الوظائف والإمكانات دون التفريط بالأمور الأخرى. متى لا تستخدم PostgreSQL السرعة: إذا كان كلّ ما تطلبه عمليات قراءة سريعة، فليست PostgreSQL الأداة التي عليك استخدامها. سهولة الإعداد: إذا لم تكن تحتاج لصحّة مطلقة للبيانات، أو للتوافق مع ACID أو التصاميم المعقّدة، فقد تكون PostgreSQL مبالغًا فيها للإعدادات البسيطة. التكرار: إذا لم تكن مستعدًّا لقضاء الوقت، وبذل الجهد والموارد، فالحصول على التكرار (أو تعدّد النُسَخ) في MySQL قد يكون أسهل لمن ليست لديهم خبرة في إدارة الأنظمة وقواعد البيانات. ترجمة -وبتصرّف- للمقال: SQLite vs MySQL vs PostgreSQL: A Comparison Of Relational Database Management Systems لصاحبه O.S. Tezer.
    1 نقطة
  6. يتناول هذا المقال، الأول من سلسلة دروس عن لغة الاستعلام البنائية Structured Query language التي تعرف بالاختصار المشهور SQL، مفهوم قواعد البيانات، وماذا نقصد بأنظمة إدارة قواعد البيانات، وما هو الجدول، وما هي خصائص قواعد البيانات العلاقية. ما هي قاعدة البيانات؟ بطريقة بسيطة مجرّدة من مفاهيم التقنية، قاعدة البيانات هي مكان لحفظ بيانات معينة على نحو مستمر بهدف الرجوع إليها وقت الحاجة، فدفتر أرقام الهواتف الذي كنا نستعمله في الماضي يُعدّ قاعدة بيانات؛ والكم الهائل من الفواتير المحاسبية الورقية المحفوظة في خزانات الأقسام المالية في الشركات قديماً، أيضاً هو قاعدة بيانات. وقِس على ذلك العديد من الأمثلة الواقعية والملموسة. نستنبطُ من هذا التعريف البسيط وجود خاصية هامة لقاعدة البيانات، ألا وهي “الاستمرارية” أو “الدوام” في حفظ البيانات. في الجانب التقني والبرمجي، فإن قاعدة البيانات Database هي عبارة عن مستودع تُحفظ البيانات فيه داخل جهاز الحاسوب أو الخادوم، ويتمتع هذا المستودع بخاصية الاستمرارية في حفظ البيانات. ونعني بخاصية الاستمرارية هنا أنه في حال إطفاء جهاز الحاسوب أو إعادة تشغيله أو انقطاع التواصل معه، فإن قاعدة البيانات وما تحتويه من بيانات تبقى موجودة ومحفوظة دون أي خلل. أنظمة إدارة قواعد البيانات العلاقية تُسمى البرمجيات التي تنشئ وتدير قواعد البيانات بأنظمة إدارة قواعد البيانات (Databases Management Systems) وتكتب بالاختصار DBMS. ما هي أنواع أنظمة إدارة قواعد البيانات؟ تختلف وتتعدد تسميات أنواع أنظمة إدارة البيانات، وهذا الاختلاف نابع بالدرجة الأولى من تقدم الزمن وما صاحبه من تقدم في العلوم والتقنيات، ومن ثم بالدرجة الثانية، ينبع الاختلاف من التقنيات والخصائص المتعددة لهذه الأنظمة وما تقدمه من خدمات. تنقسم أنواع أنظمة قواعد البيانات إلى ثلاثة أنواع رئيسية. نظام قاعدة البيانات الملف والواحد Flat File Database: يعدّ هذا النوع من الأنظمة قديما ومن النادر أن تجد أحدا يعمل عليه إلى الآن، وهو ببساطة قاعدة بيانات من ملف واحد كبير يحتوي على كل البيانات، وهو يشبه جدول واحد به كل البيانات. نظام إدارة قاعدة البيانات غير العلاقية Non-Relational DBMS :ظهر هذا النوع من أنظمة قواعد البيانات في ظل عصر تضخم البيانات وزيادة حجمها، وخاصة مع انتشار ما يسمى بالمواقع الاجتماعية وتطبيقات الجوال وصفحات الوب الحديثة، فهذا النوع من الأنظمة يسمح بحفظ بيانات غير مرتبة وفق بنية معينة Unstructured Data، وليس من الشرط أن تترابط هذه البيانات Not relational، كما يطلق عليها No-SQL Databases. نظام إدارة قاعدة البيانات العلاقية Relational DBMS: وهو النوع الأشهر والأكثر استخداما منذ بداية ظهوره والذي سنعتمده في هذه السلسلة لشرح SQL، حيث تُجمَّع في هذا النوع من الأنظمة البيانات التي لها علاقة ببعضها البعض في مكان واحد يسمى الجدول، مع وجود الإمكانية لربط الجداول مع بعضها البعض بعلاقات ترابط. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن ما هو الجدول؟ يُعدّ الجدول العنصر الأساسي في قواعد البيانات العلاقية، وعليه تعتمد أغلب مكونات قاعدة البيانات من مشاهد Views ودوال Functions وحِزم Packages وغيرها من العناصر الأخرى. يتكون الجدول من أعمدة Columns وصفوف Rows، حيث تمثل الأعمدة ما يسمى بالخصائص Features، والصفوف عبارة عن القيم التي تأخذها الأعمدة وتسمى بالسجلات Records. يوضح الشكل التالي مثالا لجدول يحتوي على بيانات تواريخ ميلاد وأسماء طلاب في مدرسة، وفي المثال نوضح مكونات الجدول في قاعدة البيانات. خصائص قواعد البيانات العلاقية ومميزاتها ظلت قواعد البيانات العلاقية مسيطرة منذ بدايات ظهور النموذج الأساسي لها عام 1970 على يد عالم الحاسوب Frank Codd أثناء عمله لصالح شركة IBM، ولم تكن هذه الأفضلية التي يتمتع بها نظام قواعد البيانات العلاقية تأتي من فراغ، بل من الخصائص التي تتمتع بها. البساطة تُرتَّب البيانات في أنظمة قواعد البيانات العلاقية وتُحفَظ بطريقة بعيدة عن التعقيد، حيث يعدّ الجدول الذي تُحفظ فيه البيانات مفهوما لأغلب المستخدمين وخاصة الذين مارسوا أعمالا في مجال البيانات المجدولة أو مراجعة السجلات. سهولة الاستعلام عن البيانات بعد عمليات الإضافة على قاعدة البيانات، وعند الحاجة للرجوع لها، فإن نظام قواعد البيانات العلائقية يوفر آلية سهلة للاستعلام عن هذه البيانات واستردادها، وذلك عن طريق لغة SQL، بالإضافة إلى وجود الإمكانية للمستخدم أن يستعلم عن البيانات من أكثر من جدول في نفس الوقت باستخدام جمل الربط Joins. كما أن خاصية ترشيح Filtering البيانات وتحديد شروط خاصة لظهور سجلات معينة هو أمر متاح بكل سهولة. سلامة البيانات تعدّ هذه الخاصية أساسية في أي نظام قواعد بيانات بغض النظر عن نوعه. ونعني بهذه الخاصية أن تتوفر جميع القدرات والإمكانات في نظام قواعد البيانات لضمان دقة وصحة المعلومات الموجودة فيه. ويندرج تحت هذه الخاصية ما يسمى بقيود التكامل Integrity constraints والتي هي عبارة عن مجموعة من القيود التي يجب الالتزام بها عند التعامل مع البيانات في الجدول، وسنتكلم عنها في مقال متقدم. المرونة تتمتع قواعد البيانات العلاقية بطبيعتها بالمرونة والقابلية للتطوير، مما يجعلها قابلة للتكيف مع طلبات التغيير والزيادة في كم البيانات. وهذا يعني مثلا أنك تستطيع التغيير على هيكلية جدول معين دون التأثير على البيانات الموجودة فيه أو على قاعدة البيانات ككل، كما أنك – مثلا - لن تحتاج إلى وقف قاعدة البيانات وإعادة تشغيلها مرة أخرى لتنفيذ بعض لتغييرات عليها. ما هي البرمجيات التي تقدم قواعد البيانات العلاقية؟ تَتَعدد الشركات والبرمجيات التي تُقدم أنظمة إدارة قواعد البيانات، وكل منها له سوقه ومجاله الذي يشتهر به. نُقدم لكم في الفقرات القادمة بعضًا من أشهر أنظمة إدارة قواعد البيانات العلاقية. قواعد بيانات MySQL أحد أشهر أنظمة قواعد البيانات العلاقية مفتوحة المصدر. تستطيع إنشاء العديد من قواعد البيانات بداخلها، وتستطيع الوصول لها عبر الوِب. تَعمل MySQL على هيئة خِدمة Service تُتيح لأكثر من مستخدم الوصول إلى أكثر من قاعدة بيانات، وتشتهر بين معشر مبرمجي تطبيقات الوِب لارتباطها الشائع مع لغة البرمجة PHP، ويمكن تنصيبها على أكثر من نظام تشغيل مثل وندوز أو لينكس أو ماك. تعدّ MySQL الخيار المفضل للشركات الناشئة أو المتوسطة وذلك لسهولة التعامل معها وانخفاض تكاليف تشغيلها مقارنة بخيارات أخرى. قواعد بيانات أوراكل Oracle تعدّ شركة أوراكل عملاق الشركات البرمجية التي تقدم أنظمة إدارة قواعد البيانات العلاقية، وتأتي قاعدة البيانات أوراكل بأكثر من إصدار (حسب البيئة والغرض) تبدأ من الإصدار الشخصي والخفيف، وتنتهي بالإصدار المتقدم Enterprise. تتميز قواعد بيانات أوراكل بكم كبير من الإمكانات التي تسهل عليك حل العديد من المشاكل والعقبات في التطبيقات التي تديرها وتنشئها، مع وجود دعم فني قوي عبر مجتمع أوراكل، لذلك فهي تعتبر الخيار الإستراتيجي (البعيد المدى) للعديد من الشركات الكبيرة والجامعات والحكومات. قواعد بيانات مايكروسوفت Microsoft SQL Server من قواعد البيانات الشهيرة، والذي تأتي أيضا بأكثر من إصدار، لتلبي احتياجات المستخدمين المختلفة وبيئات عملهم، ولكي تتعامل مع البيانات في هذا النوع تحتاج لاستخدام النسخة الخاصة من SQL والمسماة T-SQL اختصارا ل Transact SQL والتي هي عبارة عن نسخة SQL مضاف عليه ادوال خاصة وتعديلات على طريقة حذف وتعديل السجلات. قواعد بيانات PostgreSQL قواعد بينات PostgreSQL من قواعد البيانات العلاقية المفضلة لدى بعض مطوري تطبيقات الوِب وتطبيقات سطح المكتب، وهو نظام إدارة قواعد بيانات مفتوح المصدر. توجد الكثير من الشركات الكبيرة والعاملة في مجال نطاقات إنترنت تعتمد على هذا النوع من قواعد البيانات.
    1 نقطة
  7. الإصدار 1.0.0

    13393 تنزيل

    مع الغياب شبه التام لأي مصادر مفيدة باللغة العربية عن مجالات الخصوصية والحماية والأمان الرقمي وتأمين الأجهزة الشخصية، جاء هذا الكتاب ليكون شارحًا لمفاهيم الحماية والأمان التي يحتاج إليها كل من يعيش في هذا العصر الرقمي ويستعمل مختلف الأجهزة الرقمية في شتى مجالات الحياة وذلك لتأمين نفسه وحماية بياناته التي يضعها في تلك الأجهزة. إنّ الأمان الرقمي موضوعٌ مهم للحديث عنه وليس شيئًا رفاهيًا أو تكميليًا، خصوصًا مع اطّراد عدد المستخدمين الجدد مع عدد انتهاكات واختراقات الأمان والخصوصية التي تحصل كلّ يوم. إنّ هذا الكتاب موجّهٌ بالدرجة الأولى إلى عموم من يستخدم الحواسيب والأجهزة الذكية ويهدف إلى توعيتهم بأهم المسائل المتعلقة بالأمان الرقمي، ولا يخلو من مواضيع ومعلومات مفيدة ومتقدمة حتّى للخبراء والمتخصصين في المجال، إذ أنّ هذا الكتاب ما هو إلّا محاولة لتحصين المستخدمين ولفت انتباههم إلى مجال الأمان الرقمي وطرق حماية أنفسهم في العالم الرقمي، ولا يعد الكتاب مرجعًا شاملًا لكلّ شيء في المجال. يبدأ الكتاب بعرض المفاهيم الأساسية التي يجب أن يمتلكها أيّ قارئ للكتاب، وهي مفاهيمٌ تعتمد عليها الكثير من الفصول الأخرى في الكتاب فلا غنى عنها بحالٍ من الأحوال، ثم ينتقل الكتاب إلى الحديث عن الوعي وأهميته، وقد قدّمنا موضوع الوعي على غيره لأنّه مبدأٌ عام يُمكن تطبيقه في مختلف مجالات الحماية الرقمية وليس شرحًا لطريقة تثبيت برنامج أو إضافة مثلًا، كما أنّه أهم طريقة لحماية المُستخدم نفسَه. ويأتي بعد هذين الفصلين مختلف الفصول التي تشرح اختيار خدماتٍ معينة أو طريقة تأمين أجهزة وأنظمة معينة. يجد القارئ في كلّ فصلٍ من هذه الفصول شرحًا للمفهوم المُراد تأمينه قبل الشروع بطريقة حمايته وتأمينه ولذلك يمكنك قراءة هذه المفاهيم بالترتيب الذي تريد بحسب حاجتك إن أردت ذلك رغم أنه ينصح بقراءتها وفق ترتيبها المتسلسل. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي Creative Commons «نسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0». يمكنك قراءة فصول الكتاب على شكل مقالات من هذه الصفحة، «الأمان الرقمي»، أو مباشرة مما يلي: الفصل الأول: لماذا يجب أن نحافظ على أماننا الرقمي؟ الفصل الثاني: مفاهيم تأسيسية عن الأمان الرقمي الفصل الثالث: الوعي في العالم الرقمي الفصل الرابع: اختيار العتاد والبرامج في العالم الرقمي الفصل الخامس: اختيار الخدمات والمزودات في العالم الرقمي الفصل السادس: تأمين الأشياء الأساسية المحيطة بك في العالم الرقمي الفصل السابع: النسخ الاحتياطي وحفظ البيانات في العالم الرقمي الفصل الثامن: التشفير واستعمالاته في العالم الرقمي الفصل التاسع: كلمات المرور: كيفية حفظها واستعمالها في العالم الرقمي الفصل العاشر: تأمين متصفحات الويب في العالم الرقمي الفصل الحادي عشر: الحماية من مواقع الإنترنت في العالم الرقمي الفصل الثاني عشر: ما يلزم معرفته عند الشراء والدفع عبر الإنترنت الفصل الثالث عشر: تأمين الهاتف المحمول في العالم الرقمي الفصل الرابع عشر: كيف تعرف أنك اخترقت في العالم الرقمي وماذا تفعل حيال ذلك؟ الفصل الخامس عشر: مواضيع متقدمة في الأمان الرقمي
    1 نقطة
  8. لدي استفسار حول معالج الاخطاء Attribute في PDO حيث ان له ثلاثة انماط على حسب علمي هي : PDO::ERRMODE_EXCEPTION PDO::ERRMODE_SILENT PDO::ERRMODE_WARNING سؤالي ماهو دور كل واحدة فيهم وايهم هو النمط الافتراضي للامر setAttribute();
    1 نقطة
  9. لماذا زر الـ <button> لا يظهر بعد تمرير الصفحة إلى الأسفل 600px ؟ أعرف أنه علي وضع الشروط داخل هذا كود : window.onscroll = function () {} لكن لماذا تلك الشروط لن تعمل إن لم أضعها فيه ؟
    1 نقطة
  10. أنا عندي مشكله في رفع الصور و هي عند رفع الصور من قائمة admin يتم التحميل بصوره طبيعيه انما عند رفع الصور من ال form لا يتم رفع اي صوره و يتم استخدام الصوره الافتراضيه و هذه صور تبين كل الكود اول صوره هي ال app ثاني صوره هي ال form ثالث صوره هي الداله التي تقوم بعمل بوست رابع صوره هي صفحة ال html
    1 نقطة
  11. أكواد JQuery لا تعمل لدى حيث لا يظهر الصور ولا يوجد حركة رغم إدراج كلاس الاكتيف MyPage.zip
    1 نقطة
  12. أرجو نشر الأسئلة التي ضمن الدورات في قسم التعليقات أسفل الدرس، فقط الأسئلة التي تكون خارج محتوى الدرس نطرحها في الأسئلة العامة.
    1 نقطة
  13. أجل يجب أن تتعلم الأساسيات قبل الخوض في الجافاسكريبت, وتلك الأساسيات هي الHTML, CSS حتى تقوم بفهم الأساسيات يجب أن تقضي فيها وقتاً وترى بعض الأمثلة حتى تتأكد تماماً من فهمك لها وتقوم بالتطبيق على تلك الأساسيات بنفسك حتى تترسخ تلك المفاهيم في عقلك
    1 نقطة
  14. يمكنك إنشاء cache_page الخاص بك كالتالي from django.core.cache import cache def simple_cache_page(cache_timeout): """ Decorator للعرض الذي يحاول الحصول على الصفحة من ذاكرة التخزين المؤقت و يملأ ذاكرة التخزين المؤقت إذا لم تكن الصفحة في ذاكرة التخزين المؤقت بعد. يتم تمييز ذاكرة التخزين المؤقت بواسطة اسم العرض والوسيطات. """ def _dec(func): def _new_func(*args, **kwargs): key = func.__name__ if kwargs: key += ':' + ':'.join([kwargs[key] for key in kwargs]) response = cache.get(key) if not response: response = func(*args, **kwargs) cache.set(key, response, cache_timeout) return response return _new_func return _dec لذاكرة التخزين المؤقت للصفحة منتهية الصلاحية ، يمكنك استخدام cache.set('map_view:' + self.slug, None, 0) حيث self.slug عبارة عن معامل من urls.py url(r'^map/(?P<slug>.+)$', simple_cache_page(60 * 60 * 24)(map_view), name='map'),
    1 نقطة
  15. في النسخ الحديثة من جانغو "2.0 وما فوق" تنفيذ هكاذا أمر أصبح أسهل: from django.utils.cache import learn_cache_key from django.core.cache import cache from django.views.decorators.cache import cache_page keys = set() @cache_page( 60 * 15, "blog" ); def blog( request ): response = render(request, 'template') keys.add(learn_cache_key(request, response) return response def invalidate_cache() cache.delete_many(keys) حيث يمكنك تسجيل Invate_cache كـ callback عندما يقوم شخص ما بتحديث منشور في المدونة عبر إشارة pre_save.
    1 نقطة
  16. يمكنك أن بإنشاء دالة invalidate_cache ويتم إستخدامها عندما يقوم شخص ما بتحديث منشور في المدونة، وتقوم هذه الدالة بإنشاء المفتاح المستخدم في ذاكرة التخزين المؤقت وإستخدام هذا المفتاح في حذف الذاكرة المؤقتة. from django.core.cache import cache from django.http import HttpRequest from django.utils.cache import get_cache_key def invalidate_cache(path=''): request = HttpRequest() request.META = {'SERVER_NAME':'localhost','SERVER_PORT':8000} request.LANGUAGE_CODE = 'en-us' request.path = path try: cache_key = get_cache_key(request) if cache_key : if cache.has_key(cache_key): cache.delete(cache_key) return (True, 'تم حذف الذاكرة بنجاح') else: return (False, 'المفتاح المستخدم غير موجود في ذاكرة التخزين المؤقت') else: raise ValueError('فشل في إنشاء مفتاح ذاكرة التخزين المؤقت') except (ValueError, Exception) as error: return (False, error) ويمكنك إستخدام هذه الدالة على النحو التالي في المكان الذي ترغب به: status, message = invalidate_cache(path='/path/to/blog/route/')
    1 نقطة
  17. كما ذكر سامح يمكنك استخدام CurrentUserDefault. إذا كنت لا تريد عمل override لدالة save فيمكنك استخدام الكود كالتالي from rest_framework import serializers class PostSerializer(serializers.ModelSerializer): user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault()) class Meta: model = Post
    1 نقطة
  18. لا يمكنك الوصول إلى مستخدم الطلب مباشرة. تحتاج إلى الوصول إلى كائن الطلب ، ثم إحضار سمة المستخدم. user = self.context['request'].user والطريقة الأكثر أمانًا (لا يظهر خطأ KeyError أو خطأ AttributeError) كالتالي: user = None request = self.context.get("request") if request and hasattr(request, "user"): user = request.user كما يوفر Django-Rest-Framework طريقة أسهل للوصول إلى المستخدم الحالي من خلال إستخدام التابع CurrentUserDefault كالتالي: from rest_framework.fields import CurrentUserDefault class PostSerializer(serializers.ModelSerializer): class Meta: model = Post def save(self): user = CurrentUserDefault() # الحصول على المستخدم الحالي
    1 نقطة
  19. كما قال سامح لأن المفتاح الفعلي ليس "posts" ، بل هو مفتاح تم إنشاؤه ديناميكيا بواسطة Django باستخدام ما يلي: args = md5_constructor(u':'.join([urlquote(resolve_variable(var, context)) for var in self.vary_on])) cache_key = 'template.cache.%s.%s' % (self.fragment_name, args.hexdigest()) سيكون المفتاح بالتنسيق: template.cache.posts.[hexdigest]. لذا فإن الجزء الصعب هو معرفة الجزء hexdigest, يمكنك استخدام الكود التالي كحل آخر from django.core.cache import cache from django.utils.hashcompat import md5_constructor from django.utils.http import urlquote def invalidate_template_cache(fragment_name, *variables): args = md5_constructor(u':'.join([urlquote(var) for var in variables])) cache_key = 'template.cache.%s.%s' % (fragment_name, args.hexdigest()) cache.delete(cache_key) من خلال الكود السابق يمكننا معرفة المفتاح بشكل فعلي ويمكننا ابطال ذاكرة التخزين المؤقت التي حددتها, نظرا لأنك لا تقوم بتمرير أي متغيرات ، يمكنك استدعاء ذلك فقط بـ Invalidate_template_cache ("posts") بخلاف ذلك ، ستحتاج إلى تمرير قائمة بجميع المتغيرات كالتالي invalidate_template_cache("posts", *variables)
    1 نقطة
  20. هذا لأن المفتاح الفعلي للبيانات المؤقتة ليس "posts"، بل هو مفتاح يتم إنشاؤه ديناميكيًا بواسطة جانغو Django باستخدام كلمة posts مع خوارزمية md5، لذلك يوفر جانغو Django التابع make_template_fragment_key لكي تقوم بحذف البيانات المؤقتة. يقبل التابع make_template_fragment_key مدخلين، الأول هو اسم fragment_name هو المفتاح المعطى كاسم لهذه البيانات، وفي هذه الحالة يكون posts، بينما المعامل الثاني هو vary_on وهو قائمة بكل المعطيات التي يتم تمريرها إلى الوسم tag، ولحذف البيانات المؤقتة تقوم بعمل التالي: from django.core.cache import cache from django.core.cache.utils import make_template_fragment_key # cache key for {% cache 5000 posts %} key = make_template_fragment_key('posts') cache.delete(key) وإن كان لديك معطيات للوسم، فيمكنك تمريرها على النحو التالي: # cache key for {% cache 5000 posts data %} key = make_template_fragment_key('posts', [data])
    1 نقطة
  21. هناك طريقتان للقيام بذلك. الأول هو استخدام التحقق من صحة النموذج لعدم السماح لأي مستخدم بإدخال أي رقم يزيد عن 50, إذا لم يكن هناك مستخدم مشارك في العملية ، أو إذا كنت لا تستخدم نموذجا لإدخال البيانات ، فسيتعين عليك عمل override لدالة model's save لطرح استثناء أو تقييد البيانات التي تدخل الحقل.يمكنك أيضا تجربة الحل التالي SCORE_CHOICES = zip( range(1,n), range(1,n) ) score = models.IntegerField(choices=SCORE_CHOICES, blank=True)
    1 نقطة
  22. إليك حل ممتاز في حال كنت تريد بعض المرونة الإضافية ولا تريد تغيير مجال النموذج الخاص بك. عن طريق validator مخصص: from django.core.exceptions import ValidationError class validate_range_or_null(object): compare = lambda self, a, b, c: a > c or a < b clean = lambda self, x: x message = ('Ensure this value is between %(limit_min)s and %(limit_max)s (it is %(show_value)s).') code = 'limit_value' def __init__(self, limit_min, limit_max): self.limit_min = limit_min self.limit_max = limit_max def __call__(self, value): cleaned = self.clean(value) params = {'limit_min': self.limit_min, 'limit_max': self.limit_max, 'show_value': cleaned} if value: # اجعله اختياريًا ، أو قم بإزالته لجعله مطلوبًا، أو اجعله مطلوبًا في النموذج if self.compare(cleaned, self.limit_min, self.limit_max): raise ValidationError(self.message, code=self.code, params=params) حيث أن المعلمتان هما max و min ، وتسمح بقيم nulls. كما يمكنك تخصيص validator إذا كنت ترغب في ذلك عن طريق التخلص من عبارة if أو تغيير الحقل ليصبح blank = False، null = False في النموذج. سيتطلب ذلك بالطبع عملية migration. ويمكن استخدامه على هذا النحو: class YourModel(models.Model): .... no_dependents = models.PositiveSmallIntegerField("How many dependants?", blank=True, null=True, default=0, validators=[validate_range_or_null(1,100)])
    1 نقطة
  23. يوفر جانغو المعامل validators في الحقل IntegerField حيث يقبل هذا المعامل قائمة من المتحققات (دوال مبنية في جانغو Django يمكنها التحقق من قيمة الحقل قبل تخزينها)، وبالتالي يمكنك إضافة شروط على كل حقل مثل تحديد أقصى قيمة يمكن تخزينها وأدنى قيمة أيضًا، ويمكنك عمل ذلك على النحو التالي: from django.db.models import IntegerField, Model from django.core.validators import MaxValueValidator, MinValueValidator class UserModel(Model): age = IntegerField( default=18, validators=[ MaxValueValidator(100), MinValueValidator(18) ] ) بعد عمل التعديل السابق على الحقل، يجب أن يتم إستدعاء التابع full_clean من النموذج حتى يتمكن جانغو Django من التعرف على هذه التغيرات، مع العلم أن هذا الإستدعاء غير ضروري للنماذج من نوع ModelForm. يوجد أيضًا طريقة أخرى وهي عمل حقل مخصص وتقوم بعد ذلك بكتابة أكواد التحقق validating بنفسك، كما في المثال التالي: from django.db import models class IntegerRangedField(models.IntegerField): def __init__(self, verbose_name=None, name=None, min_value=None, max_value=None, **kwargs): self.min, self.max = min_value, max_value models.IntegerField.__init__(self, verbose_name, name, **kwargs) def formfield(self, **kwargs): defaults = {'min': self.min, 'max':self.max} defaults.update(kwargs) return super(IntegerRangeField, self).formfield(**defaults) لاحظ أن الحقل IntegerRangedField الذي قمنا بعمله يقوم بالوراثة من الحقل IntegerField، بعد ذلك يمكنك أن تستخدم هذا الحقل المخصص على النحو التالي: from django.db.models import Model class UserModel(Model): age = IntegerRangedField(min_value=18, max_value=100) بالطبع يجب أن تقوم بإستدعاء الصنف IntegerRangedField من المكان الذي أنشأته فيه.
    1 نقطة
  24. أنهينا إلى هنا كلّ المواضيع الأساسية المتعلّقة بحماية المستخدم وأجهزته وخدماته التي يستعملها، كما شرحنا أساسيات الأمان الرقمي والوعي فيه بالإضافة لمواضيع شتّى. وسنتطرق في هذا الفصل الأخير إلى مجموعةٍ من المواضيع المتقدمة المتعلّقة بالمجال. لا ترتبط هذه المواضيع ببعضها البعض بصورة كاملة لكن من المفيد جدًا أن يطّلع عليها المستخدم ويتعلّمها لزيادة أمانه الرقمي والتعمّق فيه أكثر. الهندسة الاجتماعية الهندسة الاجتماعية (Social Engineering) هي تصنيف لمجموعة من الممارسات التي يمارسها المخترقون على الضحايا بهدف جعلهم يُضعفون حمايتهم جزئيًا أو كلّيًا طواعيةً بدلًا من الاعتماد بالكامل على اختراق الأنظمة الإلكترونية. قد تشتمل الهندسة الاجتماعية على عمليات اختراق للأنظمة والأجهزة كالمعتاد لكن يجب أن يكون ضمن العملية عامل بشري اجتماعي وإلّا لا يُعتبر ضمن الهندسة الاجتماعية. رسائل التصيّد الاحتيالي (Phishing) ورسائل البريد والصفحات الإلكترونية المزوّرة كلّها أمثلة على أساليب الهندسة الاجتماعية. فهذه الأساليب مثلًا لا تعتمد على أن يقوم المُختَرِق باختراق جهاز الضحية وسحب البيانات منها بنفسه بسبب ثغرة في البرمجيات مثلًا، بل تعتمد على عوامل نفسية واجتماعية للضحية ليقوم هو بتسليم بياناته الحسّاسة (اسم المستخدم وكلمات المرور مثلًا) للمُختَرق دون أن يعلم بذلك (أو حتّى مع علمه في بعضه الأحيان). تشمل الأمثلة التي يتّبعها المُختَرقِون: إرسال صفحة فيس بوك مزوّرة إلى المستخدمين المُراد اختراقهم، وتُسرق حساباتهم عند إدخالهم اسم المستخدم وكلمة المرور. إرسال رسائل بريدية أو SMS إلى الضحية المطلوب اختراقها من نوعية: "لقد ربحت مبلغ كذا، أرسل لنا حوالة بنكية صغيرة لنعالج طلب تحويل أموالك" أو "والدك أصيب في حادث سيّارة ويحتاج مبلغًا ماليًا كبيرًا لمتابعة العلاج، أرسل لنا على هذا الحساب البنكي" وما شابه ذلك من اللعب على العواطف. اختراق حسابٍ واحد فقط لأحد الموظّفين في أحد المؤسسات التي يريدون اختراقها، ثمّ يستعملون حساباته الإلكترونية لإرسال مستندات ووثائق تحتوي برمجياتٍ خبيثة إلى الموظّفين العاملين مع ذاك الموظّف وهؤلاء بدورهم لن يشكّوا بشيء وسيفتحون الملفّات الخبيثة مباشرةً ويعتبرونها آمنة 100% لأنّها قادمة من صديقهم. ويمكنهم فعل أكثر من ذلك من طلب البيانات الحساسة أو كلمات المرور وسيسلّمونها مباشرةً لأنّ هذا الطلب - يظنّون - قادم من صديقهم أو رئيسهم في العمل، وهكذا تنتشر البرمجيات الخبيثة في كامل المؤسسة وتُسرق جميع البيانات. طلبات المساعدة الاجتماعية، مثل "امرأة أرملة ولها طفلان وبحاجة لمساعدة" وما شابه ذلك. قد تتضمن الهجمات الرقمية مزيجًا من الهجمات على الأنظمة بالإضافة إلى بعض عوامل الهندسة الاجتماعية؛ فيُمكن مثلًا الاعتماد على أحد الثغرات الموجودة في أحد مواقع الويب بالإضافة إلى قيام الضحية بتفعيل إجراء معيّن من طرفه لكي تنجح عملية الاختراق ككل. من أشهر الأمثلة الحديثة على الهندسة الاجتماعية ما حصل في شركة تويتر مؤخّرًا (شهر يوليو من سنة 2020م) [1]، حيث نجح مراهق أمريكي في الـ17 من عمره بشنّ هجوم هندسة اجتماعية على موظّفي الدعم الفنّي في تويتر ليتمكّن من استخدام بيانات بعضهم للوصول إلى 45 حساب لأشخاص مهمّين حول العالم مثل بيل غيتس ودونالد ترامب وإيلون ماسك وغيرهم، ثمّ نشر عليها تغريداتٍ مزيّفة تدّعي أنّه سيُرسل عملات رقمية (بتكوين) لكلّ من يرسل له مبلغًا بسيطًا على عنوانٍ معيّن. أُلقي القبض على المُراهق وتبيّن أنّه قد جمع أكثر من 100 ألف دولار أمريكي بهذه الطريقة. المشكلة مع الهندسة الاجتماعية هي أنّها ليست شيئًا يُمكن تأمينه أو الحماية ضدّه؛ فهي في الواقع منبثقة عن مفاهيم الوعي التي شرحناها في أوّل فصلٍ من هذه السلسلة لكنّها قد تستعمل أساليب متقدمة جدًا لخداع المستخدمين، كما قد تُوظَّف لجلب بيانات هامشية غير مهمّة عن الأنظمة في نظر الناس لكنّها مفيدة جدًا للمُخترقين، حيث يمكن عبر دمجها في عمليات الاختراق الحقيقية للأنظمة أن تصبح مزيجًا مدمّرًا جدًا. كما أنّه من المستحيل الحماية ضدّها على نطاقٍ واسع؛ فالشركات التي توظّف مئات وآلاف الموظّفين حول العالم وفي مختلف الأمكنة والقطاعات لا تمتلك الموارد الكافية لتحصين كامل موظّفيها وتعليمهم حول هذه المواضيع. وبالتالي فإنّ معظم الأنظمة التي تراها حولك هي قابلة للاختراق في الواقع سواءٌ من الناحية التقنية أو من الناحية الاجتماعية، لكن ما يردع المخترقين عن محاولة فعل ذلك ليس صعوبة الاختراق بل قدرة الجهات القانونية ومراكز الاستخبارات نفسها على تتبعهم وكشفهم والقبض عليهم كذلك إن فعلوا مثل هذه الأمور، فسلاح الردع هنا ليس الحماية بل هو القدرة على الانتقام من طرف السلطات في حال حصل ذلك. والهندسة الاجتماعية علمٌ يستعمل في أكثر من مجرّد مجال الأمان الرقمي، بل قد تستعمله الدول بين بعضها البعض لاستمالة الأفراد العاملين في الجهة الأخرى إلى جانبهم وبالتالي اختراقها. وواقعنا الشرق أوسطي خيرُ مثالٍ على ذلك حيث أصبح العملاء والمُخترقون أكثر عددًا من السكّان الأصليين. يمكنك أنت - كشخص - تحصين نفسك ضد الهندسة الاجتماعية عبر اتباع نصائح الوعي الرقمي التي ذكرناها في مقدّمة هذه السلسلة، ثمّ متابعة قراءة المزيد من الكتب والموارد حولها على الشبكة. الحماية من ثغرات العتاد يمكن للعتاد كذلك أن يُصاب بالثغرات الأمنية. إنّ قطع العتاد الموجودة على جهازك - مثل المعالج واللوحة الأمّ - تعتمد على عدّة أشياء لتعمل: طرف نظام التشغيل والتعريفات موجودة فيه لقطع العتاد. طرف برامج التعريف الثابتة (Firmware) للعتاد نفسه لكنّها لا تخزّن على نظام التشغيل أو القرص الصلب، بل في ذاكرة ROM (وليس RAM) على اللوحة الأمّ. طرف العتاد الفيزيائي وطريقة تصميم الدارات الإلكترونية فيه، فهذه الدارات في النهاية تستقبل وتعالج بيانات وبالتالي يمكن لعملياتها هذه أن تكون آمنة أو لا. أشهر ثغرات العتاد في عصرنا الحالي هما ثغرتا Spectre وMeltdown؛ وهما ثغرتان في أنظمة حماية الذاكرة العشوائية (RAM) أثناء عملها مع معظم المعالجات الحديثة [2]. وقد أصيبت بها جميع معالجات Intel وAMD وARM تقريبًا وترقيعها تطلّب تحديثاتٍ أمنية على المستويات الثلاثة؛ تحديث لتعريفات نظام التشغيل وتحديث لبرامج التحديث الثابتة بالإضافة إلى تعديلات فيزيائية للمعالجات الجديدة لتجنّب هذه الثغرات. وقد كان هذا مكلفًا جدًا على الشركات وكبّدها خسائر كبيرة بالمليارات، كما سببت ترقيعات هذه الثغرات انخفاضًا بأداء الحواسيب يصل إلى 30%. وهاتان الثغرتان ليستا الوحيدتين بل هناك العشرات من ثغرات العتاد التي اكتُشفت من وقتها. ولهذا على المستخدم متابعة التطوّرات دومًا وتحديث أنظمته وأجهزته إلى آخر الإصدارات. وتأمين أجهزة المستخدم ضدّها (بعد اكتشافها وإصلاحها من طرف الشركات بالطبع) ممكن عبر تحديث نظام التشغيل أوّلًا بأوّل، ثمّ تحديث برامج التعريف الثابتة (Firmware) وفق إرشادات الاستخدام الصادرة عن الشركات المصنّعة. وفي بعض الحالات يستحيل ترقيع المعالجات القديمة لتجنّب الثغرات وبالتالي يكون من الواجب هنا استبدال كامل الجهاز أو المعالج فيه بواحدٍ أحدث. البيانات الوصفية للملفّات وخطورتها عند مشاركتك لملفٍّ ما مع أحدهم عبر الإنترنت من جهازك فإنّ الملفّ يأخذ معه شيئًا من البيانات الوصفية (Metadata) الخاصّة بك. وهذه البيانات مخفية داخل الملفّ ولا تظهر في محرر النصوص أو البرامج بل تحتاج برامج خاصّة لعرضها. ويختلف حجم وكمّ ونوعيّة هذه البيانات بناءً على نظام التشغيل والبرامج المُستعملة في إنشاء وتعديل الملفّات. من الأمثلة على البيانات الوصفية: تاريخ إنشاء الملفّ لأوّل مرّة. تاريخ آخر تعديل على الملفّ. تواريخ تعديل الملفّ على فترات مختلفة. اسم صانع الملفّ الأصلي. اسم من قام بتعديل الملفّ. وقت الحرير الإجمالي للملفّ (كم دقيقة قام الناس بالعمل عليه؟). اسم البرنامج المُستعمل في إنشاء الملفّ. إصدار البرنامج المُستعمل في إنشاء الملفّ. وغير ذلك (تختلف البيانات الوصفية بناءً على صيغة الملفّ والبرامج والأنظمة المُستعملة في العمل عليه). وكما ترى فيمكن لهذه البيانات أن تكشف الكثير عنّ أصحابها وقد تكون معلوماتٍ حسّاسة في بعض الأحيان، وبالتالي - إن كان نموذج الخطر الخاصّ بك مرتفعًا - فعليك إزالتها قبل مشاركتها مع الآخرين. بعضهم يخزّن بيانات الملفّ كاملة في البيانات الوصفية للملفّات ويترك محتوى الملفّ نفسه فارغًا تجنّبًا لإثارة الشبهات في تخزينها داخل الملفّ وهذا ممكن نظريًا يمكنك استعمال برنامج exiftool من سطر الأوامر على لينكس لاستعراض وتعديل وحذف البيانات الوصفية للملفّات. فقط اكتب اسم البرنامج متبوعًا بفراغٍ وبعده مسار الملفّ لرؤية البيانات الوصفية: يمكنك مراجعة توثيق البرنامج لرؤية طريقة استعماله لتعديل وحذف البيانات الوصفية. يعمل البرنامج كذلك على أنظمة ويندوز وماك (واجهة نصّية) وبالتالي يمكنك تحميله من موقعه الرسمي على https://exiftool.org نظام Qubes OS وفائدة استخدامه هناك توزيعات لينكس مختلفة بأنماطٍ متعددة من الحماية لكنّ أبرزها ما يُعرف بـQubes OS، وهي توزيعة لينكس مبنية بنظام الحوسبة الافتراضية (Virtualization) والحاويات (Containers) وهو ما يجعلها - نظريًا - من أأمن أنظمة التشغيل في العالم. طريقة عمل هذه التوزيعة مختلفة عن كلّ توزيعات لينكس الأخرى، فكلّ مكوّناتها من النواة ومكوّنات نظام التشغيل والبرامج الأخرى مفصولةً عن بعضها البعض في حاويات وهمية منفصلة، وبالتالي حتّى لو نجح المخترقون مثلًا في اختراق متصفّح فيرفكس الخاصّ بك فلن يتمكّنوا من الوصول إلى أيّ شيءٍ آخر مخزّن على نظامك ولا حتّى ملفّاتك الأخرى، وهذا لأنّها مفصولة عن حاوية برنامج فيرفكس، وقِس على ذلك. الحاويات (Containers) هي أشبه بمناطق معزولة في نظام التشغيل تمتلك مواردها وعملياتها الخاصّة بعيدًا عن بقية العمليات الأخرى في نظام التشغيل. مثلًا يمكنك تشغيل توزيعة لينكس (أوبونتو مثلًا) ضمن حاوية على نظام تشغيلك الحالي، وبالتالي تعتبر كأنّها نظام تشغيل وهمي يعمل بصورة منفصلة عن بقية البرامج على نفس نظامك الحالي (لا يوجد إمكانية للبرامج التي تعمل ضمن تلك الحاوية أن تصل إلى ملفّاتك ونظامك الحقيقي). يمكنك تشغيل عشرات ومئات الحاويات في نفس الوقت إن أردت حسب احتياجاتك. من المفيد أن يطّلع عليها المستخدمون الراغبون في حمايةٍ أكبر على Qubes-OS.org استخدام DNS مشفّر منفصل لقد شرحنا في السابق فائدة استخدام نظام DNS من جهة ثالثة غير نظام الـDNS القادم من مزوّد خدمة الإنترنت الخاصّة بنا في فصل "تأمين الأشياء الأساسية - تأمين الموجّه"، لكن هناك طبقة إضافية من الحماية لأنظمة DNS وهي التشفير؛ حيث يمكنك أن تشفّر الطلبات بينك وبينك نظام الـDNS نفسه كذلك. هذه الميّزة موجودة فعليًا في متصفّح فيرفكس باسم DNS-over-HTTPS من إعدادات الشبكة ويمكنك تفعيلها: لكن ما نتحدّث نحن عنه الآن هو نظام DNS مشفّر منفصل كامل تتحكّم أنت به (Dedicated Encrypted DNS)، حيث تثبّته على حاسوب Raspberry Pi صغير مثلًا أو على أحد الخواديم التي تمتلكها، ثمّ تستعمل عنوان الآي بي الخاصّ بذاك الخادوم في الموجّه (الراوتر Router) الخاصّ بك بدلًا من استعمال خدمات شركة خارجية. والعملية صعبة ومعقّدة بعض الشيء وتتطلب عتادًا منفصلًا ولهذا لم نشرحها في هذه السلسلة، لكن يمكنك معرفة المزيد عبر برنامج DNSCrypt وهو مجاني ومفتوح المصدر ويعمل على الأجهزة والخواديم المختلفة: https://www.dnscrypt.org تحليل تدفّق الشبكة تدفّق الشبكة (Network Traffic) هو البيانات التي تُحمّل وُترفع في شبكة الاتصال المرتبطة بالجهاز. فأيّ جهاز (هاتف محمول أو حاسوب) إمّا يُرسل وإمّا يحمّل البيانات من الشبكة، وبالتالي يمكن تحليل هذا التدفّق ورؤيته لمعرفة بعض المعلومات عنه (الجهة التي يذهب إليها بالإضافة إلى معلومات الترويسات "Headers" وغير ذلك). وهذا مفيدٌ جدًا ﻷنّك ستصبح قادرًا على معرفة الاتصالات التي تجريها أجهزتك ومع أيّ خواديم (Servers) وتابعة لمن، وبالتالي يمكنك معرفة ما إذا كنتَ مُخترَقًا أم لا أو إن كان هناك بعض التطبيقات التي ترفع أجزاءً يجب ألّا ترفعها من بياناتك مثلًا. لأنّه بما أنّك تراقب كامل تدفّق الشبكة فيمكنك معرفة ورؤية كلّ الاتصالات التي تجريها أجهزتك على تلك الشبكة. تحليل التدفّق عملية ممكنة على الحواسيب والأجهزة المحمولة، فقط كلّ ما عليك فعله هو تثبيت أحد برامج تحليل الشبكات (Network Analyzer) على نظام التشغيل المناسب لك ثمّ استعماله وفق التوثيق الرسمي له. لم نشرح العملية في هذه السلسلة لأنّها فوق مستوى القارئ الذي وُجّه له هذه السلسلة لكن العملية ليست أكثر من مجرّد تثبيت البرنامج ثمّ اتباع الشرح الرسمي. من أشهر برامج تحليل الشبكات على الحواسيب المحمولة برنامجٌ اسمه Wireshark، وهو مجاني ومفتوح المصدر. يمكنك تحميله من موقعه الرسمي وتثبيته على أنظمة ويندوز أو ماك أو لينكس. بعدها يمكنك مراجعة التوثيق الرسمي الخاصّ به لتعلّم استخدامه وكيفية مراقبة تدفّق الشبكة اللاسلكية/السلكية التي أنت متصلٌ بها. أمّا على الهواتف المحمولة فلا يوجد - على حدّ علمنا - برمجيات مفتوحة المصدر بنفس الجودة والكفاءة. لكن يمكنك البحث في متجر التطبيقات الخاصّ بك عن "Network analyzer" وستجد الكثير من التطبيقات التي يمكنك تجريبها ومراجعتها. بعد تثبيت البرنامج عليك تشغيله لرؤية أسماء المواقع والخدمات التي تتصل بها أجهزتك. عليك: تفحّص الجهاز في الحالة العادية وعلى مدة طويلة (أيام مثلًا)، هل يُرسل بياناتٍ بصورة مفاجئة إلى أحد مواقع الإنترنت أو عناوين آي بي لخواديم معيّنة؟ تفحّص أي تطبيق تشتبه به أنّه قد يُرسل شيئًا من بياناتك إلى عناوين ويب معيّنة. فقط افتح التطبيق المشبوه وتصفّحه لبضعة دقائق ثمّ راقب تدفّق الشبكة وما إذا كانت تظهر عناوين ويب جديدة يتم الاتصال بها. محاولة النظر في محتويات حزم البيانات (Packets) التي تُرسل في تدفّق الشبكة. هل يوجد بها أيّ بيانات حساسة لك؟ قد تُرسل التطبيقات المختلفة على نظامك البيانات إلى عناوين الآي بي (مثل 78.45.4.34) أو إلى أسماء نطاقات مسجّل (example.com). يمكنك فتح تلك العناوين في متصفّحك لرؤية ما إن كانت تعمل وراء خواديم ويب أم لا. إن كان الجواب لا فيمكنك معرفة المزيد عن تلك العناوين (مثل موقعها الجغرافي ولمن هي تابعة) عبر خدمات مثل Who.is. الخدمات اللامركزية البنية التقليدية للاتصالات في شبكة الإنترنت هي بنية Client-Server (برنامج عميل، برنامج خادوم) حيث يتصل البرنامج العميل (المتصفّح غالبًا) بالخادوم ليجلب البيانات منه، يكون عنوان الآي بي الخاصّ بالخادوم ثابتًا لا يتغيّر ويعرفه كلّ المستخدمين ليتمكّنوا من الوصول إليه عبر اسم نطاق معيّن (Domain Name) يكون مربوطًا به. لكن هناك بنية أخرى للاتصالات وهي بنية النظير للنظير (Peer to Peer) أو تُعرف رمزًا بـP2P. وهذه البنية مختلفة عن البنية السابقة حيث لا تتطلب وجود خادومٍ مركزي للاتصال بل تتصل أجهزة العملاء (Clients) بين بعضها البعض مباشرةً لتبادل البيانات. لأنّه بما أنّ كلّ جهازٍ من أجهزتنا يمتلك عنوان آي بي ومنافذ (Ports) خاصّة به فيمكن للأجهزة الأخرى حول العالم كذلك أن تتصل به، إن سمح لها المُستخدم بذلك وعطّل الجدار الناري الخاصّ براوتر الشبكة واستخدم البرامج المناسبة. أشهر مثال على ذلك هو ما يعرف شعبيًا بالتورنت (Torrent) وله ما يُعرف بالباذرين (Seeders) والنظراء (Peers) الذين يحمّلون البيانات المرفوعة من الباذرين. ومن بين الأمثلة على ذلك متصفّح تور، وهو متصفّح مبني على فيرفكس يستعمل تقنية النظير للنظير لإجراء اتصالات آمنة ومشفّرة للمستخدمين. لكن صارت الخدمات اللامركزية في السنوات الأخيرة أكثر من ذلك بكثير؛ حيث ضجر الكثير من المستخدمين من سياسات الشركات العملاقة مثل فيس بوك ويوتيوب وجوجل وأمازون وغيرها، ووجدوا أنّ أفضل طريقة لإنشاء محتوىً سهل التداول وغير قابل للحجب والمراقبة وفرض السياسات عليه هو عبر جعله يعمل باتصالات النظير للنظير. نذكر من بينها المشاريع مفتوحة المصدر التالية: Mastodon: أنشئ شبكتك الاجتماعية الخاصّة بك على شكل عُقَد (Nodes) يمكن وصلها بالشبكات الاجتماعية للآخرين أو فصلها متى ما أردت. وهو في الواقع بديل لامركزي لخدمة تويتر. Diaspora: شبكة اجتماعية لامركزية أشبه بفيس بوك. Beaker Browser: متصفّح ويب يعمل بالكامل بتقنية النظير للنظير، وبالتالي تُنشأ صفحات الويب الخاصّة بك أو تحمّلها من الآخرين عبر الشبكة وبروابط مباشرة بينك وبينهم دون الحاجة للمرور بخواديم أحد. Sia: خدمة مشاركة ملفّات لامركزية مثل جوجل درايف وغيرها، لكنّ الملفّات تستضاف على أجهزة جميع المستخدمين بصورة آمنة ومشفّرة ومقطّعة. العملات الرقمية ظهرت سنة 2009م أوّل عملة رقمية ناجحة وهي بتكوين (Bitcoin). وهي عملة لامركزية تعتمد على تقنية النظير للنظير (Peer to Peer) لإجراء المعاملات المالية الرقمية. والبتكوين في الواقع ما هي إلّا مجموعة بيانات وبالتالي قيمتها قادمة من قيمة السوق المحيط بها والذي يتعامل بها وليست من شيءٍ معيّن. تخزّن جميع معاملات بتكوين من إرسال وتحويل وغير ذلك في قاعدة بيانات عملاقة مشتركة بين جميع المستخدمين اسمها بلوكتشين (Blockchain)، وهي مشفّرة ومؤمّنة بصورة كبيرة تضمن أنّ المعاملات التي تجري بها غير قابلة للتعديل أو التغيير من قبل الآخرين، وبالتالي يمكن لشخصين مثلًا أن يتبادلا البتكوين بينهما دون خوفٌ من طرفٍ قد يتدخّل بينهما. إنّ إجراء عمليات بيع وشراء العملات الرقمية يحصل إمّا من طرف محفظات المستخدمين (Users Wallets) مباشرةً بين بعضهم البعض، أو بين منصّات تداول العملات الرقمية (e-Wallets) وهذا هو الخيار الأشهر والأسهل لأنّ الأوّل سيتطلّب الكثير من الجهد والتعب لتأمين البيانات وإجراء المعاملات، بينما يمكنك في دقائق إجراء عمليات البيع والشراء عن طريق أحد منصّات العملات الرقمية. وبفضل طبيعة العملات الرقمية فإنّ تبادلها مجهول تمامًا، حيث تحصل عمليات تحويل بتكوين بين الأطراف المختلفة عن طريق عناوين مشفّرة مجهولة الهوية لا يُعرف أصحابها وبالتالي تتخفّى عن أعين المراقبة (إلّا أنّ الدول مثلًا يمكنها محاولة معرفة صاحب عنوان معيّن عن طريق سجّلات المستخدمين وبياناتهم في منصّات التداول إن كانت تحت أراضيها لكن هذا غير مضمون). هناك منصّات عالمية للتداول ومنصّات محلّية، ويمكنك البحث في بلدك عن تلك المنصّات ورؤية ما إذا كانت تدعم البيع والشراء داخل بلدك أم لا. هناك الكثير من العملات الرقمية (المئات وربّما الآلاف منها) وهي تجارة رائجة جدًا في يومنا هذا بل هي الموضة الحالية المالية في عصرنا. وبسبب هذا فقد ازداد الإقبال عليها في العالم العربي، لكن هناك العديد من النصائح والمعلومات الواجب تذكّرها عند التعامل بالعملات الرقمية: لا يمكن استرجاع البتكوين في حال إرسالها إلى عنوانٍ خاطئ أو غير صحيح بتاتًا. إن اختُرق حسابك وسُرقت البتكوين منه فقد ضاعت للأبد. تحتاج حاليًا عمليات بتكوين ما بين 10 دقائق إلى عدّة ساعات لإجراء ما يعرف بالتأكيدات (Confirmations) وهي ببساطة عمليات التأكّد من نظيرين (Peers) آخرين من العملية وأنّها صحيحة. إنّ إنشاء محفظتك الخاصّة بك للعملات الرقمية على حاسوبك هو الخيار المنصوح به لكنّه من المستحيل على معظم قرّاء هذه السلسلة تطبيقه لصعوبته وصعوبة تأمين الأموال التي عليه بعدها، وبالتالي فإنّ أفضل حلّ هو استخدام المنصّات الجاهزة للعملات الرقمية. هناك رسوم استقبال وإرسال تؤخذ منك من قبل تلك المنصّات عند كلّ عملية تجريها. منصّات التداول خاضعة للدول التي تعمل بها وبالتالي هي تحت قوانينها، وهي تمتلك كامل معاملاتك المالية معها بالإضافة إلى كلّ عناوين الاستقبال التي استعملتها وبالتالي يمكنها معرفة نشاطاتك بالتعاون مع الدولة. وتستعمل الدول تلك المعلومات غالبًا من أجل جمع الضرائب كما في حالة Coinbase والولايات المتّحدة. استعمل نصائح تأمين الحسابات التي شرحناها مسبقًا في هذه السلسلة لتأمين حسابك على تلك المنصّات، مثل استخدام الاستيثاق الثنائي وكلمة مرور قوية وغير ذلك. متابعة آخر أخبار الحماية والأمان والخصوصية يمكنك متابعة آخر أخبار الحماية والخصوصية بالإضافة إلى آخر التطورات والأبحاث في المجال عن طريق متابعة المواقع والمراكز التالية. وتمامًا كما هناك ما يسمّى بـ"مراكز التفكير" (Think Tanks) في السياسة فهناك مراكز أبحاث شبيهة في الأمان الرقمي: CitzenLab: مركز أبحاث حول الأمان الرقمي مركزه في كندا، لديه العشرات من التقارير والأبحاث المهمّة حول الخصوصية والأمان في العصر الحديث لم يُسبَق إليها من قبل. Upturn: مركز أبحاث متخصص بانتهاكات الخصوصية وسبل الوقاية منها. The Hacker News: موقع إخباري متخصص في أخبار الاختراقات والحماية حول العالم. r/Privacy على موقع ريديت: مجتمع متخصص بالخصوصية وآخر أخبارها على منصة النقاش الشهيرة Reddit. اقرأ أيضًا المقال السابق: كيف تعرف أنك اخترقت في العالم الرقمي وماذا تفعل حيال ذلك؟ النسخة الكاملة من كتاب دليل الأمان الرقمي
    1 نقطة
  25. إنّ تأمين الهاتف المحمول في هذا العصر ضرورة ملحّة وهذا لأنّ الكثير من الناس يقضي معظم وقته على هذه الهواتف. والهواتف هي أضعف نقطة أمان للمستخدمين فهي ليست مؤمّنة افتراضيًا بصورة جيّدة للأسف كما أنّ عملية تأمينها الحقيقية صعبة وفوق مستوى معظم المستخدمين العاديين، على عكس الحواسيب مثلًا. سيشرح هذا الفصل كلّ ما يمكن أن يفيد المستخدم العادي لتأمين هواتفه المحمولة، وسنركّز على أنظمة أندرويد فهي الأكثر شيوعًا و90% من الناس يستخدمونها. استخدمنا نظام أندرويد 6.0 في هذا الشرح، ورغم أنّه قديمٌ جدًا مقارنةً بأحدث الهواتف الصادرة مؤخّرًا إلّا أنّ ذلك مفيد فهذا يضمن أنّ جميع المزايا التي نتحدث عنها في هذه السلسلة ستكون موجودة في جميع إصدارات أندرويد التي صدرت بعد 6.0 وبالتالي تشمل معظم المستخدمين. قد تتغير مواضع الإعدادات وأمكنتها بناءً على إصدار نظام أندرويد المُستعمل بالإضافة إلى الشركة المصنّعة للهاتف المحمول، وقد تأتي إعداداتٌ جديدة من جوجل في الإصدارات الأحداث لإدارة الخصوصية لكن ثِقّ تمامًا أنّ هذه الميّزات موجودة في جميع إصدارات أندرويد ولا يُحذف منها شيء في الإصدارات الحديثة. لا يمكنك تأمين الهاتف المحمول أو بالأصحّ لا يمكنك تأمين الهاتف المحمول بصورة كاملة. يأتي الهاتف المحمول - سواءٌ كان من آبل أو سامسونج أو أيّ شركة - بالكثير من البرمجيات مغلقة المصدر افتراضيًا، بالإضافة إلى كون النظام نفسه غير قابل للاستبدال وإلّا ستخسر ضمان الشركة المصّنعة كما شرحنا في فصولٍ سابقة. هناك العشرات من البرمجيات التي تعمل على هاتفك ولا تدري ماذا تفعل أو ما هي أو ما البيانات التي تجمعها عنك، وهي جزءٌ من نظام التشغيل نفسه الذي يأتي مسبقًا على الجهاز. هذا بالإضافة إلى كون طبيعة الهواتف المحمولة غير قابلة للتأمين بصورة كاملة؛ شبكات الاتصال الخلوي مثلًا قادرة على تحديد موقعك الحالي حسب بعدك أو قربك من أبراج الاتصال الخاصّة بها، كما أنّ تعقّبك عبر نظام GPS (تحديد المواقع وفق الأقمار الاصطناعية) ممكن بسبب استخدامك لتطبيقات الخرائط (مثل خرائط جوجل)، وهذه أشياء منحصرة بالهواتف المحمولة دونًا عن الحواسيب لأنّك لا تستخدم حاسوبك مثلًا للتنقل في المدينة أو للاتصال بالآخرين، وبالتالي طبيعتهما مختلفة. كما أنّ الكثير من الهواتف المحمولة تأتي بنظام أندرويد غير محدّث إلى آخر إصدار؛ وهو ما يعني نظريًا وجود العشرات من الثغرات الأمنية في هذه الهواتف، ولا يمكن تحديثها لآخر إصدار أندرويد حيث أنّ الشركات المصنّعة لا تحدّثها بعد مرور أول سنةٍ من إطلاقها في الغالب. أضف إلى ذلك طبيعة استخدام الهواتف المحمولة، حيث يحمّل مستخدمو اليوم عشرات ومئات التطبيقات المختلفة على هواتفهم ليستخدموا مختلف الخدمات ومواقع الإنترنت، بينما لا يحصل هذا على الحواسيب مثلًا حيث يقضي المستخدم معظم وقته داخل متصفّح الويب فقط. ولا يُنس صعوبة التعامل مع الهواتف المحمولة للعمليات الطويلة أو المعقّدة؛ فأنت بحاجة إلى الكثير من الضغط بإصبعك وإجراء العديد من الإجراءات لتأمين هاتفك وهذا أصعب للتحكّم ويأخذ وقتًا طويلًا لفعله، على عكس الحواسيب التي تأتي بفأرة ولوحة مفاتيح، وبالتالي يصبح المستخدمون أكثر كسلًا ورغبةً في ألّا يفعلوا شيئًا بالمرّة. تأتي أخيرًا مشكلة العتاد؛ فالكاميرا الأمامية والخلفية والميكروفون مدمجون في الهاتف نفسه ولا يمكن تعطيلهم فيزيائيًا، وبالتالي لا يوجد لديك ضمان أنّ هذه الكاميرا الأمامية التي تنظر إلى وجهك 24 ساعة لم يخترقها أحدهم في الواقع وهو ينظر إليك في هذه اللحظة ويسمع صوتك. وهذا مختلفٌ عن الوضع في الحواسيب حيث يمكنك تحريك الكاميرا بعيدًا (إن كانت منفصلة على USB) أو على الأقل تغطيتها بشريطٍ لاصق (لكن هل يمكنك تغطية كاميرا الهاتف بشريط لاصق؟). لكن ما لا يُدرك كلّه لا يُترك جلّه. سنحاول شرح أهم أساسيات الحفاظ على الخصوصية والأمان الرقمي على الهواتف المحمولة مما يمكن فعله بسهولة، وهذا أفضل للمستخدم من أن يترك نفسه عرضةً لكلّ شيءٍ يصيبه. لكن ضع في الحسبان أنّه في النهاية إن كنت تحاول تأمين نفسك ضد مزوّد خدمة الاتصال الخلوي أو أي جهة تتطلب مستوىً عالٍ من الحماية ضدها فحينها لن ينفعك المذكور في هذه السلسلة، لكنّه ينفع لحماية نفسك من الاختراق والتطبيقات الخبيثة وما شابه ذلك، كما أنّ التشفير سيحمي بياناتك حتّى في حال السرقة مثلًا. تأمين الإعدادات الافتراضية أوّل شيءٍ نحتاج فعله هو إنشاء قفل للشاشة (Screen Lock) لحماية الجهاز من العبث به إن وقع بأي المتطفلين أو السارقين (بصورة طفيفة للسارقين لكننا سنتبع هذا بالتشفير). وقفل الشاشة هو إمّا "نقش" (Pattern) ترسمه عند رغبتك بفتح الجهاز أو رقم أو كلمة مرور تدخلها عند رغبتك بفتحه، وبالتالي لا يمكن لأحدٍ سواك أن يفتح الجهاز ويصل إليه. اذهب إلى الإعدادات (Settings) ---> تأمين الشاشة (Lock Screen) وستجد كلّ الإعدادات التي تحتاجها هنا. اضغط على "تأمين الشاشة" (Screen Lock) أمامك ثمّ اختر نوعيّة قفل الشاشة الذي تريده (نقش، رقم، كلمة مرور… إلخ) ثمّ ارسم النقش أو أدخل كلمة المرور التي تريدها. يمكننا الآن الشروع في تعطيل إعدادات مشاركة البيانات ومعلومات الأعطال مع الشركات المصنّعة للهواتف، وهذا لتجنّب رفع شيءٍ من بياناتنا إليها واستهلاك الشبكة. اذهب إلى "حول الهاتف" (About Phone) وعطّل إعدادات مشاركة البيانات من هناك: كما عليك فتح تطبيق "Google" الذي يدير كامل حسابك في جوجل على الجهاز، ثمّ النقر على هذه النقطة الرأسية في أعلى يسار الشاشة ثمّ تعطيل "الاستخدام وبيانات التشخيص" (Usage & Diagnostics): الشيء التالي لفعله هو تعطيل إظهار الإشعارات أثناء قفل الشاشة. إن أخذ أحدهم هاتفك مثلًا أو إن كنت تتصفحه بجانب أحدهم فستلاحظ ظهور كامل محتوى الرسائل والإشعارات المختلفة أثناء قفل الشاشة ولا نريد ذلك. يمكنك تعطيل هذه الميّزة من الإعدادات (Settings) --> مركز التنبيهات (Notifications Center) واختيار "عدم عرض إشعارات على الإطلاق": إنّ لوحة المفاتيح الافتراضية في أندرويد هي تطبيقٌ اسمه Gboard (وقد تكون غيرها على بعض الهواتف من بعض الشركات، لكن يمكنك تثبيتها على أي هاتف محمول أو اتباع نفس النصائح بصورة عامّة)، وهي لوحة المفاتيح الرسمية من جوجل لأنظمة أندرويد. هناك بعضٌ من إعدادات مشاركة البيانات التي عليك تعطيلها كذلك من إعدادات هذا التطبيق. يمكنك الوصول إلى إعدادات Gboard من الإعدادات (Settings) ---> اللغة والإدخال (Language & Input) ---> Gboard ---> إعدادات متقدّمة (Advanced Settings) ثمّ عطّل خيارات "مشاركة إحصاءات الاستخدام" و"تحسين Gboard" و"التخصيص" كما بالصورة: ومن نفس خيارات التطبيق اذهب إلى تصحيح النصّ (Text Correction) وعطّل "اقتراح جهات الاتصال" (Suggest Contacts) كما بالصورة: علينا الآن مراجعة خدمات الموقع (Location Services) من الإعدادات ثمّ النظر فيها. إننا ننصح بتعطيل خدمات الموقع إلّا عند الحاجة لاستخدامها (مثل المشي مع خرائط جوجل مثلًا) وبالتالي تتخلص من تعقّب موقعك طيلة الوقت (باستثناء مزوّد الاتصال الخلوي، حيث سيظل قادرًا على تعقّبك). ستظهر لك في تلك الصفحة خدمات الموقع المفعّلة حاليًا ويمكنك الضغط على كلٍ منها ومراجعتها. إنّها غالبًا: خدمات تحديد مواقع الجغرافي في حالات الطورائ: وهذا لتتمكن خدمات الطوارئ من معرفة موقعك في حال حصل مكروهٌ لك. يمكنك تفعيل أو تعطيل هذه الميّزة لكن لاحظ أنّ خدمات الطورائ ستظل قادرةً - نظريًا - على معرفة موقعك عن طريق مزوّد الاتصال الخلوي. سجل المواقع الجغرافية في جوجل: عطّلناها مسبقًا في الفصول السابقة من حسابنا على جوجل. تأكّد من تعطيلها ميّزة مشاركة الموقع الجغرافي على جوجل: إن أردت مشاركة موقعك الجغرافي مع أحدهم، تأكّد من تعطيلها. أخيرًا يمكنك تأمين بطاقات الاتصال (SIM Card) وهذا عبر طلب شِفرة سرّية تحفظها أنت عند إطفاء الجهاز وإعادة تشغيله، لا تضيف هذه الميّزة الكثير من الأمان لكنّ وجودها مهم لحماية بطاقة الاتصال من أن يستخدمها الآخرون. يمكنك الوصول إليها من الإعدادات (Settings) ---> الأمان (Security) ---> إعدادات تأمين بطاقة SIM ‏(Set up SIM Card Lock) ومن هناك يمكنك تغيير رقم التعريف الشخصي للبطاقة وكتابة رقم الأمان الذي تريده (تأكّد من حفظه وإلّا قد تخسر بطاقة الـSIM إلى الأبد إن نسيته): تأمين التطبيقات وصلاحيّاتها التطبيقات وما أدراك ما التطبيقات، جبهة الحرب الأولى. إنّ تأمين التطبيقات واستخدامها هو ثاني أصعب شيء على الهواتف المحمولة بعد محاولة تأمين نظام التشغيل نفسه، وهذا لأنّ كلّ تطبيقٍ تنزّله على الجهاز هو تطبيقٌ قد يكسر حمايته أو يخترقه، وبالتالي الكثير من الجهد والتعب المستمر في تأمين هذه التطبيقات ومراقبة نشاطها مطلوب. ينزّل معظم المستخدمين تطبيقاتهم من متجر جوجل بلاي (Google Play) الخاصّ بجوجل، فهو الذي يأتي افتراضيًا مع الجهاز كما أنّ جميع التطبيقات متوفّرة عليه، لكنّ هذا سيتطلب منك حسابًا على جوجل لتتمكن من استعماله، وبالتالي تدير جوجل جميع تطبيقاتك في الواقع عن طريق ما يُعرف بـGoogle Play Services. لكنّ بعض المستخدمين لا يعجبهم ذلك ولا يريدون الارتباط بخدمات جوجل. وهؤلاء أنشؤوا متاجر تطبيقاتٍ بديلة ليستعملوها بدلًا من متجر تطبيقات جوجل للتخلّص من الحاجة إلى حساب جوجل فقط لتثبيت البرامج. أشهر هذه المتاجر البديلة هو متجر F-Droid المجاني والمفتوح المصدر لأنظمة أندرويد وعليه حاليًا آلاف التطبيقات المتوفّرة جميعها مفتوحة المصدر، فالمتجر لا يقبل البرامج غير المفتوحة المصدر وبالتالي تغيب عنه جميع التطبيقات الأساسية الشهيرة، لكنّه مفيد لبرامج الأدوات (Utilities) وغير ذلك. يمكنك تثبيت المتجر على نظام الأندرويد الخاصّ بك وتنزيل ما يعجبك من التطبيقات المتوفّرة. ومن المتاجر الجميلة كذلك متجر Aurora، وهو في الواقع متجرٌ مفتوح المصدر ينزّل البرامج مباشرةً من متجر جوجل بلاي لكن دون الحاجة لحساب جوجل أو واحدٍ من خدماتها (ودون الحاجة لاستخدام تطبيق متجر جوجل بلاي)، وبالتالي أنت تحمّل ملفّ الـAPK (ملفّ البرنامج التنفيذي) الخاصّ بالبرنامج مباشرةً ثمّ تثبّته على جهازك دون المرور بجوجل. وهذا ممتاز لأنّك ستصبح قادرًا على الحصول على جميع التطبيقات التي تريدها من متجر جوجل بلاي دون أي صعوبة تذكر. فقط ابحث عن اسم التطبيق الذي تريده في المتجر ويمكنك تحميله بعدها بنقرة زرّ. يريك المتجر كذلك ما هي برمجيات التعقّب (Trackers) المُكتشفة في كلّ برنامج ويمتلك نظام حماية داخلي متطور. إننا ننصح بشدّة بالاستغناء عن خدمات متجر جوجل بلاي واستخدام F-Droid وAurora لتحميل التطبيقات وإدارتها على هاتفك المحمول، فالأوّل يمكنه إحضار التطبيقات مفتوحة المصدر لك والثاني يمكنه تحميل كلّ التطبيقات الأخرى التي تحتاجها من جوجل بلاي (مثل تطبيقات البنوك أو التطبيقات المحلّية في بلدك وما شابه). إن أبيت إلّا استعمال جوجل بلاي، فتأكّد أنّ التطبيقات التي تنزّلها لها تقييمات جيّدة (أكثر من 3.5 نجوم على الأقل) ولها أكثر من 50 ألف تحميل. انظر أثناء تنزيلك للتطبيق إلى أعلى الصفحة وقد تجد إشارة اسمها "Verified by Play Protect" وهي تعني أنّ هذا التطبيق قد فُحص من طرف جوجل [0] للكشف عن البرمجيات الخبيثة ولم يوجد به ما يثير الشكوك (وجوجل لا توفّر هذا كضمان أنّه خالٍ 100% منها، لكنها طبقة حماية إضافية). تثبيتك لهذه التطبيقات أفضل بكثير من تثبيتك لغيرها: كلّ ما سبق متعلّقٌ بمصادر التطبيقات، أمّا إن أردنا التحدّث عن التطبيقات نفسها فعلينا حتمًا ذِكر الصلاحيات أو الأذونات (Permissions) التي قد تتمتع بها هذه التطبيقات. الصلاحيات هي ببساطة إمكانية برنامجٍ معيّن بالوصول إلى بعض المزايا المتوفّرة في العتاد أو نظام التشغيل، ويمكن للمستخدم عبر نظام التشغيل منح أو منع هذه الصلاحيات وإدارتها كيفما شاء. الصلاحيات ميّزة مهمّة جدًا على الهواتف المحمولة وهي لبّ الأمان الرقمي عليه؛ ذلك أنّ البرامج التي تثبّتها على جهازك ستطلب منك قبل التثبيت صلاحياتٍ معيّنة (كالوصول إلى الميكروفون أو الكاميرا أو الصور أو وسائط التخزين… إلخ) وأنت من عليه أن يقرر إن كانت تلك الصلاحيات يحتاجها التطبيق بالفعل ليعمل أم لا. فمثلًا إذا كنت تبحث عن تطبيقات الآلة الحاسبة في متجر التطبيقات وعند تثبيت أحدها وجدته يطلب الوصول إلى الكاميرا أو الميكروفون أو الصور الخاصّة بك فهذا تطبيقٌ مشبوه حينها، لأنّ الآلة الحاسبة - المفترض - أنّها لا تحتاج هذه الصلاحيات لتعمل فلماذا يطلبها هذا التطبيق منك؟ هذا يعني أنّه يفعل أشياءً يجب ألّا يفعلها على نظامك. عليك تجنّب تثبيت التطبيقات التي تطلب صلاحياتٍ موسّعة لا تحتاجها من هذا النوع، وكلّ تطبيقٍ تشكّ فيه أنّه يطلب صلاحياتٍ لا يحتاجها لا تثبّته. أو إن أردت فيمكنك تثبيته ثمّ إلغاء صلاحياته الموسّعة من إعدادات التطبيقات مباشرةً بعد تثبيته (وقبل فتحه لأوّل مرّة) كما سنشرح الآن. يمكنك رؤية جميع التطبيقات المثبّتة على جهازك من الإعدادات (Settings) ---> التطبيقات (Apps). كما يمكنك النقر على زرّ المزيد (More) وإظهار تطبيقات النظام لرؤيتها جميعًا: إن ضغطت على زرّ متقدّمة (Advanced) فستصل إلى بعض الإعدادات المخفية المتعلّقة بإدارة التطبيقات، ويمكنك الضغط على أذونات التطبيق (App Permissions) لرؤية جميع الصلاحيات الحالية على الجهاز بالإضافة إلى كلّ التطبيقات التي تستعمل تلك الأذونات مفصّلةً إلى تصنيفاتٍ مختلفة: عليك تصفّح جميع هذه الصلاحيات وتعطيل أيّ تطبيقٍ مشبوه ترى أنّه يجب ألّا يمتلك تلك الصلاحيات. كما يمكنك مثلًا تثبيت التطبيقات التي تطلب منك صلاحياتٍ كثيرة ثمّ بعد التثبيت تعطّلها أنت من هذه الخيارات. من المنصوح كذلك استخدام برنامج مضاد فيروسات ويمكنك العثور على الكثير منها وتجريبها من متجر التطبيقات الخاصّ بك. ولطبيعة عملها والمنافسة الشديدة بينها فهي ليست مفتوحة المصدر للأسف لكنّ وجودها ضروري لتأمين هاتفك وحمايته من الأخطار، ولن نتمكّن من الإشارة إلى أسماءً معيّنة في هذه السلسلة بسبب ذلك. حذف الملفّات بصورة نهائية كما شرحنا في فصولٍ سابقة فإنّ الملفّات لا تُحذف نهائيًا عند حذفها من الأقراص الصلبة أو بطاقات SD، بل تبقى محتوياتها موجودةً على القرص حتّى تأتي بياناتٌ جديدة صدفةً وتستبدلها. وهذه مشكلة إن أردت بيع هاتفك أو استبداله أو إعطاءه لشخصٍ آخر لأنّه يمكنه استعمال برامج استعادة الملفّات لاسترجاع ملفّاتك وبياناتك الشخصية المحذوفة. حتّى ضبط الجهاز على وضع المصنع (Factory Reset) لن يحميك من ذلك. يمكنك مراجعة الأوراق البحثية [1] [2] لرؤية التفاصيل وأسباب ذلك. لاحظ أنّه هناك عدّة أنماط للتخلّص من البيانات المحذوفة وحذفها للأبد: تشفير تلك البيانات وبالتالي منع الوصول لها من قبل الآخرين حتّى عند استرجاعها، هذه الطريقة هي الأقوى (ولهذا دومًا ننصح بالتشفير في كلّ أجزاء هذه السلسلة) لكنّها مع ذلك عرضة لهجمات استرجاع ملفّ التشفير نفسه (Encryption Key Restoration) وبالتالي يُمكن كسرها نظريًا إن كان يركض وراءك أحد أجهزة الاستخبارات الأجنبية، لكن أبو عبّود مصلّح الهواتف والحواسيب في حيّكم يستحيل عليه ذلك. الكتابة فوق كامل القرص الصلب أو بطاقة SD، وهذا حلٌ فعّال لأنّه يكتب فوق كامل البيانات على القرص وليس فقط استهدافًا لملفّات معيّنة. الكتابة فوق المساحة الحرّة فقط من القرص الصلب أو بطاقة SD. وهذا مناسب إن كنت تريد التخلّص من كلّ شيءٍ حذفته في الماضي على تلك الأقراص لكن دون أن تحذف شيئًا جديدًا من بياناتك الحالية. الكتابة عدّة مرّات فوق ملفّ معيّن وهذا هو الخيار الأشهر والأسهل لكنّه الأكثر عرضةً للضعف كذلك، لأنّه على المستخدم الكتابة مرّاتٍ كثيرة فوق الملفّ ويستخدم تقنياتٍ معيّنة ليكون فعّالًا ومعظم برامج الحذف النهائي في الواقع ليست بتلك الفاعلية. إنّ عملية الكتابة فوق البيانات المحذوفة لا تعني بالضرورة حذف البيانات وهذا يعتمد على عوامل المساحة والطريقة المُستعملة بالإضافة إلى بعضٍ من العشوائية. وبالتالي من الواجب إجراء عدّة "مسحات" أو عمليات كتابة فوق البيانات (Pass) لزيادة فرصة حذفها للأبد، أمّا المسحة الواحدة فلا تفيد في شيء غالبًا (إلّا إن كانت الطريقة مصممة بالأساس لأقراص SSD وSD Cards فحينها الوضع يختلف ويمكن بمسحة واحدة). كما ترى فإجراء المسحات نفسها يتم بطرق مختلفة ولها معاييرها الخاصّة التي تحتاج الكثير من الأبحاث وهي معقّدة. لكن نريد الإشارة إلى أنّ الحذف النهائي حاليًا وفق آخر ما توصّل له المجال (State-of-the-Art) هو طريقة تدعى NIST 800-88. وهي مصممة خصيصًا لأقراص SDD وبطاقات SD وفلاشات USB الشبيهة وبالتالي تكتفي بمسحة واحدة، أمّا الطرق الأخرى مثل DoD 5220.22-M فهي غير مصممة لذلك وبالتالي تحتاج 7 مسحات. إننا ننصح بقراءة المقال [3] للمزيد من المعلومات عن معايير تدمير البيانات بصورة نهائية. والمشكلة الحقيقية هي أنّه لا توجد برامج مفتوحة المصدر للأسف على الهواتف المحمولة للقيام بالمهمّة بصورة فعّالة، وبالتالي يضطر المرء لاستعمال برامج مغلقة المصدر أو مدفوعة لأداء ذلك. عليك البحث بنفسك عن برامج تدعم طرق الحذف السابق ذكرها على أجهزتك. برنامج iShredder على أندرويد قد يكون واحدًا منها. التشفير على الهاتف المحمول تشفير الملفّات مهم جدًا لحمايتها من الوصول في حال السرقة أو الاختراق مثلًا. ولحسن الحظّ فإنّ التشفير مدعومٌ من نظام أندرويد نفسه ويمكنك تفعيله بسهولة. من الإعدادات (Settings) ---> الأمان (Security) انقر على التشفير (Encryption). وستتم عملية التشفير في غضون نحو ساعة أو أكثر من ذلك اعتمادًا على حجم بياناتك. ستُستعمل كلمة المرور أو نقش الشاشة الذين ضبطتهما بالفعل لإلغاء تشفير الجهاز: هناك كذلك العشرات من التطبيقات مفتوحة المصدر على متجر F-Droid لمختلف مهام التشفير؛ تشفير ملفّات معيّنة أو تشفير الرسائل أو التحقق من تشفير القرص أو إرسال الرسائل المشفّرة… وغير ذلك الكثير. يمكنك تصفّحها وتثبيت ما يعجبك منها فكلّها مجانية ومفتوحة المصدر. لا تنس استخدام Cryptomator - البرنامج الذي شرحناه في فصل التشفير - لتشفير مساحة التخزين السحابية كـGoogle Drive وDropbox، وهو يعمل كذلك على أنظمة أندرويد وiOS. أنظمة بديلة لهواتف الأندرويد إن نظام أندرويد مبني على نواة لينكس، والكثير من أجزائه مفتوحة المصدر مما يسمح للمطورين ببناء توزيعاتٍ مختلفة منه وإعادة توزيعها للناس بما يناسب احتياجاتهم. هناك مجتمعات هائلة من المطورين والمستخدمين حول ما يُعرف بـ"الرومات" (ROMs) الخاصّة بالأندرويد وهذه الرومات غالبًا ما تكون خاليةً من منتجات جوجل وخدمات تعقّبها وبالتالي هي أأمن وأفضل للاستخدام. هناك أنظمة تشغيل أخرى كذلك غير أندرويد يمكن تثبيتها على الهواتف المحمولة. إن كنتَ مستعدًا لصرف عدة أيام من وقتك لاستبدال نظام الأندرويد الموجود على جهازك بنسخة أخرى مبنية عليه وإن كنت مستعدًا كذلك لخسارة ضمان الجهاز في سبيل أمانك وخصوصيتك، فيمكنك الاطلاع حينها على المشاريع التالية: LineageOS: توزيعة مجانية ومفتوحة المصدر من أندرويد للهواتف المحمولة، تركّز على حذف تطبيقات جوجل افتراضيًا والاهتمام بالخصوصية. /e/OS: توزيعة مبنية على الأندرويد للمهتمين بأقصى خصوصية افتراضيًا وتوفير خدمات بديل لكل خدمات جوجل. يمتلكون كذلك هواتف مسبقة الشحن بنظامهم المفتوح المصدر. Ubuntu Touch: توزيعة مبنية على أوبونتو وليس أندرويد، مما يجعلها لا تعمل على معظم الهواتف سوى الحديثة والقوية منها لكنّ هذا يجعلها أفضل من غيرها بكثير (باستثناء كون الاتصالات الخلوية لا تعمل عليها في كلّ المناطق). انتبه كذلك إلى أنّ الأنظمة مثل البرامج؛ قد تكون محملة ببرمجيات تجسس واختراق وتعقّب كذلك، ويجب ألّا تحمّلها من أي مصدر مشبوه أو غير موثوق. من الواجب الانتباه كذلك عند التعامل مع مصلّحي الهواتف المحمولة المحليين في مدينتك أنّهم قد يكونون غير موثوقين أو غير متعلمين بصورة كافية، فيحمّلون أنظمة (رومات) من مصادر مشبوهة إمّا عن علم أو جهل ويثبّتونها لك دون علمك. فالقصد أنّ الثقة عامل أساسي جدًا هنا. لا تسلّم هاتفك المحمول إلّا لمن تثق به. خاتمة قد تستغرق عملية تأمين الهاتف المحمول الكثير من الوقت والجهد إلّا إنّ النتائج ستكون أفضل بكثير من أن تُخترق أجهزتك وتُسرّب بياناتك، ولهذا من المهم اتباع الإجراءات السابقة لضمان عدم حصول ذلك. لا تنس كذلك أنّ هذه النصائح ليست شاملة لكل شيءٍ متعلّق بالهاتف المحمول فكما ذكرنا لا يمكن تأمين الهاتف بمحمول بصورة كاملة، لكنّها تغطّي معظم المواضيع المهمّة للقارئ العادي. اقرأ أيضًا المقال التالي: كيف تعرف أنك اخترقت في العالم الرقمي وماذا تفعل حيال ذلك؟ المقال السابق: ما يلزم معرفته عند الشراء والدفع عبر الإنترنت النسخة الكاملة من كتاب دليل الأمان الرقمي
    1 نقطة
  26. سيشرح هذا الفصل بعض المفاهيم الأساسية عن متصفّحات الويب وطريقة عملها، بالإضافة إلى طريقة تأمين متصفحيّ فيرفكس وكروم بصورةٍ أساسية. من المفترض أن يعمل نفس الشرح على كلّ المتصفّحات المبنية عليهما كذلك، مثل كروميوم (Chromium) وUngoogled Chromium وغيرها. تعتمد معظم الأمور المشروحة في هذا الفصل على تثبيت إضافاتٍ خارجية لزيادة مستوى الأمان والخصوصية في متصفّحات الويب، وهي على مستويات فما قد يحتاجه أكثر الناس مختلف عما قد يحتاجه المتخصص الذي يبحث عن حمايةٍ أكبر. قسّمنا الفصل بناءً على هذا الأساس كذلك. مفاهيم تأسيسية حول متصفّحات الويب هناك الكثير من متصفّحات الويب لأنّها تخدم أغراضًا مختلفة، وهي تستعمل كذلك محركاتٍ مختلفة (Engines)؛ فالمحرّكات هي أنوية المتصفّحات المسؤولة عن تصيير وعرض محتوى الويب بدلًا من أن يكون مجرّد شِفرات صرفة لا يمكن الاستفادة منها. يستعمل متصفّح فيرفكس محرّك "Gecko" الخاصّ بفيرفكس نفسه وهناك بعض المتصفّحات الأخرى المبنية عليه، بينما يستعمل كروم محرّك "Blink" القادم من متصفّح كروميوم (تذكّر أننا شرحنا في السابق أنّ كروم مبني على كروميوم)، ولهذا السبب فإنّ طريقة عمل المتصفحين بالإضافة إلى طريقة عرضهما لمواقع الويب مختلفة. ولهذا السبب فإنّ بعض المواقع قد تعمل على الأوّل ولكن ليس الثاني والعكس (لكنّها قليلة جدًا في الوقت الراهن حيث صارت معايير تطوير المواقع الموحّدة معروفة وشائعة). ولنفس السبب لا تعمل إضافات فيرفكس على كروم والعكس، لأنّهما يستخدمان محرّكاتٍ مختلفة. متصفّح الويب كأيّ برنامج موجود على نظامك؛ له وصولٌ إلى كامل نظامك وملفّاتك بالإضافة إلى العتاد الموجود مثل الميكروفون والكاميرا، وبالتالي قد تمتلك مواقع الويب وصولًا إليها كذلك (أو لا) بناءً على ما يسمح متصفّح الويب لها أن تمتلك. وهذا هو نظام الأذونات (Permissions) الموجود في كلّ المتصفّحات الشهيرة. لا تسمح المتصفّحات لمواقع الويب بسرد محتويات أيٍ من مجلّدات نظامك وملفّاتك افتراضيًا، لكن يمكنها الوصول إليها ورفع أجزاءٍ منها في حال طلبت هي ذلك ووافقت أنت على ذلك فقط عبر تنبيهٍ يُعرض لك قبل أن تتم العملية. ولهذا فإنّ عملية تطوير متصفّحات الويب عملية معقّدة ومهمّة؛ فتطوير المحرّكات يحتاج سنواتٍ طويلة من العمل ليثمر والكثير من الموارد، كما أنّ تطوير متصفّحات ويب آمنة لمنع المواقع السيئة والخبيثة من سرقة بيانات المستخدمين دون علمهم مهمّة أصعب. لكنّ كلٍا من متصفحيّ فيرفكس وكروم ممتازان في هذه الناحية. ولهذا يمتلك المتصفّحان أنظمةٍ مبنية داخلهما بالفعل لاكتشاف المواقع الخبيثة التي تحاول تجاوز المتصفّح للوصول إلى الملفّات أو الكاميرا والميكروفون دون علم المستخدم، ثمّ منعها وحجبها عن المستخدم تلقائيًا. نريد أن ننتقل الآن إلى شرح بعض الأمور العامّة عن طريقة عمل المتصفّحات مع مواقع الويب: نظام أسماء النطاقات (Domain Name System - DNS): لقد شرحنا ماهيّة نظام الـDNS في فصل "المفاهيم الأساسية" من هذه السلسلة بالإضافة إلى طريقة تغييره على مستوى الموجّه (Router)، لكننا نريد الإشارة هنا إلى أنّ المتصفّحات قادرة على استعمال نظام DNS مختلف عن المُستَخدم حاليًا على كامل النظام، بل يمكن حتّى للإضافات الخارجية المثبّتة فعل ذلك. في فيرفكس مثلًا هناك خيار لاستخدام نظام الـDNS التابع لشركة CloudFlare، وإذا استخدمته، فستتخلص من مشكلة تسريب الـDNS (ما يعرف بـDNS Leak) لكن داخل متصفّح الويب فقط وليس التطبيقات الأخرى. الاتصال بوسيط أو بلا وسيط (Proxy): الوسيط أو البروكسي هو خادومٌ يتوسّط الاتصال بين متصفّحك وبين مواقع الويب التي تريد طلبها، فاستخدامه يشبه ما تفعله في الحياة الواقعية من أن تطلب من أحدهم إحضار شيءٍ لك من مكانٍ ما لتجنب فعل ذلك بنفسك، وهو نفس المبدأ هنا. حيث يؤدّي استخدام الوسيط إلى تجنّب حظر المواقع أو معرفة المواقع التي تزورها عبر قيام متصفّحك بالاتصال بخادومٍ وسيط ليقوم الوسيط هو بجلب الصفحات له. تستخدم متصفّحات الويب إعدادات وسيط النظام افتراضيًا لكن يمكن كذلك جعلها تستخدم وسيطًا خاصًّا بها، إمّا من الإعدادات أو عبر إضافاتٍ خارجية. الشهادات (Certificates): عند زيارتك لأحد مواقع الويب التي تستخدم بروتوكول HTTPS فإنّ متصفّحك يتأكّد من موثوقية هذا الاتصال وأنّه ليس مزوّرًا أو معبوثًا به من طرفٍ خارجي عبر ما يُعرف بـ"الشهادة"، وهي في الواقع حزمة بيانات (اسم صاحب الموقع والمؤسسة والجهة المسؤولة عن الشهادة بالإضافة للمفتاح العام للتشفير… إلخ) يعرضها موقع الويب لمتصفّحك ثمّ يقوم المتصفّح بموازنتها مع النسخة المحفوظة لديه (القادمة منذ تثبيت المتصفّح أو تحديثه من الجهات التي تصدر شهادات الاستيثاق لمواقع الويب) للتأكّد من هوية الموقع وصحّة الاتصال. حيث يقوم متصفّحك بمقارنة المفتاح العامّ الذي تعرضه الشهادة ثمّ المفتاح العام المُستخدم لتشفير الاتصال، ثمّ يقارنهما كذلك بالمفتاح العام المحفوظ لديه عن الجهة التي أصدرت الشهادة للتأكّد من صحّة الاتصال، فهو بالتالي يستعمل جهة خارجية لعمل هذه المقارنة. ملفّات تعريف الارتباط (Cookies): إذا اشتريت قطعة حلوى من بائع الحلوى في يومٍ ما ثمّ ذهبت في اليوم التالي لشراء قطعةٍ أخرى، فقد يتذكرك بائع الحلوى ويقول: "آه أنت الذي اشترى الحلوى الفلانية بالكميّة الفلانية يوم أمس" وهذا بالضبط ما تفعله مواقع الويب مع ملفّات تعريف الارتباط؛ وهي ملفّات تخزّن بعض الإعدادات والبيانات عن نشاطاتك وتفضيلاتك في مواقع الويب التي تزورها لتقوم المواقع باستخدامها لاحقًا. جاءت تسمية هذه الملفّات كذلك بـ"الكعكات" (Cookies) من هذا الاستخدام. لا تحتوي ملفّات تعريف الارتباط عادةً أيّ معلوماتٍ شخصية عنك مثل اسمك أو بريدك أو بياناتك البنكية أو ما شابه، لكنّها تحوي مُعرّفًا خاصًّا بك (ID) يُمكّن مواقع الويب نفسها من معرفتك عندما تعود إليها في المستقبل. لكن بسبب حجم ملفّات تعريف الارتباط وكثرتها فإنّه يمكن استخدامها في الكثير من الأحيان للتعرّف على هوية المستخدمين الحقيقية، والمؤسف أنّها تُشَارك كذلك بين مختلف مواقع الويب وليس فقط المواقع التي تزورها. (وهو ما يعرف بـ"3rd-party cookies sharing"، يمنع فيرفكس وSafari مشاركتها افتراضيًا، لكن كروم يسمح بذلك). يمكن قراءة المزيد عن ملفّات تعريف الارتباط وكيف تُستخدم لتعقّب المستخدمين من الورقة البحثية الشهيرة: "The Web Never Forgets: Persistent Tracking Mechanisms in the Wild". الذاكرة الخبيئة (Cache): تقوم متصفّحات الويب بتخزين بعض الصور وملفّات التنسيق والمعلومات المختلفة عن مواقع الويب التي زرتها لتجنّب تحميلها من جديدة في المستقبل لزيادة سرعة التحميل عندما تفتحها مرّة أخرى. لكن هذا بالطبع قد يكشف بعض المواقع التي كنتَ تزورها. مُعرّف المُستخدم (User-Agent): معرّف المستخدم هو وصفٌ لمتصفّح الويب تأخذه خواديم مواقع الويب (Web servers) عند زيارتك إيّاها، ويحتوي اسم المتصفّح وإصداره ونظام التشغيل الحالي وإصداره واسم المحرّك وإصداره. بصمة الإصبع (Fingerprint): يوفّر متصفّح الويب لمواقع الويب التي تزورها الكثير من المعلومات عن نفسه بالإضافة إلى نظام التشغيل الحالي؛ مثل عتاد الجهاز وإصداره وإصدار تعريفات البطاقة الرسومية (Graphics Card)، والخطوط وقائمة الإضافات المثبّتة والمنطقة الزمنية ولغة المتصفّح ولغة نظام التشغيل، بالإضافة إلى معلوماتٍ عديدة أخرى. وهذه مشكلة لأنّه يمكن معرفة هويّة المُستخدم الفريدة من بين ملايين المستخدمين عبر مجموعة المعلومات هذه، لأنّها مختلفة جدًا بين بعضها البعض لكلّ مستخدم ومن النادر أن تجد مستخدمين اثنين من بين الملايين لتتوافق بصمة الإصبع لهما بنسبة 100%. ويظنّ الكثير من الناس أنّ تعقّبهم ومعرفة هويتهم مستحيلة إن استخدموا اتصال "في بي إن" وغيّروا نظام الـDNS الخاصّ بهم واستخدموا هوية وهمية على الإنترنت، ولكن هذا غير صحيح في الواقع والسبب هو بصمة الإصبع، حيث أنّ استخدامك لنفس المتصفّح بنفس الإعدادات وعلى نفس نظام التشغيل سيمكّن مواقع الويب - إن شاءت - من ربط هويتك الوهمية بهويتك الحقيقية (مثل أن تقوم بعمل حسابين اثنين على أحد مواقع الويب، فيمكن لمواقع الويب أن تعرف أنّك وراء الحسابين عبر هذه الطريقة مهما فعلت). والمشكلة الحقيقية هو أنّه لا توجد حماية كاملة منها فمواقع الويب بحاجة إلى بعض هذه المعلومات لمعرفة كيف تعرض الصفحة بصورة جيّدة لك، ومنع بصمة الإصبع بالكامل أو تغييرها بصورة جذرية قد يحطّم صفحات الويب ويجعلها تتوقف عن العمل. يمكنك رؤية بصمة الإصبع لمتصفّحك الحالي عبر موقع https://panopticlick.eff.org التاريخ والبيانات المحفوظة: تقوم متصفّحات الويب بحفظ جميع الصفحات التي تزورها افتراضيًا لتمكينك من الرجوع إليها إن أردت، كما قد تقوم بحفظ اسم المستخدم وكلمات المرور الخاصّة بك بالإضافة إلى معلوماتك البنكية والأمور التي تبحث عنها في مربّعات البحث على المواقع المختلفة، ويمكنك ضبط إعدادات التاريخ هذه (أو تعطيلها إن أردت) من إعدادات كلّ متصفّح. الطلبات (Requests): عندما تزور موقع ويب معيّن وتتصفح بعض الصفحات داخله فإنّك تقوم بإجراء "طلبات" لخادوم الويب الذي يستضيف الموقع بالصفحات التي تتصفحها، بما في ذلك محتويات تلك الصفحات من صور وسكربتات جافاسكربت وملفّات مختلفة أخرى. فعند طلبك موقع facebook.com مثلًا في المتصفّح فإنّ المتصفّح يجري العديد من الطلبات في الخلفية (Background) في الواقع قد تصل إلى مئات الطلبات لمصادر مختلفة. جميع طلباتك هذه مسجّلة لدى خادوم الويب بالإضافة إلى كلّ نشاطاتك من بحث ورفع وتصفّح وحذف وغير ذلك ضمن موقع الويب نفسه (وهي بالتالي ظاهرة لأصحاب مواقع الويب، فيمكنهم معرفة أنّ محمد هاني صبّاغ قد بحث عن الشيء الفلاني في مربّع البحث الساعة كذا يوم كذا… إلخ). ومن الممكن كذلك أن يستمر الموقع في تحديث نفسه بالخلفية عبر اتصالٍ حيّ (Live Connection) لا يُغلق عند انتهاء تحميل الصفحة، بل يستمر حتّى بعد تحميلها للمرّة الأولى لتحميل المحتوى الجديد، مثلما يفعل موقع تويتر مثلًا من تحميل التغريدات الجديدة عند توفّرها، وهذا يؤدي إلى طلباتٍ مستمرة من طرف متصفّحك لتحميل هذه البيانات الجديدة. ضبط إعدادات المتصفّحات الافتراضية يأتي كلٌ من متصفحيّ فيرفكس وكروم بإعداداتٍ افتراضية تسمح للمتصفّح أن يُرسل بياناتٍ عنك وعن نشاطاتك على الشبكة. يمكنك تعطيلها لزيادة مستوى الخصوصية. في فيرفكس، اذهب إلى التفضيلات (Preferences) --> الخصوصية والأمان (Privacy & Security)، وعطّل خيارات "جمع Firefox للبيانات واستخدامها (Firefox collection for data)" بالشكل التالي: هناك الكثير من الإعدادات الأخرى المتعلّقة بالخصوصية في فيرفكس من نفس الصفحة. يمكنك مراجعتها جميعًا وضبطها لتناسبك، مثل حذف كلّ التاريخ عند إغلاق المتصفّح مثلًا أو إبقاؤه لمدّة معيّنة فقط أو ما شابه ذلك. في كروم، اذهب إلى الإعدادات (Settings) --> خدمات Google والمزامنة (Google Services & Synchronization) وعطّل خيارات تسجيل الدخول إلى حساب جوجل ومشاركة البيانات والبقية بالشكل التالي: يمكنك كذلك الذهاب إلى أمن المعلومات (Information Security) وتعطيل خيار مشاركة مواقع الويب التي تزورها والبيانات الأخرى كالتالي: تحتاج كذلك إلى منع كروم من الاستمرار في العمل في الخلفية، وهذا لتجنّب جمع أي شيءٍ متعلّق بك أو الوصول إلى العتاد مثلًا: أخيرًا عليك تعطيل مشاركة ملفّات تعريف الارتباط (Cookies) مع جهات الطرف الثالث (3rd-Party) لمنع مواقع الويب من معرفة نشاطك على المواقع الأخرى، بل تسمح لها بمعرفة نشاطك السابق على الموقع ذاته فقط (فلا يمكن لفيس بوك معرفة تفضيلاتك على جوجل، بل يمكن لجوجل معرفة نشاطك على مواقع جوجل وحدها فقط): إضافات لتوفير الخصوصية لمتصفّحات الويب تدعم معظم متصفّحات الويب الحديث ما يُعرف بـ"الإضافات"، وهي برمجيات صغيرة تُضاف إلى المتصفّح لجعله يقوم بمهام لم يكن قادرًا على فعلها من قبل. عليك استخدام إضافات موثوقة فقط ومن مصادر معروفة، فالإضافات كالبرامج يُمكن أن تستعمل إمّا لزيادة أمانك وخصوصيتك أو لاختراقك. حاول ألّا تثبّت أيّ إضافة متصفّح بعددٍ أقل من 10 آلاف مستخدم ولها تقييم وسمعة جيدة على متجر الإضافات. يوجد على متجر إضافات فيرفكس علامة "Verified" وهي تعني أنّ مهندسي موزيلا قد اطّلعوا على الشِفرة المصدرية للإضافة ولم يجدوا بها أي مشكلة، وهذه الإضافات هي أأمن إضافات يمكنك تثبيتها: للأسف لا يوجد شيء مماثل لذلك على متجر إضافات كروم، ولذلك إن كنت تستعمل أيّ متصفّح ويب مبني على كروميوم فأنت متروكٌ لتواجه المعضلة وحدك وفق حدسك (عدد التحميلات، عدد المراجعات، اسم الشركة المطوّرة وسمعتها… إلخ). لاحظ أنّ هذه الإضافات قد لا تحميك من تعقّب بصمة الإصبع (Fingerprinting) وقد يتوجّب عليك البحث عن غيرها لتأمين نفسك. يمكنك التحقق دومًا من كونك مؤمنًا ضد هذا النوع من الهجمات أم لا عبر الموقع التالي: https://panopticlick.eff.org. ومن تجربتنا وجدنا أنّه لا يوجد أفضل من الإعدادات الافتراضية لمتصفّح Brave للحماية ضدها فهو لا يحتاج أيّ إضافات بل يحميك منها مباشرةً بعد التثبيت. إضافات أساسية لا غنى عنها uBlock Origin: الإضافة الأشهر والأقل استهلاكًا للموارد لحجب الإعلانات والنوافذ المنبثقة والكثير من السكربتات السيئة على الويب. ستحجب كل الإعلانات بمجرّد تثبيتها على متصفّحك. (فيرفكس، كروم). Privacy Badger: إضافة من EFF (مؤسسة المكافحة الرقمية، مؤسسة موثوقة) لحجب سكربتات التعقب التي تنتهك خصوصية المستخدم وتجمع معلوماتٍ حوله. ستعمل بمجرّد تثبيتها كذلك وسترى أيقونةً في شريط أدوات المتصفّح تخبرك ما السكربتات التي سُمِح بها ومالتي مُنعت. (فيرفكس، كروم). HTTPS Everywhere: من EFF كذلك، تقوم بتحويل المستخدم تلقائيًا إلى إصدار بروتوكول HTTPS بدلًا من HTTP في حال توفّره (حيث لا تقوم بعض المواقع بذلك تلقائيًا). (فيرفكس، كروم). Cookies AutoDelete: تقوم هذه الإضافة بحذف ملفّات تعريف الارتباط (Cookies) تلقائيًا عند إغلاق التبويب (Tab) المُرتبط بها بالإضافة إلى ملفّات التخزين المحلّية (Local Storage) والذاكرة الخبيئة (Cache) وغيرها من الإعدادات المحفوظة، وبالتالي تمنع مواقع الويب من تعقّبك بصورةٍ مستمرة ومعرفة نشاطاتك على مواقع الويب الأخرى المفتوحة حاليًا (وستحتاج بالطبع تطوير عادةٍ في إغلاق التبويبات المفتوحة بمجرّد الانتهاء منها). استخدامها سيعني كذلك أنّه سُيسَجّل خروجك تلقائيًا من المواقع التي سجّلت الدخول إليها (فيس بوك، جوجل… إلخ) تلقائيًا بمجرّد إغلاق كافّة التبويبات المرتبطة بها، ولكن هذا ثمنٌ رخيص مقابلة حماية خصوصيتك على الشبكة بهذا الشكل الهائل. لتفعيل الإضافة بصورةٍ صحيحة فإنّه يتوجّب عليك تفعيل خيار "تمكين التنظيف التلقائي (Enable Auto Clean up)" من إعدادات الإضافة، ثمّ ضبط "ثانية تأخير قبل التنظيف التلقائي (Seconds before clean up)" إلى 1. (أي أنه ستُحذف جميع ملفّات الارتباط وغيرها بعد ثانية واحدة من إغلاق التبويبات). ستحتاج كذلك إلى تعطيل الإشعارات والسجل (Notifications & Log) بالكامل لمنع عرض الإشعارات المزعجة بصورة مستمرة. وأخيرًا، ستحتاج تفعيل الخيارات التالية: الإضافة متوفّرة لمتصفحيّ فيرفكس وكروم. إضافات لخصوصية أكبر Remove Google Redirection: إن الروابط التي تراها في نتائج بحث جوجل تأتي مضمّنةً بروابط تعقّب من شركة جوجل، ولهذا إن حاولت نسخ الروابط من نتائج البحث ولصقها في مكانٍ آخر فستجد رابطًا طويلًا من جوجل ليس هو في الواقع الرابط الحقيقي الذي رأيته في نتائج البحث. تقوم هذه الإضافة بحلّ المشكلة ببساطة عبر وضع الرابط الحقيقي لنتائج البحث بدلًا من رابط التعقّب لجوجل (فيرفكس، كروم). ScriptSafe: إضافة خاصّة بمتصفّح كروم لإدارة كلّ ما يتعلّق بالأمان والخصوصية فيه. تأتي الإضافة بوضع المنع افتراضيًا ولهذا ستحتاج تغييره إلى وضع السماح (Allow by default) لتجنّب تحطيم مواقع الويب: يمكنك الآن تصفّح خيارات الإضافة وتفعيل أو تعطيل ما تريده. لاحظ أنّ الإضافة ستعرض لك كلّ أسماء النطاقات التي تحاول تتبعك أو جمع معلوماتٍ عنك في شريط أدوات كروم (من أيقونة الإضافة). توفّر الإضافة حمايةً ضدّ تقنيات تتبع بصمة الإصبع (Fingerprinting) بالإضافة إلى حماية من تتبع معرّف المُستخدم (حيث يمكنك تخصيصه إلى واحدٍ مشترك بين معظم المستخدمين) وحماية من تسرّب عناوين الآي بي عبر WebRTC والحماية من معرفة الصفحة المُحِيلة إلى الصفحة الحالية (Referrer Spoof) وغير ذلك الكثير. (كروم). NoScript: بما أنّ الواجهة الأمامية لمواقع الويب تستعمل الكثير من شِفرات جافاسكربت لتصيير صفحات الويب وتسهيل عرضها وعمل العديد من الأشياء (وهي الشفرات القادرة على تتبع المستخدمين وجمع البيانات عنهم كذلك) فإنّ حلّ هذه الإضافة للمشكلة كان ببساطة عبر منع كل شِفرات جافاسكربت افتراضيًا إلّا تلك التي يسمح لها المستخدم. لكن لاحظ أنّ هذا المنهج سيؤدّي إلى تعطّل معظم مواقع الويب ولهذا قد تحتاج الكثير من التمرّس في إعدادات هذه الإضافة لتتمكن من استخدامها بصورة مريحة، إلّا أنّها فعليًا الإضافة الوحيدة التي توفّر الحماية القصوى الممكنة من مواقع الويب فهي تمنع كلّ السكربتات من العمل إلا ما تسمح له أنت (فيرفكس، كروم). خدمات مزامنة بيانات المتصفّح تمتلك معظم متصفّحات الويب مثل فيرفكس وكروم خدمات مزامنة (Sync Services) مبنية داخلها لمزامنة بيانات تصفّحك وكلمات مرورك ومعظم نشاطك الذي تجريه عبر متصفّح الويب (التاريخ، بيانات النماذج، العلامات… إلخ). وهي خدمات مدمجة داخل المتصفّحات نفسها دون الحاجة لتثبيت أيّ إضافاتٍ أخرى. إننا لا ننصح باستخدام أيّ خدمة مزامنة، فهذا يعني تخزين كامل تاريخ تصفّحك ومعلوماتك الحساسة وبيانات اسم المستخدم وكلمة المرور الخاصّة بك في مكانٍ واحد أنت لا تأتمنه حقًا؛ فوضع كامل بياناتك مع جوجل سيكون مشكلة بسبب انتهاكات جوجل المعروفة للخصوصية. المزامنة مع فيرفكس أأمن وأكثر ثقةً لكنّها عرضة أيضًا لعددٍ من الهجمات المحلّية على الجهاز فجميع البيانات مخزّنة في مكانٍ واحد وبالتالي يمكن ربط بيانات اسم المستخدم وكلمة المرور مع بيانات تصفّحك الأخرى. لا تضع كلّ البيض في سلّة واحدة. لقد نصحنا في السابق بعدم تخزين كلمات المرور داخل المتصفّح بل استخدام برنامج إدارة كلمات مرور (Password Manager) لفعل ذلك. وهذا هو ما نستحسنه هنا أيضًا؛ إزالة الحاجة لخدمات المزامنة والاكتفاء ببرامج إدارة كلمات المرور مثل Bitwarden لإجراء عمليات تسجيل الدخول والخروج. يمكنك استخدام إضافات خارجية لمزامنة بعض أنواع المحتوى مثل الملاحظات أو العلامات، لكن لا تعتمد على خدمات المزامنة داخل المتصفّح. هكذا تبقى جميع ملفّاتك مخزّنة محليًا على جهازك دون أن تغادره (أو في مكانٍ آخر)، بينما تبقى بياناتك الحساسة منفصلة عن بيانات ومعلومات تصفّحك الأخرى ومؤمنة بصورة منفصلة. ولن تحتاج التعامل لا مع موزيلا ولا مع جوجل. استعمالك لأكثر من خدمة لا علاقة بينها لتخزين أنواع مختلفة من المحتوى هو خيارٌ أفضل من استخدام خدمات المزامنة الموحّدة داخل المتصفّحات. خاتمة كانت هذه هي المعلومات الأساسية التي تحتاج معرفتها وضبطها عند استخدامك متصفّحات الويب الشهيرة. قد يكون الموضوع صعبًا ويتطلب الكثير من العمل للوهلة الأولى عند قراءة هذه الأشياء إلّا أنّها لن تستغرق نصف ساعة أو ساعة بالكثير، وما ستحصل عليه في المقابل من حفاظ خصوصيتك ومنع المتطفلين ومواقع الويب من مراقبة نشاطاتك رائعٌ جدًا مقابل ما صرفته من وقتٍ وجهد. عمليات التعقّب وانتهاكات الخصوصية على الإنترنت كثيرة وشائع وتتطور باستمرار ولا تتوقف، ولذلك ستحتاج متابعة قراءة آخر التطوّرات في المجال لضمان حمايتك بصورة مستمرة. اقرأ أيضًا المقال التالي: الحماية من مواقع الإنترنت في العالم الرقمي المقال السابق: كلمات المرور: كيفية حفظها واستعمالها في العالم الرقمي النسخة الكاملة من كتاب دليل الأمان الرقمي
    1 نقطة
  27. كلمات المرور من أهمّ وسائل حماية بياناتك الحسّاسة على مختلف مواقع الويب. سيشرح هذا الفصل كل ما يتعلّق بكلمات المرور وطرق تقويتها وإدارتها. معايير كلمات المرور القوية عندما تقوم باستعمال كلمة مرور معيّنة مثل "test123" على موقع إنترنت معيّن، فما تقوم به هذه المواقع هو أنّها تأخذها وتحفظها مع بقية بياناتك (اسم المستخدم وعنوان البريد الإلكتروني… إلخ) داخل قاعدة البيانات الخاصّة بها. مواقع الإنترنت الجيّدة - ومعظمها إن لم يكن كلّها - لا تقوم بتخزين كلمات المرور بصورة صرفة (Plain Text)، بل تقوم بتشفيرها أوّلًا وفق خوارزمية معيّنة ثمّ تحفظ النصّ المشفّر (شيء مثل ecd71870d1963316a97e3ac3408c9835ad8cf0f3c1bc703527c30265534f75ae) داخل قاعدة البيانات، أمّا كلمة المرور نفسها فلا تُحفظ أبدًا داخل قاعدة البيانات. يُستعمل هذا الأسلوب لأنّه في حال حصل اختراقٌ من طرف المخترقين لمواقع الإنترنت هذه فحينها لا نريد أن يتمكّن المخترقون من فتح حسابات المستخدمين والوصول إليها ومعرفة كلمات مرورهم. فمن الشائع كذلك أنّ المستخدمين يستخدمون نفس كلمة المرور على أكثر من موقع ويب (وهذا أمرٌ شائع للأسف، لكنّه خاطئٌ بشدّة). وبالتالي تُقلل الأضرار عند حصول هذا النوع من الاختراقات، فهم لن يروا سوى النص المشفّر ولا يمكنهم عمل شيء به. هناك ما يعرف باسم هجمات القوّة الغاشمة (Bruteforce Attack)، وهي هجمات مؤتمتة لتخمين كلمات المرور الخاصّة بك، حيث يبرمج المخترقون برامج وظيفتها تخمين كلمة مرور حساباتك وتجريبها مئات وآلاف وملايين المرّات إلى أن يصلوا إلى النتيجة الصحيحة. وتعمل هذه البرامج عبر تجريب كلّ احتمالات كلمات المرور المكوّنة من 4 أحرف وأرقام مثلًا، ثمّ 5، ثمّ 6… وهكذا إلى أن يصلوا إلى كلمة المرور الصحيحة. ولهذا فإنّ استخدام كلمة مرورٍ طويلة ومعقّدة يزيد من حمايتها بصورة كبيرة. تتضمن مواقع الويب المبنية بصورة جيّدة أنظمة مؤتمتة كذلك للحماية ضدّ هذا النوع من الهجمات، لكن ليس كلّها بالطبع. كلّما زاد طول وتعقيد كلمة المرور، كلّما كان تخمينها عن طريق هذا النوع من الهجمات أصعب ويستغرق وقتًا أطول، وبصورة عامّة فإنّ أي كلمة مرور أطول من 8 أحرف تصبح صعبة جدًا خاصةً إن كانت مليئة بالرموز والأرقام (مثل !@#$%^&* وغيرها). المشكلة الآن هي أنّ الكثير من المستخدمين يستخدمون كلمات مرورٍ بسيطة من السهل معرفتها أو تخمينها، أو يستخدمها مستخدمون آخرون كذلك بكثرة. وهذه مشكلة لأنّ: كلمات المرور القصيرة وغير المعقّدة من السهل كسرها عبر هجمات القوّة الغاشمة، حيث تستغرق وقتًا قصيرًا لتخمينها من طرف البرمجيات. غالبًا ما يقوم المستخدمون الآخرون كذلك باستخدام نفس كلمات المرور القصيرة لحساباتهم، فكلمة مرور مثل "123456" مثلًا ليست محصورة بشخص معيّن هو الوحيد الذي يستخدمها بل غالبًا يتشارك الملايين من الناس - للأسف - باستخدامها. الآن ماذا فعل المخترقون؟ بدلًا من الجلوس وعمل هجمة قوّة وحشية من الصفر في كلّ مرّة، أنشؤوا قواعد بياناتٍ خاصّة بهم لكلمات المرور وما يقابلها من النصوص المشفّرة التي جرّبوها بالفعل. فصاروا الآن غير محتاجين لإعادة العملية بعد أن نجحوا في كسر كلمة "123456"، بل يكفيهم النظر فيما بين أيديهم بالفعل. تُعرف هذه الهجمات باسم هجمات القاموس (Dictionary Attacks). من أجل هذا عليك استخدام كلمات مرورة قوية ومعقّدة لحساباتك المختلفة، وهذه بعض النصائح لذلك: اجعل كلمة المرور أطول من 8 حروف على الأقل. استخدم الأرقام والرموز داخلها. لا تكرر النصوص الفرعية داخلها؛ أي لا تستعمل شيئًا مثل "GGGG1111" فهذه كلمة مرور من الأسهل كسرها. لا تستعمل نفس كلمة المرور على امتداد أكثر من موقع ويب. لا تستعمل نمطًا معيّنًا في كل كلمات مرورك؛ بعض الناس يستعمل نمطًا كأن يكتب اسم موقع الويب الحالي ويتبعه بالرموز والحروف مثل "Twitter_!123" و"Facebook_!123". هذا سيّء لأنّه بمجرّد كسر كلمة مرورك في موقعٍ واحد فسيتمكن المخترقون من التخمين أنّك تستعمل نفس النمط على مواقع الويب الأخرى، فيقومون فقط بتجريب تغيير اسم موقع الإنترنت لعلّه يعمل معهم. الحلّ الأنسب لكلمات المرور في الواقع هو ألّا تكتبها وألّا تحتاج لتذكّرها ولا معرفتها بنفسك؛ هناك إضافات لمتصفّحات الويب وبرامج خاصّة تقوم بإنشاء كلمات مرورٍ عشوائية قوية مثل Passwordgenerator.net، حيث تطلب منها إنشاء كلمة مرور لك وتقوم هي بذلك، فتنسخ النص وتلصقه على موقع الويب عند إنشاء حسابك الجديد أو تغيير كلمة المرور. الآن كيف ستتذكر كلمة المرور المعقّدة هذه وتدخلها كلّ مرّة؟ لن تفعل ذلك، بل ستستخدم برنامجًا لإدارة كلمات المرور، وهو ما سنشرحه في القسم التالي. استخدام برامج إدارة كلمات المرور برامج إدارة المرور هي برامج خاصّة بتنظيم كلمات المرور سواءٌ كانت كبرامج مستقلة أو إضافات لمتصفّحات الويب الشهيرة، بل بعض المتصفّحات تتضمن برامج إدارة كلمات المرور داخلها. تقوم هذه البرامج بـ: إنشاء كلمات المرور العشوائية القوية لك عندما تحتاجها. حفظ كلّ كلمات المرور الخاصّة بك بصورة آمنة. إنشاء ما يُعرف بـ"كلمة المرور الرئيسية" (Master Password) وهي كلمة مرور عليك حفظها وتذكّرها، وبمجرّد إدخالها في البرنامج تفتح لك خزنة كلمات المرور ويصبح بإمكانك رؤيتها وتعديلها، أمّا دون كلمة المرور الرئيسية فلا يمكن لأحدٍ الوصول لكلمات مرورك السابقة. هكذا تحتاج إلى تذكّر كلمة مرور واحدة فقط بدلًا عن جميعها. إدخال كلمات المرور المحفوظة في قاعدة البيانات تلقائيًا في صفحات الويب التي تطلبها عند زيارتك إيّاها داخل المتصفّح. مزامنة كلمات المرور بين مختلف أجهزتك من حواسيب وهواتف محمولة على امتداد مختلف أنظمة التشغيل التي تستعملها. يتضمّن متصفّح فيرفكس بعض المزايا الأساسية لإدارة كلمات المرور. فهو مثلًا سيعرض عليك إنشاء كلمة مرور عشوائية قوية عند تسجيلك في مختلف مواقع الويب لأوّل مرّة تلقائيًا: كما يدعم فيرفكس استخدام كلمة مرور رئيسية من إعداداته: تصبح كلمات مرورك وإعداداتك متوفّرة على مختلف الأجهزة التي تستعملها عبر خدمة Firefox Sync الموجودة داخل المتصفّح. هناك الكثير من برامج إدارة كلمات المرور المستقلة، ولكننا ننصح بالمفتوح المصدر منها فقط: Bitwarden: برنامج إدارة كلمات مرور يعمل على مختلف أنظمة التشغيل والهواتف المحمولة ويدعم المزامنة، كما يمتلك إضافاتٍ لمتصفّحيّ فيرفكس وكروم. يوفّر كامل شِفرتَه البرمجية على شكلٍ مفتوح المصدر. LessPass: إضافة لمتصفّحيّ فيرفكس وكروم، بالإضافة إلى تطبيق أندرويد وتطبيق من سطر الأوامر (CLI). تدعم المزايا الأساسية لإدارة كلمات المرور ويستخدمها الكثيرون. هناك الكثير غيرها لكنّ هذه أشهرها وأفضلها. إننا ننصح بعدم تخزين كلمات المرور داخل المتصفّح وعدم الاعتماد على المتصفّح لإدارة كلمات المرور، بل استخدام أحد برامج إدارة كلمات المرور الشهيرة ثمّ تثبيت الإضافة الخاصّة به على متصفّح الويب ثمّ استعمالهما معًا. وهذا لأنّ متصفّحات الويب تفتقد الكثير من المميزات الأساسية المتعلّقة بإدارة وتأمين كلمات المرور، فيكون استخدام برامج مخصصة لذلك خيارًا أنسب. إذًا دعنا نلخّص الآن طريقة تعاملنا مع بيانات تسجيل الدخول للمواقع المختلفة (اسم المستخدم وكلمة المرور): ستذهب إلى إعدادات متصفّحك وتلغي السماح بحفظ وتذكّر كلمات المرور داخل المتصفّح. ستثبّت برنامج إدارة كلمات مرور مثل Bitwarden وغيره على جهازك، وتستورد بياناتك من متصفّحك الحالي إليه ثم تحذف كامل بياناتك من متصفّحك. لن تتبقى أيّ بيانات تسجيل دخول محفوظة على متصفّحك بل ستُنقل كلّها إلى برنامج إدارة كلمات المرور. ستثبّت إضافة المتصفّح الخاصّة ببرنامج إدارة كلمات المرور ذاك على متصفّحك (Integration). ستقوم بإدخال كلمة مرور رئيسية (Master Password) في كلّ مرّة تفتح فيها المتصفّح، وهذا لإلغاء قفل حسابك وبياناتك. في كلّ مرّة تريد تسجيل الدخول إلى أحد مواقع الإنترنت (فيس بوك مثلًا) ستقوم بالضغط على أيقونة الإضافة واختيار اسم المستخدم وكلمة المرور الخاصّين بك، ثم تسجّل الدخول. عندما تريد التسجيل في مواقع جديدة فستستعمل ميّزة إنشاء كلمات المرور العشوائية الموجودة ضمن تلك الإضافة التابعة لبرنامج إدارة كلمات المرور بدلًا من أن تفكّر بها بنفسك. عليك كذلك تغيير كلمات مرورك القديمة إلى كلمات مرور عشوائية جديدة حتّى أنت لا تعرفها، ثمّ حفظها داخل برنامج إدارة كلمات المرور. (يستثنى من ذلك بريدك الإلكتروني الرئيسي، عليك دومًا أن تعرف ما هي كلمة مرور بريدك الإلكتروني وهذا لتتمكن من استرجاع بقية حساباتك المربوطة به في حال حصلت مشكلة). أنا الآن مثلًا لا أعرف ما هي كلمة المرور الخاصّة بي على فيس بوك أو تويتر، لكن هذه ليست مشكلة لأنّها مخزّنة داخل برنامج إدارة كلمات المرور وأنا أحفظ كلمة المرور الرئيسية لذاك البرنامج، وبالتالي يمكنني جلب كلمة المرور التي أريدها في أيّ وقت. حتّى لو حذفت متصفّحي أو انتقلت إلى نظام تشغيلٍ آخر فكلّ ما عليّ فعله هو تثبيت إضافة متصفّح برنامج إدارة كلمات المرور، وبعدها ستصبح كامل بيانات تسجيل الدخول الخاصّة بي لكلّ المواقع جاهزة للاستخدام. انظر مثلًا إلى برنامج Bitwarden (مفتوح المصدر)، بمجرّد تثبيتي لإضافته على متصفّح الويب الخاصّ بي وبمجرّد زيارة أحد مواقع الويب التي أمتلك حسابًا عليها فسيعرض عليّ إمكانية تسجيل الدخول بحسابي ذاك بنقرة زرّ واحدة (يمكن كذلك نسخ اسم المستخدم وكلمة المرور وعرضهما بصورة منفصلة): يمكنك كذلك تثبيت برامج إدارة كلمات المرور تلك على الهواتف المحمولة (أندرويد وiOS) لاستعمالها، حيث ستنسخ كلمة المرور من البرنامج وتلصقها في مربّع الإدخال داخل المتصفّح في كلّ مرّة تريد فتح أحد حساباتك عليها. متابعات عمليات اختراق البيانات وتغيير كلمات مرورك تحصل الكثير من عمليات اختراق المنصّات الإلكترونية ومواقع الويب كلّ شهر، ومن الضروري أن تبقى على اطّلاعٍ لتعلم هل أنت مشمول بهذه الاختراقات أم لا، وهل سرّبت بياناتك ومعلوماتك معها أم لا. إليك الخدمات التالية التي يمكنها أن تنبّهك عن ذلك: Firefox Monitor: فقط أدخل بريدك الإلكتروني وستخبرك الخدمة ما إذا كنتَ مشمولًا بأحد الاختراقات التي حصلت مسبقًا. Have I Been Pwned: خدمة أخرى مشابهة مفتوحة المصدر لفعل نفس الشيء. الاستيثاق الثنائي الاستيثاق الثنائي (2-Factor Authentication) هو عملية طلب المواقع الإلكترونية لوسيلة تحقق من هويّة المستخدم أكثر من مجرّد كلمة المرور؛ إمّا عبر شِفرة قصيرة تصله عبر رسالة نصّية (SMS) إلى رقم هاتفه المسجّل بالحساب، أو إلى بريده الإلكتروني أو وسيلة أخرى شبيهة. فيطلب منه موقع الويب تلك الوسيلة بعد أن يقوم بإدخال كلمة المرور الصحيحة، ولا يكتفي بكلمة المرور لفتح الحساب. الاستيثاق الثنائي مفيد خصوصًا في التعاملات البنكية والمالية، وهذا لأنّك لا تريد لأحدهم تدمير حياتك فقط لأنّه امتلك كلمة المرور الخاصّة بك. أشهر طريقة حالية للاستيثاق الثنائي هي عبر استخدام تطبيقات خاصّة بذلك على الهواتف المحمولة، حيث تقوم أوّلًا بإضافة الخدمات التي تستعملها إلى هذه التطبيقات، ثمّ عندما تريد تسجيل الدخول إليها، تقوم بإدخال رمز الأمان (Security Code) الظاهر على هذه التطبيقات والذي يتغير كلّ 30 ثانية إلى موقع الويب. هناك عدّة تطبيقات للاستيثاق الثنائي على الهواتف، أشهرها Google Authenticator ولكننا لا ننصح به بل ننصح بـFreeOTP وهذا لأنّ هذا الأخير مفتوح المصدر ومُطَوّر من طرف شرك ريدهات (Red Hat) المعروفة بتطوير البرمجيات المفتوحة المصدر للشركات. لا تدعم كلّ مواقع الويب خاصّية الاستيثاق الثنائي، لكن تدعمها تلك الشهيرة منها مثل فيس بوك وتويتر وجوجل وكلّ التطبيقات المالية. يمكنك الوصول إلى الميّزة من الإعدادات --> الأمان --> الاستيثاق الثنائي على تويتر مثلًا. سيطلب منك الموقع أن تمسح صورة الرمز عبر تطبيق الاستيثاق الخاصّ بك: بعد أن تفعل ذلك، سيعطيك الموقع ما يُعرف برمز الاستعادة (Backup Code) ومن المهم جدًا أن تحتفظ به وألّا تنساه، لأنّه في حال سُرق منك هاتفك المحمول أو حُذف التطبيق بالخطأ فقد لا تتمكن من فتح حسابك مرةً أخرى من دونه: ثم سيُضاف رمز الاستيثاق إلى التطبيق الخاصّ بك: بخصوص رموز الاستعادة (Backup Codes) فإننا ننصح بطباعتها على ورقة ثمّ حذفها من الحاسوب بالكامل وعدم تخزينها في أي مكانٍ رقمي، وهذا لأنّه ستسمح باختراق حساباتك بمجرّد الوصول إليها ومن غير الآمن تخزينها رقميًا. هذا فضلًا عن أنك قد تحتاجها في حال السفر أو انقطاع الكهرباء. ختاما كلمات المرور هي الحاجز الأمني الأساسي الذي يمنع المتطفّلين من الولوج إلى حساباتك على مختلف المواقع والخدمات التي تستعملها، لذا لا تتردد بتاتًا بصرف القليل من وقتك وجهدك على تأمينها بصورة قوّية قبل أن تتابع روتينك اليومي من الاستعمال. فيكفي أن يُخترق حسابٌ واحدٌ من الحسابات الأساسية التي تستعملها لتجد نفسك في الكثير من وجع الرأس بل وعرضةً لفقد المال والملفّات والبيانات المهمّة. اقرأ أيضًا المقال التالي: تأمين متصفحات الويب في العالم الرقمي المقال السابق: التشفير واستعمالاته في العالم الرقمي النسخة الكاملة من كتاب دليل الأمان الرقمي
    1 نقطة
  28. شهادة A+ وهي إحدى شهادات CompTIA التي تقدم العديد من الشهادات العلمية لكل من يهتم بالعمل في المجال التقني وخصوصًا مهنة الدعم الفني IT Support، وللحصول عليها يجب أولاً أن تجتاز امتحانين CompTIA A+ 220-901 و CompTIA A+ 220-902 يركز الامتحان الأول على فهم المصطلحات والتعديل على عتاد الحسوب hardware، واستكشاف الأخطاء وإصلاحها، ويحتوي على الفصول الآتية: العتاد Hardware الشبكات Networking الأجهزة المحمولة Mobile Devices استكشاف الأخطاء وإصلاحها Troubleshooting‎ يعتمد الامتحان الثاني على الامتحان الأول، ويركز على التعامل مع مختلف أنظمة التشغيل وتثبيتها وضبط إعداداتها، ويحتوي على الفصول الآتية: نظام التشغيل ويندوز أنظمة تشغيل وتقنيات أخرى الأمن والحماية Security استكشاف الأخطاء وإصلاحها Troubleshooting‎ إجراءات عمليات السلامة Operational Procedures يجب أن تحضر نفسك جيدًا قبل أن تخوض الامتحان وتركز جيدًا على مراجعة الكتب الإلكترونية وحل النماذج الامتحانية (يمكنك أن تحصل عليها عند التسجيل للامتحان مقابل مبلغ إضافي)، وتبلغ التكلفة 205 دولار أمريكي لكل امتحان أي تبلغ تكلفة الشهادة 410 دولار أمريكي، ويتوفر الامتحان بأكثر من لغة (ليس من بينها العربية)، عدد الأسئلة هو 90 سؤالا ومدَّة الاختبار 90 دقيقة، ويجب أن تحصل على 675 من 900 ودرجة في الامتحان الأول و700 من 900 درجة في الامتحان الثاني. يمكنك أن تقرأ أكثر حول هذه الشهادة وتفاصيلها وكيفية الحجز من هذه المقالة: مدخل إلى شهادة +CompTIA A، كما ستساعدك سلسلة الدروس الموجودة في الأكاديمية لفهم الأساسيات
    1 نقطة
  29. منذ زمن سحيق، كانت الذاكرةُ أكثر وظيفة نحتاجها ونعتمد عليها في الحاسوب. ورغم اختلاف التقنيات وأساليب التنفيذ الكامنة وراءها، إلّا أنّ معظم الحواسيب تأتي بالعتاد الضروريّ لمعالجة المعلومات وحفظها بأمان لاستخدامها في المستقبل متى احتجنا لها. لقد صار من المستحيل في عالمنا الحديث تخيل أيّ عمل لا يستفيد من هذه القدرة في الأجهزة، سواء كانت خواديم أو حواسيب شخصية أو كفّيّة. تُعالَج البيانات وتُسجَّل وتُسترجَع مع كل عملية، وفي كل مكان من الألعاب إلى الأدوات المتعلقة بالأعمال، بما فيها المواقع. أنظمة إدارة قواعد البيانات (DataBase Management Systems – DBMS) هي برمجيات عالية المستوى تعمل مع واجهات برمجة تطبيقات (APIs) أدنى منها في المستوى، وتلك الواجهات بدورها تهتم بهذه العمليات. لقد تم تطوير العديد من أنظمة إدارة قواعد البيانات (كقواعد البيانات العلائقيّة relational databases، وnoSQL، وغيرها) لعقود من الزمن للمساعدة على حلّ المشكلات المختلفة، إضافة إلى برامج لها (مثل MySQL ,PostgreSQL ,MongoDB ,Redis، إلخ). سنقوم في هذا المقال بالمرور على أساسيّات قواعد البيانات وأنظمة إدارة قواعد البيانات. وسنتعرف من خلالها على المنطق الذي تعمل به قواعد البيانات المختلفة، وكيفية التفرقة بينها. أنظمة إدارة قواعد البياناتإن مفهوم نظام إدارة قاعدة البيانات مظلّةٌ تندرج تحتها كلّ الأدوات المختلفة أنواعها (كبرامج الحاسوب والمكتبات المضمّنة)، والتي غالبًا تعمل بطرق مختلفة وفريدة جدًّا. تتعامل هذه التطبيقات مع مجموعات من المعلومات، أو تساعد بكثرة في التعامل معها. وحيث أن المعلومات (أو البيانات) يُمكِن إن تأتي بأشكال وأحجام مختلفة، فقد تم تطوير العشرات من أنظمة قواعد البيانات، ومعها أعداد هائلة من تطبيقات قواعد البيانات منذ بداية النصف الثاني من القرن الحادي والعشرين، وذلك من أجل تلبية الاحتياجات الحوسبيّة والبرمجية المختلفة. تُبنى أنظمة إدارة قواعد البيانات على نماذج لقواعد البيانات: وهي بُنى محدّدة للتعامل مع البيانات. وكل تطبيق ونظام إدارة محتوى جديد أنشئ لتطبيق أساليبها يعمل بطريقة مختلفة فيما يتعلق بالتعريفات وعمليات التخزين والاسترجاع للمعلومات المُعطاة. ورغم أنّ هناك عددًا كبيرًا من الحلول التي تُنشئ أنظمة إدارة قواعد بيانات مختلفة، إلّا أنّ كلّ مدة زمنية تضمّنت خيارات محدودة صارت شائعة جدًّا وبقيت قيد الاستخدام لمدة أطول، والغالب أنّ أكثرها هيمنة على هذه الساحة خلال العقدين الأخيرين (وربما أكثر من ذلك) هي أنظمة إدارة قواعد البيانات العلائقيّة (Relational Database Management Systems – RDBMS). أنواع قواعد البياناتيستخدم كلُّ نظام إدارة بياناتٍ نموذجًا لقواعد البيانات لترتيب البيانات التي يديرها منطقيًّا. هذه النماذج (أو الأنواع) هي الخطوة الأولى والمحدّد الأهم لكيفية عمل تطبيق قواعد البيانات وكيفية تعامله مع المعلومات وتصرفه بها. هناك بعض الأنواع المختلفة لنماذج لقواعد البيانات التي تعرض بوضوع ودقّة معنى هيكلة البيانات، والغالب أن أكثر هذه الأنواع شهرةً قواعدُ البيانات العلائقيّة. ورغم أنّ النموذج العلائقيّ وقواعد البيانات العلائقيّة (relational databases) مرنة وقويّة للغاية –عندما يعلم المبرمج كيف يستخدمها–، إلّا أنّ هناك بعض المشكلات التي واجهات عديدين، وبعض المزايا التي لم تقدمها هذه الحلول. لقد بدأت حديثًا مجموعة من التطبيقات والأنظمة المختلفة المدعوّة بقواعد بيانات NoSQL بالاشتهار بسرعة كبيرة، والتي قدمت وعودًا لحل هذه المشكلات وتقديم بعض الوظائف المثيرة للاهتمام بشدّة. بالتخلص من البيانات المهيكلة بطريقة متصلّبة (بإبقاء النمط المعرّف في النموذج العلائقيّ (relational model))، تعمل هذه الأنظمة بتقديم طريقة حرّة أكثر في التعامل مع المعلومات، وبهذا توفّر سهولة ومرونة عاليتين جدًّا؛ رغم أنّها تأتي بمشاكل خاصة بها –والتي تكون بعضها جدّيّة– فيما يتعلق بطبيعة البيانات الهامّة والتي لا غنى عنها. النموذج العلائقيّيقدّم النظام العلائقيّ الذي ظهر في تسعينات القرن الماضي طريقة مناسبة للرياضيات في هيكلة وحفظ واستخدام البيانات. توسّع هذه الطريقة من التصاميم القديمة، كالنموذج المسطّح (flat)، والشبكيّ، وغيرها، وذلك بتقديمها مفهوم "العلاقات". تقدّم العلاقات فوائد تتعلق بتجميع البيانات كمجموعات مقيّدة، تربط فيها جداول البيانات –المحتوية على معلومات بطريقة منظمة (كاسم شخص وعنوانه مثلاً)– كل المدخلات بإعطاء قيم للصفات (كرقم هوية الشخص مثلًا). وبفضل عقود من البحث والتطوير، تعمل أنظمة قواعد البيانات التي تستخدم النموذج العلائقيّ بكفاءة وموثوقيّة عاليتين جدًّا. أضف إلى ذلك الخبرة الطويلة للمبرمجين ومديري قواعد البيانات في التعامل مع هذه الأدوات؛ لقد أدّى هذا إلى أن يصبح استخدام تطبيقات قواعد البيانات العلائقيّة الخيار الأمثل للتطبيقات ذات المهام الحرجة، والتي لا يمكنها احتمال فقدان أيّة بيانات تحت أيّ ظرف، وخاصة كنتيجة لخلل ما أو لطبيعة التطبيق نفسه الذي قد يكون أكثر عرضة للأخطاء. ورغم طبيعتها الصارمة المتعلقة بتشكيل والتعامل مع البيانات، يمكن لقواعد البيانات العلائقيّة أن تكون مرنة للغاية وأن تقدم الكثير، وذلك بتقديم قدر ضئيل من المجهود. التوجّه عديم النموذج (Model-less) أو NoSQLتعتمد طريقة NoSQL في هيكلة البيانات على التخلص من هذه القيود، حيث تحرر أساليب حفظ، واستعلام، واستخدام المعلومات. تسعى قواعد بيانات NoSQL إلى التخلص من العلائقات المعقدة، وتقدم أنواع عديدة من الطرق للحفاظ على البيانات والعمل عليها لحالات استخدام معينة بكفاءة (كتخزين مستندات كاملة النصوص)، وذلك من خلال استخدامها توجّها غير منظم (أو الهيكلة على الطريق / أثناء العمل). أنظمة إدارة قواعد بيانات شائعةهدفنا في هذا المقال هو أن نقدم لك نماذج عن بعض أشهر حلول قواعد البيانات وأكثرها استخدامًا. ورغم صعوبة الوصول إلى نتيجة بخصوص نسبة الاستخدام، يمكننا بوضوح افتراض أنّه بالنسبة لغالب الناس، تقع الاختيارات بين محرّكات قواعد البيانات العلائقيّة، أو محرك NoSQL أحدث. لكن قبل البدء بشرح الفروقات بين التطبيقات المختلفة لكل منهما، دعنا نرى ما يجري خلف الستار. أنظمة إدارة قواعد البيانات العلائقيّةلقد حصلت أنظمة إدارة قواعد البيانات العلائقيّة على اسمها من النموذج الذي تعتمد عليه، وهو النموذج العلائقيّ الذي ناقشناه أعلاه. إنّ هذه الأنظمة –الآن، وستبقى لمدة من الزمن في المستقبل– الخيار المفضّل للحفاظ على البيانات موثوقة وآمنة؛ وهي كذلك كفؤة. تتطلب أنظمة إدارة قواعد البيانات العلائقيّة مخططات معرفة ومحددة جيدًا –ولا يجب أن يختلط الأمر مع تعريف PostgreSQL الخاص بهذه الأنظمة– لقبول هذه البيانات. تشكّل هذه الهيئات التي يحددها المستخدم كيفية حفظ واستخدام البيانات. إنّ هذه المخططات شبيهة جدًّا بالجداول، وفيها أعمدة تمثّل عدد ونوع المعلومات التي تنتمي لكل سجل، والصفوف التي تمثّل المدخلات. من أنظمة إدارة قواعد البيانات الشائعة نذكر: SQLite: نظام إدارة قواعد بيانات علائقيّة مضمّن قويّ جدًّا.MySQL: نظام إدارة قواعد بيانات علائقيّة الأكثر شهرة والشائع استخدامه.PostgreSQL: أكثر نظام إدارة قواعد بيانات علائقيّة كيانيّ (objective-RDBMS) متقدم وهو متوافق مع SQL ومفتوح المصدر.ملاحظة: لمعرفة المزيد عن أنظمة إدارة قواعد بيانات NoSQL، راجع المقالة التالية عن الموضوع: A Comparison Of NoSQL Database Management Systems. أنظمة قواعد بيانات NoSQL (أو NewSQL)لا تأتي أنظمة قواعد بيانات NoSQL بنموذج كالمستخدم في (أو الذي تحتاجه) الحلول العلائقيّة المهيكلة. هناك العديد من التطبيقات، وكلّ منها تعمل بطريقة مختلفة كليًّا، وتخدم احتياجات محدّدة. هذه الحلول عديمة المخططات (schema-less) إمّا تسمح تشكيلات غير محدودة للمدخلات، أو –على العكس– بسيطة جدًّا ولكنها كفؤة للغاية كمخازن قيم معتمد على المفاتيح (key based value stores) مفيدة. على خلاف قواعد البيانات العلائقيّة التقليديّة، يمكن تجميع مجموعات من البينات معًا باستخدام قواعد بيانات NoSQL، كـ MongoDB مثلًا. تُبقي مخازن المستندات هذه كل قطعة من البيانات مع بعضها كمجموعة واحدة (أي كملف) في قاعدة البيانات. يمكن تمثيل هذه المستندات ككيانات بيانات منفردة، مثلها في ذلك كمثل JSON، ومع ذلك تبقى كراسات، وذلك يعتمد على خصائصها. ليس لقواعد بيانات NoSQL طريقة موحدة للاستعلام عن البيانات (مثل SQL لقواعد البيانات العلائقيّة) ويقدم كلّ من الحلول طريقته الخاصّة للاستعلام. ملاحظة: لمعرفة المزيد عن أنظمة إدارة قواعد البيانات العلائقيّة، ألق نظرة على هذه المقالة المتعلقة بالموضوع: A Comparison Of Relational Database Management Systems. مقارنة بين أنظمة إدارة قواعد بيانات SQL و NoSQLمن أجل الوصول إلى نتيجة بسيطة ومفهومة، لنحلّل أولًا الاختلافات بين أنظمة إدارة قواعد البيانات: هيكلية ونوع البيانات المحتفظ بها:تتطلب قواعد البيانات العلائقيّة SQL هيكلة ذات خصائص محدّدة للحفاظ على البيانات، على خلاف قواعد بيانات NoSQL التي تسمح بعمليات انسياب حُرّ (free-flow operations). الاستعلام: وبغضّ النظر عن تراخيصها، تستخدم كلّ قواعد البيانات العلائقيّة معيار SQL إلى حدّ ما، ولهذا يمكن الاستعلام فيها بلغة SQL (أي Structured Query Language). أما قواعد بيانات NoSQL فلا تستخدم طريقة محدّدة للعمل على البيانات التي تديرها. التحجيم: يمكن تحجيم كلي الحلين عموديًّا (أي بزيادة موارد النظام). لكن لكون حلول NoSQL تطبيقات أحدث (وأبسط)، فهذا يجعلها تقدّم وسائل أسهل بكثير لتحجيمها أفقيًّا (أي بإنشاء شبكة عنقودية cluster من أجهزة متعدّدة). المتانة Reliability: عندما يتعلق الأمر بالمتانة والثقة الآمنة بالقَيد المنفّذ، تبقى قواعد بيانات SQL الخيار الأفضل. الدعم: لأنظمة إدارة قواعد البيانات العلائقيّة تاريخ طويل استمر لعقود من الزمن. إنها شائعة جدًّا، ومن السهل إيجاد دعم سواء مجانيّ أو مدفوع. إذا حدثت مشكلة، فمن الأسهل حلّها عليها من قواعد بيانات NoSQL التي شاعت حديثًا، وخاصة إذا كان الحلّ موضع السؤال ذا طبيعة معقّدة (مثل MongoDB). احتياجات حفظ واستعلام البيانات المعقدة: إنّ قواعد البيانات العلائقيّة بطبيعتها الخيار الأمثل لاحتياجات حفظ البيانات والاستعلامات المعقّدة. إنها أكثر كفاءة وتتفوق في هذا المجال. ترجمة -وبتصرّف- للمقال Understanding SQL And NoSQL Databases And Different Database Models لصاحبه O.S. Tezer.
    1 نقطة
    لكل من مرّ على صفحتي ولكل من قام بتحميل نسخته من الكتاب جزيل شكري وامتناني، واسأل الله أن يوفقكم وييسر لكم الخير
    1 نقطة
  30. تتوفّر على توزيعات لينكس برامج تحظُر إنشاء كلمات سر يسهُل تخمينها؛ فالوصول إلى الكثير من بيانات المستخدم وبرامجه يتطلّب تجاوز مرحلة إدخال كلمة السرّ ، الأمر الذي يجعل من كلمات السر نقطة حرجة في سبيل تأمين النظام والمستخدم على حدّ السواء ويجب بالتالي الحرص دائما على أن تكون محدَّثة. توجد الكثير من طرق تعمية البيانات ولكلّ منها خصوصيّاته. تستخدم أغلب توزيعات لينكس خوارزميّة تعمية تُسمّى معيار تعميّة البيانات Data Encryption Standard, DES لتعميّة كلمات السّر. تُخزّن كلمات السرّ المعمّاة في ملف etc/passwd/ أو etc/shadow/. عندما يحاول المستخدم الولوج إلى النظام فإن كلمة السّر التي يُدخِلها تُعمَّى ثم تقارن بحقل كلمة السّر المعمّاة في الملف، فإن حصل تطابق فهذا يعني أنها نفس كلمة السّر وبالتالي يُسمح له بالولوج. تستخدم أغلب توزيعات لينكس نسخة من DES لا تعمل إلا في اتجاه واحد؛ بمعنى أنه يمكن استخدامها لتعميّة كلمة سر ولكن لا يمكن استخدامها لفك تعميّة كلمات السر في ملفّي etc/passwd/ وetc/shadow/. يمكن لبرامج هجمات القوة العمياء Brute force attacks مثل John the Ripper وCrack تخمين كلمات السر التي لا تحترم حدًّا أدنى من العشوائية؛ وبإمكان مديري النّظم استخدامها لصالحهم في طريقة استباقية بتنفيذها على كلمات سرّ مستخدميهم للعثور على كلمات السّر غير الآمنة ثم الطلب من هؤلاء تغييرها إلى أخرى آمَن. التعمية بالمفاتيح العمومية تستخدم التعمية بالمفاتيح العمومية Public-Key Cryptography مفتاحا (سلسلة محارف) للتعمية وآخر لفكّها، على عكس طرق تعمية أخرى تستخدم نفس المفتاح للمهمتيْن. يهدف استخدام مفتاح خاصّ للتعميّة (المفتاح العموميّ) وآخر لفكّها (المفتاح الخصوصيّ) إلى تجاوز ضرورة تأمين نقل المفتاح الوحيد أثناء تبادل الرسائل المعمّاة. يتوفّر المفتاح العمومي لكلّ شخص للجميع دون استثناء بينما يقى المفتاح الخصوصي سرًّا خاصًّا به. مثلا، عندما يريد محمّد إرسال بريد معمّى إلى عمر فإنه يستخدم المفتاح العموميّ لعمر لتعمية البريد، عند وصول البريد إلى عمر فإنه يستخدم مفتاحه الخصوصي الذي لا يعرفه غيره لفك تعميّة الرسالة والاطّلاع عليها. بهذه الطريقة لن يعرف فحوى الرسالة غيرهما، محمّد لأنه كتب الأصل غير المعمَّى، وعمر لأنه الوحيد الذي يمكنه فك تعميتها. برنامج PGP يتبنّى برنامج PGP (اختصار لـ Pretty Good Privacy) مبدأ التعمية بالمفاتيح العمومية ويمكن استخدامه لتوقيع البيانات وتعميّتها: التوقيع للتأكد من المصدر والحؤول دون انتحال الشخصيّة، والتعمية للحفاظ على خصوصية البيانات. يجب الانتباه قبل استخدام البرنامج إلى التقييدات القانونية في استخدامه. يُحظَر في بعض الدوّل توجيه رسائل بتعميّة قويّة إلى خارج البلد. بروتوكول TLS يُستخدَم بروتوكول TLS (والإصدار السابق منه SSL) كثيرا لتأمين الاتصالات في شبكة حواسيب. يهدف البروتوكول إلى الحفاظ على خصوصية البيانات المنقولة عبر الاتصال بتعميتها، الاستيثاق من هويّات المتخاطبين باستخدام تعمية بالمفاتيح العمومية والتأكد من سلامة البيانات عن طريق جمع تحقق Checksum لكلّ حزمة بيانات. التنفيذ الأكثر شهرة على أنظمة لينكس لهذا المعيار هو مكتبة OpenSSL التي تدعم خوارزميات تعمية من بينها DES، Blowfish وIDEA. بروتوكول HTTPS وهو تطوير لبروتوكول HTTP بتضمينه داخل اتّصال يؤمّنه بروتوكول TLS (أو SSL). الأغراض الأساسية من استخدام HTTPS على مواقع الويب هي الاستيثاق، حماية الخصوصية والتحقق من سلامة البيانات المتبادلة. بروتوكول S/MIME يأتي الاسم اختصارا لـ Secure Multipurpose Internet Mail Extension (امتداد البريد الإلكتروني الآمن متعدّد الأغراض)، وهو معيار مفتوح يعتمد على التعميّة بالمفاتيح العمومية لتأمين البريد الإلكتروني وغيره من أنواع المراسلات على الشبكة. الشبكات الخاصة الافتراضية Virtual Private Network توجد تنفيذات عدّة لمعيار بروتوكول الإنترنت الآمن على لينكس. معيار IPSEC (اختصار لـ Internet Protocol Security؛ أمان بروتوكول الإنترنت) هو مجهود تقف خلفه قوة مهمات هندسة الإنتنرت IETF ويهدف إلى إنشاء اتصالات معمّاة على مستوى الشبكة (الطبقة الثالثة) وتوفير سبُل للتحقق من سلامة البيانات، التحكم في الوصول، الاستيثاق والسريّة. من الأمثلة على تطبيقات هذا البروتوكول في لينكس LibreSwan الذي يسمح للمستخدم ببناء نفق اتصالات آمن عبر شبكات غير موثوقة. يُعمَّى كل ما يمر إلى الشبكة غير الموثوقة قبل إرساله ليعمل الطرف الآخر عند استلامه على فك التعمية، تنتُج عن هذه العملية شبكة خاصّة افتراضية Virtual Private Network, VPN والتي هي شبكة اتصالات خاصّة على الرغم من أن الأجهزة فيها تتصل عن طريق شبكة غير موثوقة. لا تقتصر طُرُق إنشاء شبكات خاصة افتراضية في لينكس على IPSEC، بل توجد برامج خاصّة لهذا الغرض مثل OpenVPN التي تستخدم كثيرا مكتبات OpenSSL. بروتوكول SSH توجد عدّة حزم برمجية على لينكس لاستخدام SSH أبرزها OpenSSH. صُمِّم بروتوكول SSH ليحلّ مكان بروتوكولات الاتصال عن بعد غير الآمنة مثل rlogin، rsh وrexecالتي كانت ترسل البيانات دون احتياطات أمنية تُذكر. تعتمد حزمة برامج OpenSSH على التعمية بالمفاتيح العمومية لتعميّة الاتصالات بين مضيفين Hosts، وللاستيثاق من المستخدمين. كما يمكن استخدامها للولوج إلى خادوم بعيد أو لنسخ البيانات بين مضيفين مع الحماية من هجمات رجل في الوسط Man in the middle وهجمات أخرى. وحدات الاستيثاق سريعة التفعيل Pluggable Authentication Modules تأتي الإصدارات الحديثة من توزيعات لينكس محمّلة بآلية استيثاق موحدة تُسمّى Pluggable Authentication Modules, PAM تسمح للتطبيقات التي تعمل في فضاء المستخدم بتغيير متطلبات الاستيثاق الخاصّة بها وطريقته حسب الحاجة. يمكن باستخدام هذه الآلية من بين أمور أخرى: تحديد أمكنة وأوقات معيّنة لمستخدمين لا يمكنهم الولوج خارجها إلى النظام. تعيين سقف لاستخدام الموارد لكل مستخدِم. استعمال خوارزميات تعميّة أخرى غير DES لجعل فك التعمية بهجمات القوة العمياء أصعب. تفعيل كلمات السّر في ملف shadow حسب الحاجة. ملف Shadow لتأمين كلمات سر المستخدمين تستخدم الإصدارات الحديثة من توزيعات لينكس ملف etc/shadow/ لجعل كلمات سر المستخدم المعمّاة في مأمن من بقية المستخدمين على نفس النظام. كانت كلمات السر المعمّاة تخزّن في الإصدارات القديمة داخل ملف etc/passwd/ مبدئيا، ويمكن لجميع المستخدمين رؤيتها وبالتالي تنفيذ هجمات القوة العمياء عليها لمحاولة فك تعميتها. يعني اللجوء إلى ملف etc/shadow/ أن المستخدمين الإداريين فقط هم من يمكنهم رؤية كلمات السّر المعمّاة. التأكد من أمان كلمات مرور المستخدمين يحتاج مدير النظام أحيانا إلى التأكد من أن كلمات مرور المستخدمين جيّدة كفاية، لكي لا تكون بابا قد يؤدي فتحه إلى مشاكل أمنية أخرى، تُستخدم برامج مثل Jone the Ripper وCrack لهذا الغرض. تقوم فكرة هذه البرامج على توليد كلمات مرور معمّاة إما حسب نمط معرَّف مسبقا أو بالاعتماد على قاموس ألفاظ ثم مقارنتها بكلمات المرور المعمّاة الخاصّة بالمستخدمين، فإن وُجد تطابق عُرِفت كلمة السر. الجدير بالذكر أن مثل هذه البرامج تأخذ الكثير من الوقت وموارد الجهاز للعمل؛ وكلما كانت كلمات السّر معقدة كل ما كانت المهمة أصعب. في سيناريو هجمة حقيقية سيحتاج المخترق أولا إلى الحصول على ملف كلمات سر المستخدمين وهو أمر يحتاج لثغرات أمنية قد لا تكون موجودة؛ إلا أن الحيطة واجبة على الدوام. ترجمة - وبتصرّف - لمقال Encryption Methods in Linux لصاحبه M.el Khamlichi. حقوق الصورة البارزة: Designed by Freepik.
    1 نقطة
  31. في سلسلة من عدة أجزاء سنناقش موضوعًا نظريًّا يُعتبر من أساسيّات هندسة البرامج، وهو أنماط التصميم (Design Patterns)، وسنعتمد لغة JavaScript في نقاشنا لتصاعد شعبيّتها ومرونتها التي تسمح لنا ببناء مشاريعنا وفق أنماط متنوّعة مما سيُسهّل علينا شرح موضوع السّلسلة ما هي أنماط التصميم؟عندما تبدأ بتعلّم البرمجة، فغالبًا ما يكون اهتمامك مُنصبًّا على أن يكون البرنامج قادرًا على إنجاز المهمّة الّتي تريدها قبل كل شيء، أمّا بعد أن تتطوّر مهاراتك، فسينتقل اهتمامك إلى مواضيع أكثر عمقًا، وستبدأ بطرح بعض الأسئلة على نفسك، حتّى قبل أن تبدأ بكتابة البرنامج، من هذه الأسئلة: كيف أبني برنامجي بحيث يسهُل تحسينه فيما بعد؟كيف أتأكّد أن برنامجي سيبقى يؤدّي ما يُتوقّع منه حتّى وإن قمت بتعديل أجزاء منه بعد زيادة تعقيده؟كيف أبني برنامجي بحيث أستطيع إعادة استخدام أجزاء منه في برامج أخرى في المستقبل؟كيف أجعل برنامجي يستخدم أجزاء من مشاريع أخرى كتبها مطوّرون آخرون؟الإجابة على هذه الأسئلة هي واحدة دومًا: اختر نمط التصميم المناسب لمشروعك. لم نُعرِّف بعدُ مفهوم نمط التّصميم، لكنّنا بدأنا نُكوّن فكرة عنه. نمط التّصميم هو وصف لطريقة مُعيّنة في حلّ مشكلة برمجيّة ما، فالعديد من المُشكلات البرمجيّة يمكن حلّها بأكثر من طريقة، ولكلّ طريقة مساوئ ومحاسن، وبعضها قد يكون أكثر مُناسبةً للمشروع الحاليّ، واختيار نمط التصميم المُناسب سيضمن استمرار تطوّر المشروع بسهولة وربّما يُفيدنا في عزل أجزاء منه لإعادة استخدامها في مشاريع أخرى بحيث لا نُضطَّر لكتابتها مرارًا. أغلب الظنّ أنّك تستخدم واحدًا أو أكثر من أنماط التّصميم وإن لم تعرف ما هي أنماط التّصميم بمعناها النّظريّ، فإنشاء أصناف (classes) لمفاهيم مُجرّدة في اللّغات الكائنيّة التّوجّه (object-oriented) وإنشاء نُسخ عنها (instances) وتوزيع هذه الأصناف في ملفّات مستقلّة، هو في الواقع نمط من أنماط التّصميم. يُرجى الانتباه إلى أن التّطبيق العمليّ لأنماط التّصميم يفرض على المطوّر دمج أكثر من نمط معًا وشرحنا لأحدها لا يمكن أن يخلو من استخدام لأنماط أخرى كما سيتبيّن لك بعد انتهاء السّلسلة، إذ يمكن مثلًا إنشاء وحدة (module) تُصدِّر صنفًا (class) وهذا يعني أنّنا استخدمنا نمطين اثنين (نمط الوحدات، ونمط مُشيّد الكائنات constructor) في وقت واحد. نمط الوحدات (Module Pattern)بغرض تبسيط الأمور، سنبدأ بتوضيح أحد أنماط التّصميم الشّائعة في JavaScript، وهو ما يُعرف بنمط الوحدات (module pattern)، والتي ازدادت شعبيّة بعد ظهور Node.js وما أحدثته من تأثير انتقل حتّى إلى أساليب بناء وتصميم المكتبات البرمجيّة الّتي تستهدف المُتصفّحات. الوحدات هي أجزاء مُستقلّة ومعزولة من النّص البرمجيّ للمشروع توفّر مهمّة مُعيّنة، الأمر الّذي يجعل الهدف من كل وحدة واضحًا ومحدّدًا ويُجنّب المشروع الفوضى التي تنتج عن كتابة كامل النّصّ البرمجيّ في كتلة واحدة متداخلة يصعب معها تنقيحه وصيانته. فصل الأجزاء هذا ليس الفائدة الوحيدة الّتي يُقدّمها نمط الوحدات، إذ من خلاله يمكن مُحاكاة مفهوم المكوّنات السّرّيّة (private) والعلنيّة (public) وحماية بعض محتويات الوحدة من الوصول إليها من خارجها في JavaScript، وذلك بإخفائها ضمن الوحدة والامتناع عن تصديرها الأمر الذي يجعل الوصول إليها من خارج الوحدة مستحيلًا كما سنوضّح بعد قليل. تتوفّر في عالم JavaScript أشكال مختلفة لتصميم الوحدات، منها: الكائنات الحرفيّة (object literals)الدّوالّ المغلقة المجهولة (anonymous closures)وحدات CommonJSوحدات AMDوحدات ECMAScript 6الشّكل الأول ربّما هو أبسط الأشكال وأكثرها بدائيّة، وهو يعني ببساطة إنشاء كائن باستخدام صياغة القوسين المعكوفين {} يضمّ خصائص ووظائف متعلّقة بمهمّة واحدة لعزلها وتسهيل استخدامها: var userSettings = { preferences: { privacy: "strict", language: "ar", showEmail: false, available: true, }, updatePreferences: function(newPrefs) { this.preferences = newPrefs; } }بعض خبراء JavaScript لا يعتبرون هذا النّمط وحدةً حقيقيّة لبساطته الشّديدة، فمن الواضح أنّ هذا النّمط أبسط من حاجات التّطبيقات المعقّدة، فغالبًا ما يكون توزيع الوحدات على ملفّات منفصلة أمرًا مرغوبًا أثناء تطوير التّطبيقات ولهذا نحتاج إلى وسيلة لاستيراد هذه الملفّات وتصديرها بما يسمح باستخدام وحدة واقعة في ملفّ من ملفّ آخر، ولهذا الغرض طوّر مجتمع JavaScript خلال الأعوام الماضية أساليب قياسيّة اتّفق على استخدامها على الرّغم من أن اللّغة ذاتها لم تقدّم مفهوم الوحدات إلّا في الإصدار الأخير (ES6)، والذي استلهم من الأساليب السّابقة أصلًا؛ كما أنّنا قد نرغب بحماية كائن مثل preferences في مثالنا السّابق من تعديله بصورة مباشرة. الشّكل الثّاني هو أسلوب أكثر تطوّرًا لإنشاء الوحدات، ويحتاج فهمه إلى فهم معنى الدّوال المُغلقة (closures)، فإذا كانت لدينا دالّة تُعيد عند استدعائها دالّة أخرى، فإنّنا ندعو الدّالة الأخيرة دالّة مُغلقة، ويتاح لهذه الدّالة الوصول إلى المتّغيّرات الّتي كانت مفروضة في الدّالة الأولى حتّى عندما تُستدعى من خارجها: function addNumberToN(n) { return function(number) { return n + number; } } var addTo2 = addNumberToN(2); var five = addTo2(3); // 5هذه الخاصيّة في JavaScript تسمح لنا بعزل المتّغيّرات (encapsulation) ضمن الدّالة الخارجيّة مع الاحتفاظ بإمكانيّة الوصول إليها من الدّوال والكائنات الفرعيّة، الأمر الذي يحاكي مفهوم خصوصيّة المتغيّرات في لغات البرمجة الأخرى (access modifiers). لنفترض مثلًا أنّنا نريد أن نقوم بإنشاء عدّاد لعدد النّقرات على زرّ معيّن في تطبيقنا، ولا نريد الاحتفاظ بهذه القيمة في النّطاق العامّ لأنّ هذا قد يعرّضها للتّعارض من أسماء مُتغيّرات أخرى أو يجعلها قابلة للتّعديل من إضافات خارجيّة في المتصفّح، لهذا نقوم بإنشاء دالّة مُغلقة تُحيط بهذه القيمة: function() { var counter = 0; return { increaseCounter: function() { counter++; } } }وبهذا نكون قد قيّدنا إمكانيّة تعديل قيمة المتغيّر بزيادته فقط، وعبر الدّالة increaseCounter()‎ فقط. لا يمكن استخدام الدّالّة increaseCounter()‎ إلا بعد استدعاء الدّالة المجهولة (anonymous) الّتي تُحيط بها، ويتمّ هذا كما يلي: (function() { var counter = 0; return { increaseCounter: function() { counter++; } } })()لتُصبح الدّالة increaseCounter()‎ مُتاحة في النّطاق العامّ، وبهذا نكون حصلنا على شكل بدائي لفكرة "تصدير الوحدات" (module exports). لنستعرض الآن الأساليب الأخرى لإنشاء الوحدات، ولعلّ أكثر هذه الأساليب شيوعًا أسلوب CommonJS‏ المُعتمد في Node.js‏، والذي يُتيح استيراد الوحدات باستخدام الدّالّة require()‎: var UrlMaker = require("./url-maker"); var url_maker = new UrlMaker("Hello World!"); var url = url_maker.make(); console.log(url); // hello-world;وأمّا تصدير الوحدات لإتاحة استخدامها، فيتم بإسناد الخصائص إلى الكائن module.exports، كما في الملفّ url-maker.js الموجود في مسار العمل الحالي: module.exports = function UrlMaker(string) { return { make: function() { return string.toLowerCase().replace(/\s+/gi, "-").replace(/[!?*%$#@`]/gi, "") } } }لا يقتصر استخدام أسلوب CommonJS على بيئة Node.js، بل يمكن نقله إلى المتصفّحات باستخدام برامج مثل Browserify‏. من الأساليب الشائعة لإنشاء الوحدات كذلك نمط وحدات AMD (اختصارًا لـAsynchronous Module Definition) ولعلّه يُستخدم بكثرة مع مكتبة require.js‏ في المتصفّحات والّتي تسمح بتحميل الوحدات (الموزّعة كلّ منها على ملفّ منفصل) عند الحاجة إليها، إذ يتمّ التّصريح عن كلّ وحدة وما تعتمد عليه من وحدات أخرى وتقوم require.js بتلبية هذه المتطلبات بتحميل ملفّات الوحدات المنفصلة. في المثال التّالي، نُصرّح عن حاجة موقعنا لمكتبتي jQuery وUnderscore ووحدة أخرى قمنا بإنشائها بأنفسنا: require(["jquery", "underscore", "user_profile"], function($, _, UserProfile) { var user = new UserProfile(); user.firstName = $("#form input[name='first']").text(); user.lastName = $("#form input[name='last']").text(); user.username = $("#form input[name='username']").text(); // ... })ويتمّ التّصريح عن الوحدة user_profile في ملفّ منفصل باسم موافق: define(function() { function Profile() { /* ... */ } return Profile; })يوفّر الإصدار الجديد من JavaScript‏ (ES6) دعمًا أساسيًّا لتعريف الوحدات واستيرادها وتصديرها، وسنتطرّق له بالتّفصيل في الجزء القادم من سلسلة التّعريف بميزات ES6 الجديدة، لكنّ لا بأس من أن نتعرّف عليه سريعًا: import { jQuery as $ } from "/jquery.js"; import { Profile as UserProfile } from "/user.js"; var user = new UserProfile(); user.firstName = $("#form input[name='first']").text(); // ...وتُنشئ الوحدة وتُصدَّر في الملفّ user.js: class Profile { constructor() { // ... } validate() { // ... } } export { Profile };فوائد استخدام الوحداتلنُلخِّص إذن فوائد الوحدات: تنظيم النّصّ البرمجيّ للمشاريع الضّخمة بحيث يسهل فهم بنية البرنامج وتنقيحه ومتابعة صيانته في المستقبل.إدارة المُتطلّبات (dependencies): توضيح العلاقة بين مكوّنات المشروع، بحيث نستطيع إدارة ما تتطلّبه كلّ وحدة وتحميل هذه المتطلّبات آليًّا بالتّرتيب الصّحيح بدل الحاجة إلى التّصريح عن روابط المكتبات الخارجيّة في الصّفحة الرئيسيّة للموقع وإعادة ترتيبها كلّ ما تطلّب الأمر إضافة مكتبة جديدة تعتمد على أخرى.العزل (encapsulation): حماية أجزاء من المشروع من العبث بها سهوًا أو من نصوص برمجيّة خارجيّة، وذلك بعزلها ضمن نطاق فرعيّ خلافًا لتركها في النّطاق العامّ. ففي الحالة الطّبيعيّة تكون متغّيرات JavaScript المفروضة في النّطاق العامّ مُتاحة لأي دالّة، وأما عند فرض هذه المُتغيّرات ضمن الوحدات، فإنّ الوصول إليها يُصبح محدودًا بما هو داخل الوحدة ذاتها، ويتمّ ذلك باستغلال مفهوم النّطاقات (scopes) في JavaScript وإحاطة هذه المتغيّرات بدالّة تُغلّفها بنطاق فرعيّ ثمّ إعادة كائن يحوي فقط الخصائص الّتي نريد إتاحتها للعموم.متى أستخدم هذا النّمط؟يُنصح باستعمال هذا النّمط في المشاريع الضّخمة كتطبيقات الويب المُعقّدة الّتي تعمل في المتصفّح، إذ تكون الحاجة مُلحّة لتجزئة المشروع وتطوير كلّ جزء بصورة مستقلّة ثم ربط هذه الأجزاء مع بعضها إمّا بهدف تسهيل تطوير المشروع أو إدارة المتطلّبات بحيث تُجلَب عند الحاجة إليها نظرًا لكبر حجمها أو تأثيرها على أداء التّطبيق، كما يُنصح باستخدامه عند الحاجة لعزل تفاصيل الوحدة عن النّطاق العامّ. المصادر: كتاب JavaScript Design Patterns‏ لمؤلّفه Addy Osmani‏JavaScript Module Pattern: In-Depth‏وثائق require.js‏وثائق Node.js‏
    1 نقطة
  32. في سلسلة من عدة أجزاء سنناقش موضوعًا نظريًّا يُعتبر من أساسيّات هندسة البرامج، وهو أنماط التصميم (Design Patterns)، وسنعتمد لغة JavaScript في نقاشنا لتصاعد شعبيّتها ومرونتها التي تسمح لنا ببناء مشاريعنا وفق أنماط متنوّعة مما سيُسهّل علينا شرح موضوع السّلسلة نمط المُشيِّد (Constructor)يشيع استخدام المُشيّدات في اللغات الكائنيّة التّوجّه، حيث تُستخدم لإنشاء نُسخ (instances) من الأصناف (classes)، ومع أنّ JavaScript ليست لغةً كائنيّة التّوجّه بالمعنى التّقليديّ، إلّا أنّها تسمح بإنشاء نُسخ عن كائنات باستخدام بالمُشيّدات، ويمكن لأيّ دالّة أن تُستخدم كمُشيّد، وذلك بأن نُسبقها بالكلمة new، ولتوضيح هذا النّمط سنقوم بإنشاء مُنبّه (كالّذي تضبطه للاستيقاظ في هاتفك) يمكن ضبطه إلى تاريخ ووقت معيّنين ثمّ تفعيله أو تعطيله حسب الرّغبة: function Alarm(when) { this.setAt = when; this.enable = function() { var startAfter = new Date(this.setAt) - new Date; console.log("Alarm will wake you up after " + startAfter/1000 + " seconds"); this.timeout = setTimeout(function() { console.log("Wake up!"); }, startAfter); } this.disable = function() { if (this.timeout) { clearTimeout(this.timeout); delete this.timeout; console.log("Alarm diabled"); } } } var a = new Alarm("2015-03-19 5:58 PM"); a.enable() // Alarm will wake you up after 8.982 seconds // After a few seconds: // Wake up!في المثال السّابق نُسمّي الدّالة Alarm()‎ مُشيّدًا (constructor)، والكائن a نُسخة (instance). لاحظ أنّ Alarm في المثال السّابق ليست سوى دالّة (function)، فهي ليست صنفًا كما في لغات أخرى مثل Java وC++، إذ تُعتبر الدّوال في JavaScript مكوّنًا من الدّرجة الأولى وتُعامل كما يُعامل أيّ كائن، وهكذا يمكن استخدامها كمشيّد لكائن آخر ممّا يسمح بمحاكاة مفهوم الأصناف الّذي لم يُضَف إلّا مؤخّرًا في JavaScript. من عيوب المِثال السّابق إسناد الدّوال الّتي ستعمل عمل الوظائف (methods) إلى النُسخة ذاتها عند إنشائها، وهذا يعني تكرار محتوى الدّوال في الذّاكرة مع كلّ نسخة جديدة من الكائن Alarm، بينما يمكننا توفير هذا الاستهلاك غير المُبرّر للذّاكرة بإسناد الدّوال إلى النّموذج البدئيّ للكائن (أي إلى Alarm.prototype) مما يسمح بمشاركتها بين كل نسخ الكائن، لتقوم الآلة الافتراضيّة بتنفيذ النّصّ البرمجيّ للدّالّة ذاتها بسياق النّسخة (instance context) الّتي استدعت الدّالة، أي إنّ this تُشير ضمن الدّالة عند تنفيذها إلى النُسخةَ المنشأة وليس الصّنف؛ بالطّبع ليس من المرغوب تطبيق الفكرة ذاتها على المُتغيّرات الأخرى مثل setAt، لأنّه من البديهيّ أن تختلف قيمتها بين نسخة وأخرى. لنُعد كتابة المثال السّابق بصورة أفضل: function Alarm(when) { this.setAt = when; } Alarm.prototype.enable = function() { var startAfter = new Date(this.setAt) - new Date; console.log("Alarm will wake you up after " + startAfter/1000 + " seconds"); this.timeout = setTimeout(function() { console.log("Wake up!"); }, startAfter); } Alarm.prototype.disable = function() { if (this.timeout) { clearTimeout(this.timeout); delete this.timeout; console.log("Alarm diabled"); } } var a = new Alarm("2015-03-19 6:21 PM"); a.enable(); // Alarm will wake you up after 30.243 seconds // After 30 seconds... // Wake up!هذا الأسلوب في إنشاء الأصناف شائع جدًّا، وهو يتطلّب فهمًا دقيقًا لآليّة الوراثة في JavaScript؛ إذ يُبنى كلّ كائنٍ فيها على كائن آخر يُسمّى النّموذج البدئيّ (prototype)، ويقوم هذا الكائن الأخير على كائن ثالث أعلى منه في السّلسلة هو نموذجه البدئيّ، وهكذا حتّى نصل إلى null الّذي ليس له نموذج بدئيّ بحسب تعريف اللّغة. في مثالنا السّابق الكائن Alarm.prototype هو النّموذج البدئيّ للكائن a، وهذا يعني أنّ كل الخواصّ المُسندة إلى Alarm.prototype وما فوقه ستكون مُتاحة للكائن a، ولو كتابنا برنامجًا مُشابهًا بـJava لقُلنا إنّ Alarm صنفٌ وإنّ a نُسخة عن هذا الصّنف (instance). عندما نحاول الوصول إلى الخاصّة a.setAt، فإنّ مُفسِّر JavaScript يبدأ بالبحث عن هذه الخاصّة من أدنى سلسلة الوراثة، أي من الكائن a ذاته، فإنّ وجدها قرأها وأعاد قيمتها، وإلّا تابع البحث صعودًا إلى النّموذج البدئيّ وهكذا... وطبيعة JavaScript هذه هي ما سمح لنا بإسناد الوظيفتين enable وdisable إلى Alarm.prototype مطمئنّين إلى أنّها ستكون مُتاحة عند قراءة a.enable()‎ وa.disable()‎. يمكن التأكّد من النّموذج البدئيّ للكائن a كما يلي: Object.getPrototypeOf(a) == Alarm.prototype; // trueالأصناف في ECMAScript 6يُقدّم الإصدار الأحدث من JavaScript مفهوم الأصناف (classes) بصورته التّقليديّة المعروفة في اللّغات الأخرى، إلّا أنّه ليس سوى أسلوب آخر لصياغة النّماذج البدئيّة (أو ما يُسمّى syntactic sugar)، وهذا يعني أنّه نموذج الوراثة في JavaScript لم يتغيّر. يمكننا إعادة كتابة المثال السّابق بصياغة الأصناف في ES6 كما يلي: class Alarm { constructor(when) { this.startAt = when; } enable() { var startAfter = new Date(this.setAt) - new Date; console.log("Alarm will wake you up after " + startAfter/1000 + " seconds"); this.timeout = setTimeout(function() { console.log("Wake up!"); }, startAfter); } disable() { if (this.timeout) { clearTimeout(this.timeout); delete this.timeout; console.log("Alarm diabled"); } } }وستُسند الدّوال enable()‎ وdisable()‎ إلى Alarm.prototype تمامًا كما في المثال الذي سبقه. يُذكر أنّ استخدام new ليست الطّريقة الوحيدة لتشييد الكائنات، إذ يمكن استخدام الوظيفة Object.create()‎ لتُعطي النّتيجة ذاتها: var a = Object.create(Alarm.prototype); Object.getPrototypeOf(a) == Alarm.prototype; // trueإسناد الخواصّ إلى الكائنات‏JavaScript لغة ديناميكية، وهذا يعني أنّه يمكن إضافة وحذف الخواصّ من الكائنات وتعديل نماذجها البدئيّة أثناء التّنفيذ، وهذا ما يمنحها القسم الأكبر من مرونتها ويجعلها مناسبة للاستخدام في بيئة مُعقّدة مثل بيئة الويب، وليس من الغرابة أن توفّر اللّغة وسائل متعدّدة لإسناد الخصائص إلى الكائنات لتلبية الحاجات المتنوّعة لتطبيقات الويب. ماذا لو أردنا تغيير قيمة المنبّه في مثالنا السّابق بعد تفعيله؟ لربّما ترادونا للوهلة الأولى إمكانيّة تغيير قيمة الخاصّة setAt بالطّريقة التّقليدية: a.setAt = "2016-03-03 03:03 PM"; // or a["setAt"] = "2016-03-03 03:03 PM";لكنّ نتيجة هذا الفعل لن تكون كما يُتوقّع، فلو عدنا للمثال السابق وتمعّنا في خواصّه، للاحظنا عيبًا في كيفيّة عمل المُنبّه، إذ إنّ الخاصّة setAt مكشوفة ويمكن تغيير قيمتها في أيّ وقت، حتى بعد تفعيل المُنبّه، إلّا أنّ تغييرها بعدئذٍ لن يغيّر اللّحظة الحقيقيّة الّتي سينطلق فيها المنبّه كما يتضّح لنا عند قراءة النّصّ البرمجيّ، ولذا فنحن هنا أمام حلّين: إمّا منع تغيير قيمة الخاصّة setAt وجعلها للقراءة فقط بعد إنشاء المُنبّه، أو إيقاف المنبّه وإعادة ضبطه في كلّ مرّة تُغيّر فيها قيمة الخاصّة setAt، وكلا الحلّين متاحان إذا كنّا على علم بأساليب إسناد الخصائص في JavaScript. توفّر اللّغة الوظيفة Object.defineProperty()‎‏ الّتي تسمح بتعريف خواصّ لكائن ما مع إمكانيّة التّحكم بتفاصيل هذه الخاصّة، ومن هذه التّفاصيل: هل الخاصّة قابلة للكتابة؟ (writable)هل يجب المرور على هذه الخاصّة عند سرد خواصّ الكائن؟ (enumerable)ما الذي يحدث عند إسناد قيمة للخاصّة؟ (set)ما الذي يحدث عند قراءة قيمة الخاصّة؟ (get)وبهذا يمكننا بسهولة منع تغيير قيمة الخاصّة setAt بعد إسنادها: function Alarm(when) { Object.defineProperty(this, "setAt", { value: when, writable: false }) } Alarm.prototype.enable = function() { var startAfter = new Date(this.setAt) - new Date; console.log("Alarm will wake you up after " + startAfter/1000 + " seconds"); this.timeout = setTimeout(function() { console.log("Wake up!"); }, startAfter); } Alarm.prototype.disable = function() { if (this.timeout) { clearTimeout(this.timeout); delete this.timeout; console.log("Alarm diabled"); } } var a = new Alarm("2015-03-19 7:51 PM"); a.setAt = new Date("2016-03-19"); console.log(a.setAt); // "2015-03-19 7:51 PM"لاحظ أنّ قيمة setAt لم تتغيّر. هذا حلّ جيّد، لكن سيكون من الأفضل السّماح للمُستخدم بتعديل قيمة المنبّه، وعندها سنلجأ لإيقاف المنّبه وإعادة ضبطه كما يلي: function Alarm(when) { var _hidden_value = new Date(when); Object.defineProperty(this, "setAt", { set: function(newValue) { _hidden_value = new Date(newValue); if (this.timeout) { this.disable(); console.log("Alarm changed to " + newValue); console.log("You need to re-enable the alarm for changes to take effect"); } }, get: function() { return _hidden_value; } }) } Alarm.prototype.enable = function() { var startAfter = new Date(this.setAt) - new Date; console.log("Alarm will wake you up after " + startAfter/1000 + " seconds"); this.timeout = setTimeout(function() { console.log("Wake up!"); }, startAfter); } Alarm.prototype.disable = function() { if (this.timeout) { clearTimeout(this.timeout); delete this.timeout; console.log("Alarm diabled"); } } var a = new Alarm("2016-03-03 03:03 PM") a.enable(); // Alarm will wake you up after 30221933.66 seconds a.setAt = "2015-03-19 8:05 PM"; // Alarm changed to 2015-03-19 8:05 PM // You need to re-enable the alarm for changes to take effect a.enable() // Alarm will wake you up after 20.225 seconds // After 20 seconds... // Wake up!لاحظ أنّنا سنحتاج إلى مُتغيّر سرِّيِّ (‎_hidden_value) نُخزّن فيه القيمة الفعليّة لوقت التّنبيه. متى أستخدم هذا النّمط؟نمط المُشيّد لا يحتكر بنية مشروعك عند استخدامه؛ معنى هذا أنّه لا شيء يمنعك من استخدام نمط المُشيّد مع أي نمط آخر عند الحاجة لذلك، فيمكن (بل يشيع كثيرًا) استخدام المُشيّدات ضمن الوحدات (modules) ثمّ تصديرها لاستخدامها من موضع آخر في المشروع، ومثال ذلك أشياء مثل EventEmitter‏ وStreams‏ في Node.js. كما يمكن بناء أنماط أخرى سنتعرّف عليها لاحقًا على أساس المُشيِّدات مثل نمط الكائن المُتفرّد (Singleton) ونمط المُراقِب (Observer pattern). المصادر: شبكة مُطوّري موزيلّا: Inheritance and the prototype chain‏كتاب JavaScript Design Patterns‏ لمؤلّفه Addy Osmani
    1 نقطة
×
×
  • أضف...