پرش به مطلب اصلی

گزارش سیاست امنیتی

مرورگرها می‌توانند نقض سیاست‌های امنیتی را به یک آدرس گزارش کنند. آن آدرس را به ارورا بدهید تا تخلف‌ها به خطا تبدیل شوند، گروه‌شده بر اساس دستور و میزبان مسدودشده.

نوع‌های پشتیبانی‌شده: CSP، Expect-CT، Expect-Staple و HPKP، از جمله قالب دسته‌ای Reporting API.

راه‌اندازی​

این نقطه به ازای هر پروژه است و با کلید عمومی DSN احراز می‌شود:

https://<your-errora-host>/api/<project_id>/security/?sentry_key=<public_key>

آن را به هدر سیاست خود اضافه کنید:

Content-Security-Policy:
default-src 'self';
script-src 'self' 'unsafe-inline';
connect-src 'self' https://<your-errora-host>;
report-uri https://<your-errora-host>/api/<project_id>/security/?sentry_key=<public_key>

مرورگرهای امروزی Reporting API را ترجیح می‌دهند:

Reporting-Endpoints: csp-endpoint="https://<your-errora-host>/api/<project_id>/security/?sentry_key=<public_key>"
Content-Security-Policy: default-src 'self'; report-to csp-endpoint

در دورهٔ گذار هر دو هدر را بفرستید — پشتیبانی مرورگرها یکدست نیست.

Nginx​

add_header Content-Security-Policy "default-src 'self'; report-uri https://errora.example.com/api/$PROJECT_ID/security/?sentry_key=$KEY" always;

جنگو​

CSP_REPORT_URI = "https://errora.example.com/api/<project_id>/security/?sentry_key=<key>"

لاراول​

هدر را در میان‌افزار تنظیم کنید، یا از گزینهٔ reportUri بستهٔ spatie/laravel-csp استفاده کنید.

اجرای بی‌دردسر یک سیاست​

اول در حالت فقط‌گزارش شروع کنید تا وقتی می‌فهمید صفحه‌هایتان واقعاً چه چیزهایی بار می‌کنند، چیزی نشکند:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri https://…/security/?sentry_key=…

یک هفته خطاها را ببینید، موارد واقعی را درست کنید و بعد هدر را به شکل الزام‌آور تغییر دهید.

چه چیزی می‌گیرید​

تخلف‌ها بر اساس دستور + میزبان مسدودشده در قالب Issue گروه می‌شوند؛ پس تخلف‌های script-src از یک CDN یک خطا هستند نه ده هزار تا. هر رویداد آدرس سند، دستور نقض‌شده، آدرس مسدودشده، سیاست مؤثر و مرورگر را با خود دارد.

نویز افزونه‌ها فیلتر می‌شود — chrome-extension://، moz-extension:// و مانند آن‌ها — چون افزونهٔ کاربران شما باگ شما نیست.

بررسی​

curl -X POST "https://<host>/api/<project_id>/security/?sentry_key=<key>" \
-H 'Content-Type: application/csp-report' \
-d '{"csp-report":{"document-uri":"https://example.com/","violated-directive":"script-src",
"blocked-uri":"https://evil.example.net/x.js","effective-directive":"script-src"}}'

سپس صفحهٔ خطاها را ببینید.

عیب‌یابی​

نشانهعلت / راه‌حل
هیچ گزارشی نمی‌رسدreport-uri در هدر اشتباهی است، یا مرورگر فقط report-to را پشتیبانی می‌کند
در کنسول مرورگر 401 می‌بینیدsentry_key در کوئری نیست یا اشتباه است
سیل گزارشمعمولاً یک دستور اشتباه است؛ به‌جای فیلترکردن، سیاست را درست کنید — حالت فقط‌گزارش برای همین است
گزارش از افزونه‌هااین‌ها فیلتر می‌شوند؛ اگر باز هم دیدید، از اسکریپت تزریق‌شده در صفحه آمده نه از پروتکل افزونه