سایت را ساختهاید و آمادهی انتشار است. این نقطه، ارزانترین لحظهی عمر پروژه برای انجام کارهای امنیتی است — همان کارهایی که شش ماه بعد، با کاربر واقعی و دادهی واقعی، به یک بازسازی پرهزینه تبدیل میشوند. این چکلیست عمداً کوتاه و اجراپذیر نوشته شده: هر مورد کاری است که امروز چند دقیقه تا چند ساعت وقت میگیرد و بعداً روزها. امنیت سایت جدید یک پروژهی جداگانه نیست؛ ده تصمیم درست در آخرین هفتهی پیش از انتشار است.
در یک نگاه
- بیشتر یافتههای A02:2025 پیکربندی نادرست در سایتهای تازهمنتشرشده ماندهاند: محتوای نمونه، دیباگ روشن، و فایل بکاپ در ریشهی وب.
- اگر فقط پنج کار انجام میدهید: حذف محتوای دمو و اعتبارنامهی پیشفرض، خاموش کردن دیباگ، HTTPS + HSTS، بکاپ آزمودهشده، لاگ و هشدار.
- پوشهی
.gitو فایل بکاپ در ریشهی وب، سریعترین راه افشای کل سورس و اسرار شماست. - اسرار نباید در مخزن کد یا در سورس سمت کلاینت باشند — کلید API در جاوااسکریپت یعنی کلید عمومی.
- لاگ و هشدار را قبل از انتشار راه بیندازید؛ بعد از حادثه دیگر لاگی برای تحلیل وجود ندارد.
چرا لحظهی پیش از انتشار مهمترین فرصت است
هر کنترل امنیتی دو هزینه دارد: هزینهی پیادهسازی و هزینهی عقبنشینی. پیش از انتشار، هزینهی دوم صفر است.
- HTTPS اجباری قبل از انتشار: یک تغییر پیکربندی. بعد از انتشار: بازنویسی آدرسهای ذخیرهشده، ریدایرکتهای ۳۰۱، اصلاح محتوای ترکیبی و ریسک از دست دادن اعتبار سئو.
- ساختار کنترل دسترسی درست از ابتدا: چند ساعت طراحی. بعد از انتشار: بازنویسی هر اندپوینت و آزمون مجدد کل برنامه.
- خارج کردن اسرار از مخزن قبل از اولین کامیت عمومی: تقریباً بیهزینه. بعد از انتشار: بازنویسی تاریخ مخزن، چرخش همهی کلیدها، و فرض افشا.
- لاگگیری قبل از انتشار: یک پیکربندی. بعد از حادثه: هیچ راهی برای بازسازی گذشته وجود ندارد.
OWASP در نسخهی ۲۰۲۵ دستهی پیکربندی نادرست را از رتبهی ۵ به رتبهی ۲ ارتقا داده و گزارش میکند این دسته در ۱۰۰٪ برنامههای آزمودهشده وجود داشته. نکتهی امیدبخش این است که تقریباً همهی موارد این دسته بدون تغییر کد قابل رفعاند — و اگر پیش از انتشار انجام شوند، عملاً رایگاناند. فهرست کامل ده دسته در OWASP Top 10:2025 آمده است.
حذف محتوای نمونه، دمو و اعتبارنامهی پیشفرض
این اولین مورد فهرست OWASP در A02:2025 است و دلیل دارد: «برنامهی نمونه روی سرور عملیاتی با اعتبارنامهی پیشفرض تغییرنیافته» یکی از رایجترین مسیرهای نفوذ است.
- محتوای دمو قالب را کامل حذف کنید. نصب دموی قالبهای تجاری معمولاً افزونههای اضافی، صفحات نمونه و کاربران آزمایشی میآورد. همه را پاک کنید.
- حسابهای آزمایشی را حذف کنید، نه فقط غیرفعال. حساب
testبا رمزtest123که «بعداً پاکش میکنیم» هرگز پاک نمیشود. - هر اعتبارنامهی پیشفرض را عوض کنید: پنل مدیریت، پایگاهداده، ابزارهای مدیریت (phpMyAdmin و مشابه)، داشبورد کش، صف پیام، و هر سرویس جانبی.
- ابزارهای توسعه را از محیط عملیاتی حذف کنید: پنل دیباگ فریمورک، مستندات خودکار API که نباید عمومی باشد، ابزارهای پروفایلینگ، و صفحات وضعیت.
- محیط staging را از دسترس عمومی و از ایندکس خارج کنید. نسخهی آزمایشی روی
dev.example.comبا دادهی واقعی و بدون مقاومسازی، یکی از رایجترین راههای نشت داده است. آن را با احراز هویت محافظت کنید و دادهی واقعی در آن نگذارید. - پکیجها و سرویسهای بیاستفاده را حذف کنید. اصل «پلتفرم حداقلی»: هر مؤلفهای که نصب است ولی استفاده نمیشود، سطح حملهی بدون فایده است.
دیباگ، پیام خطا و افشای اطلاعات
حالت دیباگ در محیط عملیاتی یکی از بدترین حالتهای ممکن است، چون هم اطلاعات معماری را لو میدهد و هم گاهی قابلیت اجرای کد فراهم میکند.
- حالت دیباگ فریمورک را خاموش کنید و مطمئن شوید متغیر محیطی مربوطه در سرور عملیاتی روی مقدار تولید تنظیم شده.
- صفحات خطای سفارشی بگذارید. کاربر باید یک پیام خطای عمومی ببیند؛ جزئیات فقط در لاگ سمت سرور. Stack trace، مسیر فایلها، نام و نسخهی کامپوننتها و کوئری SQL هرگز نباید در پاسخ HTTP باشند.
- خطاهای پایگاهداده را در خروجی نمایش ندهید. پیام خطای پایگاهداده به مهاجم ساختار اسکیما را میدهد و ساخت تزریق SQL را ساده میکند — این دقیقاً یکی از سناریوهای A10:2025 مدیریت نادرست شرایط استثنایی است.
- هدرهای افشاکننده را حذف کنید: نسخهی وبسرور، نسخهی زبان، و هدرهای اختصاصی فریمورک. این کار حمله را غیرممکن نمیکند اما کار شناسایی خودکار را سختتر میکند.
- اصل «شکست بسته» را رعایت کنید: اگر بررسی مجوز به خطا خورد، پاسخ باید رد باشد نه اجازه. «Failing open» یکی از خطرناکترین الگوهای مدیریت خطاست.
- در پاسخهای خطای احراز هویت پیام یکسان بدهید تا وجود یا نبود یک حساب لو نرود.
«پیام خطای دقیق به کاربر کمک میکند مشکل را بفهمد.» پیام خطای دقیق به مهاجم کمک میکند نقشهی سیستم شما را بکشد. کاربر واقعی به «مشکلی رخ داد، کد پیگیری: X» نیاز دارد؛ شما به لاگ کامل در سمت سرور نیاز دارید. این دو با هم قابل جمعاند و هیچ تضادی ندارند.
HTTPS، HSTS و هدرهای امنیتی
HTTPS و پیکربندی TLS
- گواهی معتبر با زنجیرهی کامل (شامل گواهیهای میانی) نصب کنید و با یک کلاینت مستقل — نه فقط مرورگر خودتان — آزمایش کنید. علت اهمیت این نکته در خطای گواهی امنیتی سایت توضیح داده شده.
- ریدایرکت کامل HTTP به HTTPS، و سپس فعالسازی HSTS با
max-ageطولانی. اگر همهی زیردامنهها HTTPS دارند،includeSubDomainsرا اضافه کنید. - TLS 1.3 را فعال کنید. TLS 1.2 را فقط برای سازگاری و فقط با مجموعهسایفرهای ECDHE + AEAD نگه دارید — طبق RFC 10015 (جولای ۲۰۲۶) مجموعهسایفرهای RSA ایستا و همهی FFDH/FFDHE در TLS 1.2 منسوخ شدهاند. TLS 1.0 و 1.1 طبق RFC 8996 باید کامل غیرفعال باشند.
- کوکیها را با
Secure،HttpOnlyوSameSiteصریح تنظیم کنید. به مقدار پیشفرض مرورگر تکیه نکنید: کروم بهصورت پیشفرضLaxاعمال میکند اما فایرفاکس این کار را نمیکند، پس تنظیم صریح تنها راه رفتار یکسان است. - رکورد CAA در DNS تعریف کنید و پایش انقضای گواهی راه بیندازید. HPKP را پیاده نکنید — از مرورگرها حذف شده است.
هدرهای امنیتی
| هدر | چه میکند | نکتهی پیادهسازی |
|---|---|---|
Strict-Transport-Security | مرورگر را مجبور میکند همیشه HTTPS استفاده کند | ابتدا با max-age کوتاه آزمایش کنید، سپس افزایش دهید |
Content-Security-Policy | محدود میکند چه اسکریپتی اجازهی اجرا دارد | سیاست nonce-based با strict-dynamic؛ فهرست سفید دامنهها ناکارآمد است |
X-Content-Type-Options: nosniff | مانع حدس نوع محتوا توسط مرورگر | بیریسک؛ همیشه فعال کنید |
Referrer-Policy | جلوی نشت آدرس کامل صفحه به سایتهای دیگر | strict-origin-when-cross-origin نقطهی شروع خوبی است |
frame-ancestors در CSP | محافظت در برابر clickjacking | جانشین مدرن X-Frame-Options |
Permissions-Policy | غیرفعال کردن قابلیتهای مرورگر که لازم ندارید | دوربین، میکروفن، موقعیت مکانی |
دربارهی CSP یک نکتهی مهم: سیاستهای مبتنی بر فهرست سفید دامنه در عمل دور زده میشوند. پژوهش گوگل نشان داد اکثریت قاطع سیاستهای CSP بررسیشده قابل دور زدن بودند و ۱۴ از ۱۵ دامنهی پرکاربرد در فهرستهای سفید، نقطهی ناامن داشتند. رویکرد درست: script-src 'nonce-{RANDOM}' 'strict-dynamic'; object-src 'none'; base-uri 'none' با nonce تازه در هر پاسخ. توضیح کامل در دانشنامهی CSP.
پاکسازی ریشهی وب: فایلهایی که نباید آنجا باشند
این مورد ساده است و اثرش نامتناسب با سادگیاش. ابزارهای شناسایی و فازینگ محتوا اولین کاری که میکنند همین است.
- پوشهی
.git— اگر در ریشهی وب قابل دسترسی باشد، کل تاریخ مخزن، سورس کامل، و هر اسراری که تا حالا کامیت شده قابل بازسازی است. این یکی از پرتکرارترین یافتههای جدی در سایتهای تازهمنتشرشده است. همین نکته برای.svnو.hgهم صادق است. - فایلهای بکاپ:
backup.zip،site.tar.gz،db.sql،dump.sqlو هر فایل با پسوند.bak،.old،.orig،~. - فایلهای پیکربندی و محیطی:
.env،config.php.bak،docker-compose.yml،.htpasswd. - سورسمپهای تولیدی (
.map) که تمام درخت سورس اصلی جاوااسکریپت شما را بازسازی میکنند. - فایلهای ابزار توسعه:
composer.jsonوpackage.jsonبا فهرست دقیق نسخهی وابستگیها، فایلهای CI، و اسکریپتهای استقرار. - فهرستشدن دایرکتوری را ببندید. بدون آن، حتی فایلهای بینام هم قابل کشفاند.
راستیآزمایی سریع: چند مسیر معمول را از بیرون درخواست کنید و مطمئن شوید پاسخ ۴۰۳ یا ۴۰۴ است، نه محتوا.
for p in .git/config .env backup.zip db.sql composer.json; do
echo -n "$p -> "; curl -s -o /dev/null -w "%{http_code}\n" https://example.com/$p
done
اسرار، متغیرهای محیطی و سورس سمت کلاینت
یک قاعدهی ساده که مشکلات زیادی را حذف میکند: هر چیزی که به مرورگر میرسد، عمومی است. بدون استثنا.
اسرار در سمت کلاینت
- کلید API در جاوااسکریپت، یعنی کلید عمومی. مبهمسازی، کدگذاری base64 و مینیفایکردن هیچ محافظتی نیستند. اگر یک کلید باید محرمانه بماند، فراخوانی باید از سمت سرور انجام شود.
- سورس باندلشده را قبل از انتشار بخوانید. در فایلهای جاوااسکریپت نهایی به دنبال اینها بگردید: کلیدهای سرویس، آدرس اندپوینتهای داخلی، نام محیطهای staging، توکنهای تست، و کامنتهای توسعهدهنده.
- سورسمپها را در تولید منتشر نکنید یا دسترسی به آنها را محدود کنید.
- پرچمهای ویژگی و منطق مجوز را در کلاینت پیاده نکنید. مخفی کردن یک دکمه، کنترل دسترسی نیست؛ همان درخواست را میتوان مستقیماً ارسال کرد. کنترل دسترسی همیشه در سمت سرور.
اسرار در مخزن کد
.envو فایلهای پیکربندی حاوی اسرار باید در.gitignoreباشند و هرگز کامیت نشوند.- اگر رازی حتی یک بار کامیت شده، آن را افشاشده فرض کنید و بچرخانید. حذف در کامیت بعدی کافی نیست؛ در تاریخ مخزن باقی میماند.
- اسرار را از متغیرهای محیطی یا یک سرویس مدیریت راز بخوانید، نه از فایل داخل مخزن.
- یک اسکن سادهی اسرار روی مخزن قبل از انتشار اجرا کنید. این کار در CI هم قابل خودکارسازی است.
این حوزه در OWASP زیر A04:2025 خطاهای رمزنگاری و A06:2025 طراحی ناامن (CWE-256 و CWE-522، ذخیرهسازی و محافظت ناکافی اعتبارنامه) قرار میگیرد. ملاحظات کاملتر در حفاظت از اطلاعات سایت آمده است.
مسیر مدیریت، کنترل دسترسی و مجوز فایلها
پنل مدیریت
- MFA را برای همهی حسابهای اداری از روز اول اجباری کنید. اضافه کردنش بعداً به یک پروژهی تغییر رفتار سازمانی تبدیل میشود.
- اگر IP ثابت دارید، دسترسی به مسیر مدیریت را محدود کنید. این مؤثرترین کنترل در این دسته است.
- محدودسازی نرخ ورود با تأخیر تصاعدی، نه قفل دائم که خودش به منع سرویس تبدیل میشود.
- مسیر مدیریت را از ایندکس خارج کنید و در صفحات عمومی به آن لینک ندهید. این ابهام است نه امنیت، اما نویز حملات خودکار را کم میکند.
کنترل دسترسی
این مهمترین بخش ساختاری است و رتبهی اول OWASP (A01:2025) را دارد. سه اصل که اگر از ابتدا رعایت شوند، بازنویسی بعدی لازم نمیشود:
- رد پیشفرض. هر مسیر و هر عملیات بهطور پیشفرض ممنوع است، مگر صریحاً مجاز شود.
- یک سازوکار مرکزی برای بررسی مجوز، نه بررسی پراکنده در هر کنترلر. بررسیهای پراکنده جایی جا میافتند.
- اعمال مالکیت در لایهی داده. کوئری را
WHERE id = ? AND owner_id = ?بنویسید، نه اینکه رکورد را بخوانید و بعد مالکیت را بررسی کنید. این کار IDOR را ساختاراً حذف میکند.
پیش از انتشار، آزمون سادهای انجام دهید: دو حساب با سطوح مختلف بسازید و درخواستهای حساب پرقدرت را با نشست حساب کمقدرت بازپخش کنید. هر پاسخ موفقی یک یافته است.
مجوز فایل و ایزولهسازی
- فایلها
644و پوشهها755بهعنوان قاعدهی عمومی؛ هرگز777. - کاربر سرویس وب نباید مالک فایلهایی باشد که لازم نیست بنویسد.
- اجرای اسکریپت در پوشهی آپلود را غیرفعال کنید. اگر سایت شما آپلود دارد، این مورد اختیاری نیست.
- کاربر پایگاهداده باید حداقل دسترسی داشته باشد: بدون سطح ریشه، بدون DDL در تولید، و محدود به همان پایگاهداده.
بکاپ، لاگ و هشدار پیش از انتشار
بکاپ
- خودکار، خارج از سرور، و با چند نسخهی تاریخی. بکاپ روی همان سرور در حادثه از بین میرود.
- یک بازگردانی کامل را قبل از انتشار آزمایش کنید و زمانش را اندازه بگیرید. بکاپ آزمایشنشده فقط یک فایل است، و اینجا آخرین فرصت آزمایش بیریسک است.
- فایلها و پایگاهداده هر دو، و ترجیحاً همزمان تا وضعیت سازگار باشد.
- بکاپ خودش دادهی حساس است: رمزنگاری و کنترل دسترسی روی محل نگهداری آن هم لازم است.
لاگ و هشدار
این بند از A09:2025 نقص ثبت رخداد و هشداردهی امنیتی میآید و دلیل تغییر نامش از «پایش» به «هشداردهی» همین است: جمعآوری لاگ بدون هشدار، در لحظهی حادثه بیفایده است.
- چه چیزی را لاگ کنید: ورود موفق و ناموفق، تغییر رمز و ایمیل، ایجاد و تغییر نقش کاربران، شکست کنترل دسترسی، تغییر تنظیمات حساس، عملیات مالی، و خطاهای سرور.
- چه چیزی را لاگ نکنید: رمز عبور، توکن نشست، شمارهی کارت، کد یکبارمصرف. درج دادهی حساس در لاگ خودش یک آسیبپذیری است (CWE-532) و لاگ معمولاً کنترل دسترسی ضعیفتری از پایگاهداده دارد.
- خروجی لاگ را کدگذاری کنید تا تزریق به لاگ (CWE-117) ممکن نشود؛ ورودی کاربر که خام در لاگ مینشیند میتواند رکوردهای جعلی بسازد و تحلیل را گمراه کند.
- هشدار تعریف کنید برای موارد پرسیگنال: ایجاد کاربر مدیر، تغییر فایل هسته، خطای انبوه ۵xx، جهش نرخ ورود ناموفق.
- عمق نگهداری کافی — لاگی که هفت روزه چرخش میکند، برای حادثهای که سه هفته پیش شروع شده بیفایده است.
چکلیست نهایی پیش از انتشار
| # | اقدام | اولویت | چرا حالا و نه بعداً |
|---|---|---|---|
| ۱ | حذف محتوای دمو، حساب آزمایشی و اعتبارنامهی پیشفرض | بحرانی | بعداً فراموش میشود و در ترافیک واقعی گم میشود |
| ۲ | خاموش کردن دیباگ و صفحات خطای سفارشی | بحرانی | اولین چیزی که مهاجم به آن نگاه میکند |
| ۳ | HTTPS اجباری + HSTS + کوکیهای امن | بحرانی | بعد از انتشار نیازمند بازنویسی آدرسها و ریدایرکت است |
| ۴ | حذف .git، فایلهای بکاپ و .env از ریشهی وب | بحرانی | افشای کامل سورس و اسرار با یک درخواست |
| ۵ | MFA برای حسابهای اداری | بحرانی | افزودن بعدی یک پروژهی تغییر رفتار میشود |
| ۶ | بررسی اسرار در سورس سمت کلاینت و در تاریخ مخزن | بحرانی | راز کامیتشده در تاریخ میماند و باید چرخانده شود |
| ۷ | رد پیشفرض و اعمال مالکیت در لایهی داده | بحرانی | تغییر بعدی یعنی بازنویسی هر اندپوینت |
| ۸ | هدرهای امنیتی و CSP مبتنی بر nonce | بالا | افزودن CSP به سایت زنده باعث شکستن قابلیتها میشود |
| ۹ | بکاپ خودکار + آزمون بازگردانی | بالا | آخرین فرصت آزمایش بدون ریسک |
| ۱۰ | لاگ رخدادهای امنیتی + هشدار | بالا | لاگی که نگرفتهاید بعداً وجود ندارد |
| ۱۱ | غیرفعالسازی اجرای اسکریپت در پوشهی آپلود | بالا | تنها لایهای که آپلود آسیبپذیر را از RCE بازمیدارد |
| ۱۲ | حذف مؤلفهها و سرویسهای بیاستفاده | بالا | سطح حملهی بدون فایده |
| ۱۳ | محافظت و خارج کردن محیط staging از ایندکس | بالا | نسخهی آزمایشی با دادهی واقعی، مسیر نشت است |
| ۱۴ | اصلاح مجوز فایل و حداقل دسترسی کاربر پایگاهداده | متوسط | در تولید تغییرش پرریسکتر است |
| ۱۵ | پایش انقضای گواهی و در دسترس بودن | متوسط | انقضای گواهی رایجترین قطعی قابل پیشگیری است |
| ۱۶ | آزمون کنترل دسترسی با دو حساب | متوسط | ارزانترین آزمون با بالاترین بازده |
پیش از انتشار، فهرست وابستگیهای خود را در برابر آسیبپذیریهای شناختهشده بررسی کنید و آن فهرست را نگه دارید (معادل عملی SBOM). A03:2025 نقصهای زنجیرهی تأمین نرمافزار به رتبهی سوم صعود کرده چون بیشتر مسیرهای رسیدن به اجرای کد امروز از دل وابستگیها میآید، نه از کد خودتان. اگر ندانید چه چیزی نصب دارید، نمیدانید کدام هشدار به شما مربوط است.
وقتی این چکلیست تمام شد، سایت شما در وضعیت پایهی قابل قبولی است. مرحلهی بعد ارزیابی است: بررسی امنیت سایت برای یک نگاه سریع، و تست نفوذ وب پیش از انتشار قابلیتهای حساس مانند پرداخت، احراز هویت یا آپلود فایل. اگر تیم توسعه دارید، جای واقعی سرمایهگذاری آموزش الگوهای امن است — دورهی سازمانی توسعهی امن. برای پیشگیری پیوسته هم جلوگیری از هک شدن سایت و چکلیست امنیتی در دسترس است.
پرسشهای متداول
برای امنیت سایت جدید از کجا شروع کنم؟
از پنج کار: حذف کامل محتوای دمو و اعتبارنامههای پیشفرض، خاموش کردن حالت دیباگ، HTTPS اجباری با HSTS، حذف .git و فایلهای بکاپ از ریشهی وب، و MFA برای حسابهای اداری. این پنج مورد چند ساعت وقت میگیرند و بیشترین بخش ریسک اولیه را حذف میکنند.
آیا برای سایت کوچک هم این موارد لازم است؟
بله، چون حملات هدفمند نیستند. مهاجمان در مقیاس اینترنت اسکن میکنند و به دنبال الگوهای مشخصاند: دیباگ روشن، .git باز، اعتبارنامهی پیشفرض. اندازهی سایت شما در این معادله وارد نمیشود. تفاوت این است که سایت کوچک منابع کمتری برای بازیابی دارد.
چرا وجود پوشه .git روی سایت خطرناک است؟
چون اگر از بیرون قابل دسترسی باشد، کل تاریخ مخزن قابل بازسازی است: سورس کامل، فایلهای پیکربندی، و هر رازی که در طول توسعه کامیت شده — حتی اگر بعداً حذف شده باشد. این یکی از پرتکرارترین یافتههای جدی در سایتهای تازهمنتشرشده است و رفعش یک تغییر پیکربندی ساده است.
آیا کافی است بعد از انتشار سایت این کارها را انجام دهم؟
میشود، اما گرانتر و پرریسکتر است. HTTPS اجباری بعد از انتشار نیازمند بازنویسی آدرسهای ذخیرهشده و مدیریت ریدایرکت است؛ CSP روی سایت زنده معمولاً چیزی را میشکند؛ و اسراری که کامیت شدهاند باید چرخانده شوند. مهمتر از همه، لاگی که از ابتدا نگرفتهاید هرگز بهدست نمیآید.
چه هدرهای امنیتی را باید تنظیم کنم؟
حداقل: Strict-Transport-Security، Content-Security-Policy (مبتنی بر nonce بههمراه strict-dynamic، نه فهرست سفید دامنه)، X-Content-Type-Options: nosniff، Referrer-Policy، و frame-ancestors در CSP. کوکیها را هم با Secure، HttpOnly و SameSite صریح تنظیم کنید و به پیشفرض مرورگر تکیه نکنید.
قبل از انتشار سایت، تست نفوذ لازم است؟
برای سایت محتوایی ساده، اجرای همین چکلیست معمولاً کافی است. اما اگر سایت شما پرداخت، احراز هویت کاربران، آپلود فایل یا دادهی شخصی دارد، ارزیابی پیش از انتشار منطقیتر و ارزانتر از رفع یافتهها روی سیستم زنده است — بهویژه در بخش کنترل دسترسی و منطق کسبوکار که هیچ ابزار خودکاری آن را پوشش نمیدهد.
منابع
- OWASP Top 10:2025 — A02 Security Misconfiguration
- OWASP Top 10:2025 — A09 Logging & Alerting Failures
- OWASP Cheat Sheet — Content Security Policy
- RFC 10015 — Deprecating Obsolete Key Exchange Methods in TLS 1.2 and DTLS 1.2
- MDN — Set-Cookie header (SameSite, Secure, HttpOnly)
- OWASP WSTG — Configuration and Deployment Management Testing
