انجیناکس؛ شب ۱۵: هدرهای امنیتی، ارثبری و CSP
فهرست نوشته
هدر صحیح اگر در location فرزند حذف شود، حفاظت موردنظر را نمیدهد. امشب ارثبری add_header و سیاست محتوا را با پاسخ موفق و خطا بررسی میکنیم.
این جلسه بخشی از دورهٔ انجیناکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.
محیط: www روی HTTPS؛ پوشهٔ /etc/nginx/snippets را در هر دو خانواده بساز. این فایل خودکار Include نمیشود.
یک snippet قابل بازبینی#
فایل root-owned /etc/nginx/snippets/lab-headers.conf:
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Strict-Transport-Security "max-age=300" always;
آن را در server HTTPS www include و خط HSTS قبلی را حذف کن تا تکراری نشود. nosniff حدس نوع محتوا را محدود، Referrer-Policy اطلاعات نشانی قبلی را کنترل و Permissions-Policy برخی قابلیتهای مرورگر را محدود میکند؛ نیاز برنامه را بررسی کن.
در نسخههای مبنای این دوره، تعریف حتی یک add_header در location میتواند مجموعهٔ inherited والد را کنار بگذارد. هر location دارای add_header اختصاصی باید snippet پایه را نیز include کند. add_header_inherit قابلیت جدیدتر است و نباید آن را روی بستهٔ قدیمی کپی کرد.
CSP ابتدا برای مشاهده#
برای سایت ثابت، در فایل snippet جدا:
add_header Content-Security-Policy-Report-Only "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'" always;
CSP یا سیاست امنیت محتوا منابع مجاز را به مرورگر اعلام میکند. بدون endpoint گزارش، نقضها را در DevTools ببین. پس از بررسی اسکریپت و منابع واقعی، Report-Only را به هدر اجرایی Content-Security-Policy تبدیل کن. WordPress، nonce پاسخ پویا و افزونهها policy اختصاصی میخواهند؛ nonce ثابت در Nginx راه حل نیست.
آزمون و بازگشت: با GET و curl -D - -o /dev/null پاسخ 200 و 404 و location فرزند را بررسی کن؛ هر هدر یک مقدار داشته باشد. policy ناسازگار را به حالت مشاهده برگردان. وجود هدر با curl جای آزمون رفتار مرورگر را نمیگیرد.
منبع: add_header و ارثبری ، راهنمای CSP .