ابزارهای توسعهدهنده
مجموعهای از ابزارهای روزمره توسعهدهندگان — تبدیل رنگ، تولید هش رمزنگارانه، کار با تایماستمپ یونیکس و رمزگشایی JWT.
کارهای سریع
با یک کلیک، ابزار از قبل برای همان کار تنظیمشده باز میشود.
ابزارهای توسعهدهنده - رنگ، هش، مهر زمانی و JWT
این دستهٔ همان تبدیلهای کوچکی است که کار واقعی را قطع میکنند. طراحی یک رنگ HEX به شما میدهد و CSS مقدار HSL میخواهد. یک خط لاگ مهر زمانی یونیکس دارد و باید بدانید آن لحظه در منطقهٔ زمانی خودتان چه ساعتی بوده. یک API توکنی برمیگرداند و باید ببینید داخلش چیست. یک صفحهٔ دانلود مقدار SHA-256 را منتشر کرده و باید فایل را بررسی کنید. هیچکدام سخت نیست؛ همهشان دستی انجام دادنشان آزاردهنده است، و هر چهار ابزار اینجا بدون حساب کاربری کار میکنند.
این دسته شامل چیست
| ابزار | چه میکند | چه وقت به کارتان میآید |
|---|---|---|
| مبدل رنگ | میان HEX، RGB و HSL تبدیل میکند | یک پالت در یک نماد است و شیوهنامهٔ شما نماد دیگری میخواهد |
| تولیدکنندهٔ هش | برای متن یا فایل، MD5، SHA-1، SHA-256 و SHA-512 را محاسبه میکند | بررسی یک دانلود، مقایسهٔ دو فایل، یا ساختن یک کلید کش |
| مبدل مهر زمانی | مهر زمانی یونیکس را به تاریخ خواندنی و برعکس تبدیل میکند، در منطقههای زمانی مختلف | در یک لاگ، یک ستون پایگاه داده یا یک پاسخ API عددی نشسته که باید تاریخ میبود |
| رمزگشای JWT | توکن JSON Web را تکهتکه میکند و سرآیند، محتوا و زمان انقضایش را نشان میدهد | دارید احراز هویت را اشکالزدایی میکنید و باید ادعاها را ببینید |
| حذفکننده CSS استفادهنشده | فقط CSSی را که صفحه واقعاً استفاده میکند نگه میدارد، از خروجی Coverage کروم یا از HTML | قالب یا صفحهساز خیلی بیشتر از نیاز صفحه CSS بار میکند |
| فرمتکنندهٔ کد | HTML، CSS، JavaScript و SQL را مرتب یا فشرده میکند، با پشتیبانی از گویشهای SQL و تشخیص خودکار زبان | یک باندل، یک قالب یا یک کوئری بهصورت یک خط ناخوانا رسیده، یا یک تکهکد باید تا حد ممکن کوچک شود |
| توضیحدهندهٔ عبارت Cron | یک زمانبندی cron را به زبان ساده و فیلد به فیلد میخواند، با زمان اجراهای بعدی به وقت محلی یا UTC | کاری در ساعت اشتباه اجرا میشود، یا پیش از استقرار باید مطمئن شوید یک خط crontab چه میکند |
| ماشینحساب زیرشبکه | آدرس شبکه، Broadcast، محدودهٔ هاستها، ماسکها و نوع آدرس را برای IPv4 و IPv6 حساب میکند و شبکه را به زیرشبکهها تقسیم میکند | دارید قانون فایروال، طرح VPC یا تنظیمات روتر مینویسید و رنج باید دقیقاً درست باشد |
| تحلیلگر یوزر ایجنت | مرورگر، موتور، سیستمعامل و دستگاه را از هر رشتهٔ یوزر ایجنت میخواند و خزندههای موتور جستجو و هوش مصنوعی را نام میبرد | یک خط لاگ، گزارش آماری یا گزارش باگ یوزر ایجنتی نشان میدهد که باید آن را بفهمید |
| تبدیل JSON به تایپ | یک نمونهٔ JSON را به تایپهای TypeScript، Go، Python، C# یا Rust، یا به یک JSON Schema تبدیل میکند | یک API پاسخ JSON میدهد و کد شما برای آن مدلهای تایپدار لازم دارد |
نمادهای رنگ و اینکه چرا HSL ارزش دانستن دارد
HEX و RGB دقیقاً یک چیز را با دو دستخط توصیف میکنند: #4F46E5 همان rgb(79, 70, 229) است، سه کانال از ۰ تا ۲۵۵ که بهجای دهدهی در مبنای شانزده نوشته شدهاند. تبدیلشان به هم مکانیکی است.
اما HSL مدلی حقیقتاً متفاوت است و جایگاهش را از همینجا میگیرد. رنگ را با فام (جایگاه روی چرخهٔ رنگ، ۰ تا ۳۶۰)، اشباع (چقدر زنده، ۰ تا ۱۰۰ درصد) و روشنایی (۰ تا ۱۰۰ درصد) توصیف میکند. سود عملیاش این است: ۱۰ درصد تیرهتر کردن یک رنگ برای حالت هاور فقط تغییر یک عدد است، و ساختن پالتی از سایههای خویشاوند یعنی ثابت نگه داشتن فام و اشباع و قدم زدن روی روشنایی. همین کار در HEX یعنی محاسبهٔ دوبارهٔ سه کانال و حدس زدن.
کنتراست دلیل دوم است. متن برای برآورده کردن استاندارد WCAG AA در اندازهٔ عادی، به نسبت کنتراست دستکم ۴٫۵ به ۱ با پسزمینهاش نیاز دارد. روشنایی در HSL بهمراتب بهتر از خیره شدن به یک کد شانزدهتایی پیشبینی میکند کجا ایستادهاید.
هشها: به چه درد میخورند و به چه دردی نمیخورند
تابع هش هر ورودی را به اثر انگشتی با طول ثابت تبدیل میکند. همان ورودی همیشه همان خروجی را میدهد؛ تغییر یک نویسه خروجی کاملاً متفاوتی میسازد؛ و نمیتوان از هش به ورودی برگشت. همین باعث میشود هش ابزار درستی برای راستیآزمایی یکپارچگی و ابزار نادرستی برای ذخیرهٔ رمز عبور باشد.
| الگوریتم | خروجی | وضعیت |
|---|---|---|
| MD5 | ۱۲۸ بیت | از نظر امنیتی شکسته. میتوان عمداً تصادم ساخت. بهعنوان جمع کنترلی غیرامنیتی یا کلید کش اشکالی ندارد |
| SHA-1 | ۱۶۰ بیت | از ۲۰۱۷ شکسته. هنوز در سیستمهای قدیمی و در شناسهٔ اشیای Git دیده میشود؛ برای چیز تازه انتخابش نکنید |
| SHA-256 | ۲۵۶ بیت | پیشفرض امروزی برای بررسی فایل، امضا و گواهینامه |
| SHA-512 | ۵۱۲ بیت | همان خانواده با چکیدهٔ بزرگتر، روی سختافزار ۶۴ بیتی اغلب سریعتر |
کاربرد روزمرهاش بررسی یک دانلود است: سایت مقدار SHA-256 را منتشر میکند، شما فایل دریافتی را با تولیدکنندهٔ هش هش میکنید، و دو رشته یا نویسهبهنویسه یکیاند یا نیستند. این هم دانلود ناقص را میگیرد و هم آینهای دستکاریشده را.
چیزی که هشها به دردش نمیخورند رمز عبور است. یک SHA-256 سادهٔ رمز عبور روی سختافزار معمولی با میلیاردها حدس در ثانیه قابل حمله است. ذخیرهٔ رمز عبور به تابعی کند، نمکزده و ساختهشده برای همین کار نیاز دارد - bcrypt، scrypt یا Argon2 - که عمداً پرهزینهاند. اگر رمز عبوری را با چیزی از جدول بالا هش میکنید، آن یک باگ است. تولیدکنندهٔ هش دقیقاً برای همین یک زبانهٔ bcrypt دارد: با هزینهای (cost) که انتخاب میکنید هش bcrypt میسازد و یک رمز عبور را با هش ذخیرهشده مقایسه میکند، و صفحهٔ bcrypt مستقیم همان را باز میکند.
مهر زمانی یونیکس و سردرگمی منطقهٔ زمانی
مهر زمانی یونیکس ثانیهها را از نیمهشب UTC روز اول ژانویهٔ ۱۹۷۰ میشمارد. منطقهٔ زمانی ندارد، و دقیقاً به همین دلیل سیستمها از آن استفاده میکنند: یک لحظهٔ بدون ابهام است و هر زبانی میتواند برای نمایش به وقت محلی تبدیلش کند. عدد دهرقمی ثانیه است؛ عدد سیزدهرقمی میلیثانیه، که همان چیزی است که Date.now() در جاوااسکریپت برمیگرداند و علتی بسیار رایج برای فرود آمدن تاریخها در سال ۱۹۷۰ یا سال ۵۵۰۰۰ است.
مبدل مهر زمانی در هر دو جهت کار میکند و نتیجه را در UTC کنار وقت محلی شما نشان میدهد، که معمولاً همان مقایسهای است که هنگام خواندن لاگی نوشتهشده روی سروری در منطقهای دیگر واقعاً لازم دارید. دو تاریخ ارزش دانستن دارند: ۲۱۴۷۴۸۳۶۴۷ آخرین ثانیهای است که مهر زمانی ۳۲ بیتی علامتدار میتواند نگه دارد، در ژانویهٔ ۲۰۳۸، و ۰ خود مبدأ است - مهر زمانی صفر یا تاریخ اول ژانویهٔ ۱۹۷۰ تقریباً همیشه یعنی مقداری هرگز تنظیم نشده است.
خواندن یک JWT
توکن JSON Web سه بخش Base64 امن برای URL است که با نقطه از هم جدا شدهاند: سرآیندی که میگوید کدام الگوریتم امضایش کرده، محتوایی از ادعاها، و یک امضا. رمزگشای JWT آن را تکه میکند و دو بخش اول را بهصورت JSON خواندنی نشان میدهد، با exp و iat که به تاریخ تبدیل شدهاند - و همین معمولاً تمام پرسش است وقتی درخواستی رد میشود.
دو نکته باید صریح گفته شود. اول اینکه محتوا رمزنگاری نشده است. هر کسی که توکن را داشته باشد میتواند تکتک ادعاهایش را بخواند، پس JWT جای هیچ چیز خصوصی نیست. دوم اینکه رمزگشایی، راستیآزمایی نیست: خواندن ادعاها به شما میگوید توکن چه ادعایی دارد، نه اینکه امضا معتبر است یا نه. تنها سروری که کلید را دارد میتواند به آن پاسخ دهد، و هیچ ابزار مرورگری نباید از شما بخواهد کلید امضایتان را برای فهمیدنش بچسبانید.
چون توکن تا وقتی معتبر است یک اعتبارنامهٔ زنده است، اینکه کجا میچسبانیدش اهمیت دارد. این رمزگشا تماماً در مرورگر شما اجرا میشود - جاوااسکریپت توکن را روی دستگاه خودتان تجزیه میکند و چیزی به هیچ جا فرستاده نمیشود، که میتوانید در پنل شبکه تأییدش کنید.
دستههای مرتبط
- ابزارهای کدگذاری - زیر هر JWT همان Base64 امن برای URL خوابیده، و دانستن این نکته بیشتر خطاهای رمزگشایی را توضیح میدهد.
- تولیدکنندهها - همان شناسهها و اسراری را میسازند که این ابزارها بعداً وارسیشان میکنند.
- ابزارهای متن - همان JSON را قالببندی کنید که از یک محتوای رمزگشاییشده بیرون میآید.
- ابزارهای تصویر - در همان کار طراحی، فایلهای تصویری را تبدیل کنید.