گزارش سیاست امنیتی
مرورگرها میتوانند نقض سیاستهای امنیتی را به یک آدرس گزارش کنند. آن آدرس را به ارورا بدهید تا تخلفها به خطا تبدیل شوند، گروهشده بر اساس دستور و میزبان مسدودشده.
نوعهای پشتیبانیشده: 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 در کوئری نیست یا اشتباه است |
| سیل گزارش | معمولاً یک دستور اشتباه است؛ بهجای فیلترکردن، سیاست را درست کنید — حالت فقطگزارش برای همین است |
| گزارش از افزونهها | اینها فیلتر میشوند؛ اگر باز هم دیدید، از اسکریپت تزریقشده در صفحه آمده نه از پروتکل افزونه |