أدوات المطوّرون
أدوات يومية تختصر مهام البرمجة المتكررة.
مهام سريعة
نقرة واحدة تفتح الأداة مهيّأة مسبقًا للمهمة.
أدوات المطورين - الألوان والبصمات والطوابع الزمنية ورموز JWT
هذا قسم التحويلات الصغيرة التي تقاطع العمل الحقيقي. التصميم يعطيك لوناً بصيغة HEX وCSS يريد HSL. وسطر سجل يحمل طابعاً زمنياً يونكسياً وعليك أن تعرف كم كانت الساعة في منطقتك. وواجهة برمجية ترجع رمزاً وعليك أن ترى ما بداخله. وصفحة تنزيل تنشر بصمة SHA-256 وعليك التحقق من الملف. لا شيء من ذلك صعب؛ وكله مزعج يدوياً، والأربعة تعمل هنا بلا حساب.
ما الذي يضمه هذا القسم
| الأداة | ماذا تفعل | متى تحتاجها |
|---|---|---|
| محوّل الألوان | يحوّل بين HEX وRGB وHSL | لوحة ألوان بصيغة وورقة أنماطك تريد صيغة أخرى |
| مولّد البصمات | يحسب MD5 وSHA-1 وSHA-256 وSHA-512 لنص أو ملف | التحقق من تنزيل، أو مقارنة ملفين، أو توليد مفتاح ذاكرة مؤقتة |
| محوّل الطوابع الزمنية | يحوّل الطوابع الزمنية اليونكسية إلى تواريخ مقروءة والعكس، عبر المناطق الزمنية | سجل أو عمود قاعدة بيانات أو استجابة واجهة يحمل رقماً حيث ينبغي أن يكون تاريخ |
| مفكِّك JWT | يفصل رمز JSON Web ويعرض ترويسته وحمولته وموعد انتهائه | تصحح المصادقة وتحتاج رؤية الادعاءات |
| مزيل CSS غير المستخدم | يُبقي فقط CSS الذي تستخدمه الصفحة، من تصدير Coverage في Chrome أو من HTML | قالب أو منشئ صفحات يحمّل CSS أكثر بكثير مما تحتاجه الصفحة |
| منسّق الأكواد | ينسّق HTML وCSS وJavaScript وSQL أو يضغطها، مع لهجات SQL واكتشاف اللغة تلقائيًا | حزمة أو قالب أو استعلام وصل في سطر واحد لا يُقرأ، أو مقتطف يجب أن يكون أصغر ما يمكن |
| شارح تعبيرات Cron | يقرأ جدول cron بلغة واضحة، حقلًا حقلًا، مع مواعيد تشغيله القادمة بالتوقيت المحلي أو بـ UTC | مهمة تعمل في ساعة خاطئة، أو تحتاج إلى التأكد مما يفعله سطر crontab قبل نشره |
| حاسبة الشبكات الفرعية | عنوان الشبكة والبث ونطاق المضيفين والأقنعة ونوع العنوان لـ IPv4 وIPv6، مع تقسيم الشبكة إلى شبكات فرعية | تكتب قاعدة جدار ناري أو خطة VPC أو إعدادات موجّه، ويجب أن يكون النطاق صحيحًا تمامًا |
| محلّل وكيل المستخدم | يقرأ المتصفح والمحرّك ونظام التشغيل والجهاز في أي سلسلة وكيل مستخدم، ويسمّي زواحف محركات البحث والذكاء الاصطناعي | سطر في سجل أو تقرير تحليلات أو بلاغ خطأ يعرض وكيل مستخدم تحتاج إلى فهمه |
| تحويل JSON إلى أنواع | يحوّل عيّنة JSON إلى أنواع TypeScript أو Go أو Python أو C# أو Rust، أو إلى JSON Schema | واجهة برمجية ترجع JSON وكودك يحتاج إلى نماذج بأنواع محددة لها |
صيغ الألوان ولماذا يستحق HSL المعرفة
تصف HEX وRGB الشيء نفسه تماماً بخطين مختلفين: فالقيمة #4F46E5 هي rgb(79, 70, 229)، ثلاث قنوات من 0 إلى 255 مكتوبة بالنظام الست عشري بدل العشري. والتحويل بينهما ميكانيكي.
أما HSL فنموذج مختلف حقاً، ومن هنا يستحق مكانه. فهو يصف اللون بـالصبغة (موقعه على عجلة الألوان، من 0 إلى 360)، والتشبع (مدى حيويته، من 0 إلى 100٪)، والإضاءة (من 0 إلى 100٪). والمكسب العملي: تعتيم لون بنسبة 10٪ لحالة التمرير تغيير واحد في رقم واحد، وبناء لوحة من درجات متقاربة يعني تثبيت الصبغة والتشبع والتنقل في الإضاءة. أما فعل الشيء نفسه بصيغة HEX فيعني إعادة حساب ثلاث قنوات والتخمين.
والتباين هو السبب الآخر. فالنص يحتاج نسبة تباين لا تقل عن 4.5 إلى 1 مع خلفيته ليستوفي معيار WCAG AA بالأحجام العادية. والإضاءة في HSL تتنبأ بموقعك أفضل بكثير من التحديق في شفرة ست عشرية.
البصمات: فيمَ تفيد وفيمَ لا تفيد
دالة البصمة تحوّل أي دخل إلى بصمة ثابتة الطول. الدخل نفسه يعطي دائماً الخرج نفسه؛ وتغيير محرف واحد يعطي خرجاً مختلفاً تماماً؛ ولا يمكن الرجوع من البصمة إلى الدخل. وهذا يجعل البصمات الأداة الصحيحة للتحقق من السلامة والأداة الخاطئة لتخزين كلمات المرور.
| الخوارزمية | الخرج | الحال |
|---|---|---|
| MD5 | 128 بت | مكسورة أمنياً. يمكن اصطناع التصادمات عمداً. لا بأس بها كمجموع تحقق غير أمني أو مفتاح ذاكرة مؤقتة |
| SHA-1 | 160 بت | مكسورة منذ 2017. ما زالت تُرى في أنظمة قديمة وفي معرفات كائنات Git؛ لا تخترها لشيء جديد |
| SHA-256 | 256 بت | الخيار القياسي اليوم للتحقق من الملفات والتواقيع والشهادات |
| SHA-512 | 512 بت | العائلة نفسها بخلاصة أكبر، وغالباً أسرع على عتاد 64 بت |
الاستعمال اليومي هو التحقق من تنزيل: ينشر الموقع بصمة SHA-256، فتحسب أنت بصمة الملف الذي استلمته بـمولّد البصمات، فإما أن تتطابق السلسلتان محرفاً محرفاً وإما لا. وهذا يلتقط التنزيل المبتور والمرآة المتلاعب بها على السواء.
أما ما لا تصلح له البصمات فهو كلمات المرور. فبصمة SHA-256 بسيطة لكلمة مرور يمكن مهاجمتها بمليارات المحاولات في الثانية على عتاد عادي. وتخزين كلمات المرور يتطلب دالة بطيئة ومملّحة ومصممة لهذا الغرض - bcrypt أو scrypt أو Argon2 - مكلفة عن قصد. فإن كنت تبصم كلمة مرور بأي شيء من الجدول أعلاه، فتلك علة. ولهذا الغرض بالذات يضم مولّد البصمات تبويباً لـ bcrypt: يصنع بصمة bcrypt بمعامل الكلفة الذي تختاره، ويتحقق من كلمة مرور مقابل بصمة مخزّنة، وصفحة bcrypt تفتحه مباشرة.
الطوابع الزمنية اليونكسية وارتباك المناطق
يعدّ الطابع الزمني اليونكسي الثواني منذ منتصف ليل التوقيت العالمي في الأول من يناير 1970. وهو بلا منطقة زمنية، ولهذا تحديداً تستعمله الأنظمة: فهو لحظة واحدة لا لبس فيها، وكل لغة تستطيع تحويله إلى الوقت المحلي للعرض. والرقم من عشر خانات ثوانٍ؛ والرقم من ثلاث عشرة خانة مللي ثوانٍ، وهو ما ترجعه Date.now() في جافاسكريبت، وسبب شائع جداً لحطّ التواريخ في 1970 أو في العام 55000.
ومحوّل الطوابع الزمنية يعمل في الاتجاهين ويعرض الناتج بالتوقيت العالمي إلى جانب وقتك المحلي، وهي عادة المقارنة التي تحتاجها فعلاً عند قراءة سجل كُتب على خادم في منطقة أخرى. وثمة تاريخان يستحقان المعرفة: 2147483647 هو آخر ثانية يسع طابع زمني بـ32 بت ذي إشارة أن يحملها، في يناير 2038، و0 هو المبدأ نفسه - فطابع زمني بقيمة صفر أو تاريخ الأول من يناير 1970 يعني في الغالب الأعم أن قيمة لم تُضبط قط.
قراءة رمز JWT
رمز JSON Web ثلاثة مقاطع Base64 آمنة للروابط تفصلها نقاط: ترويسة تذكر الخوارزمية التي وقّعته، وحمولة من الادعاءات، وتوقيع. ومفكِّك JWT يفصلها ويعرض الأولين بصيغة JSON مقروءة، مع تحويل exp وiat إلى تواريخ - وهو عادة كل السؤال حين يُرفض طلب ما.
ونقطتان لا بد من وضوحهما. الأولى أن الحمولة غير مشفّرة. فكل من يملك الرمز يستطيع قراءة كل ادعاء فيه، ومن ثم فرمز JWT ليس مكاناً لأي شيء خاص. والثانية أن فك الترميز ليس تحققاً: فقراءة الادعاءات تخبرك بما يزعمه الرمز، لا بصحة التوقيع. ولا يستطيع الإجابة عن ذلك إلا الخادم الذي يملك المفتاح، ولا ينبغي لأي أداة متصفح أن تطلب منك لصق سر التوقيع لمعرفة ذلك.
ولأن الرمز بيانات اعتماد حية ما دام صالحاً، فإن المكان الذي تلصقه فيه يهم. وهذا المفكِّك يعمل بالكامل داخل متصفحك - تحلّل جافاسكريبت الرمز على جهازك ولا يُرسل شيء إلى أي مكان، ويمكنك تأكيد ذلك في لوحة الشبكة.
أقسام ذات صلة
- أدوات الترميز - تحت كل رمز JWT يقبع ترميز Base64 الآمن للروابط، ومعرفة ذلك تفسر معظم إخفاقات فك الترميز.
- المولّدات - تنتج المعرفات والأسرار التي تفحصها هذه الأدوات لاحقاً.
- أدوات النصوص - نسّق JSON الخارج من حمولة مفكوكة.
- أدوات الصور - حوّل الأصول وأنت ماض في مهمة التصميم نفسها.