جافا سكريبت - سياسة أمان المحتوى: قامت إعدادات الصفحة بحجب تحميل مورد


أنا أستخدم CAPTCHA عند تحميل الصفحة، لكنها محجوبة لأسباب أمنية.

أنا أواجه هذه المشكلة:

    Content Security Policy: The page's settings blocked the loading
    of a resource at
    http://www.google.com/recaptcha/api.js?onload=myCallBack&render=explicit
    ("script-src http://test.com:8080 'unsafe-inline' 'unsafe-eval'").

لقد استخدمت جافاسكريبت والعلامة التعريفية التالية:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<script src="http://www.google.com/recaptcha/api.js?onload=myCallBack&render=explicit" async defer></script>

الإجابة رقم 1

لقد قلت أنه يمكنك تحميل السكريبتات فقط من موقعك الخاص (ذاتي). ثم حاولت تحميل سكريبت من موقع آخر (www.google.com) وبسبب أنك قيدت هذا، لا يمكنك ذلك. هذه هي الفكرة الأساسية لسياسة أمان المحتوى (CSP).

يمكنك تغيير سطرك الأول إلى:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' http://www.google.com">

أو، بدلاً من ذلك، قد يكون من المفيد إزالة هذا السطر تمامًا حتى تكتشف المزيد عن CSP. CSP الحالي لديك مرن جدًا على أي حال (يسمح بـ unsafe-inline، unsafe-eval و default-src بـ * )، لذلك من المحتمل ألا يضيف الكثير من القيمة، بصراحة.

الإجابة رقم 2

مع مشروع ASP.NET Core Angular الخاص بي قيد التشغيل في Visual Studio 2019، أحيانًا أحصل على رسالة الخطأ هذه في وحدة تحكم Firefox:

سياسة أمان المحتوى: إعدادات الصفحة حظرت تحميل مورد في النص الداخلي («default-src»).

في كروم، رسالة الخطأ هي بدلاً من ذلك:

فشل تحميل المورد: استجاب الخادم بحالة 404()

في حالتي لم يكن له علاقة بسياسة أمان المحتوى الخاصة بي، بل كان ببساطة نتيجة خطأ في TypeScript من جانبي.

تحقق من نافذة الإخراج في بيئة التطوير المتكاملة الخاصة بك عن خطأ TypeScript، مثل:

> ERROR in src/app/shared/models/person.model.ts(8,20): error TS2304: Cannot find name 'bool'.
>
> i 「wdm」: Failed to compile.

ملاحظة: نظرًا لأن هذا السؤال هو النتيجة الأولى على جوجل لهذه رسالة الخطأ.

الإجابة رقم 3

لقد واجهت نوع خطأ مشابه. أولاً، حاولت إضافة وسوم الميتا في الكود، لكن ذلك لم ينجح.

اكتشفت أنه في خادم الويب nginx قد يكون لديك إعداد أمني قد يمنع تشغيل الشيفرة الخارجية:

Security directives
server_tokens off;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'  https://ajax.googleapis.com  https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net; img-src 'self' https://ssl.google-analytics.com https://s-static.ak.facebook.com https://assets.zendesk.com; style-src 'self' 'unsafe-inline' https://assets.zendesk.com; font-src 'self' https://fonts.gstatic.com  https://themes.googleusercontent.com; frame-src https://player.vimeo.com https://assets.zendesk.com https://www.facebook.com https://s-static.ak.facebook.com https://tautt.zendesk.com; object-src 'none'";

تحقق من سياسة أمان المحتوى. قد تحتاج إلى إضافة مرجع المصدر.