التخفيف من هجمات XSS باستخدام سياسة أمان المحتوى

:bookmark: يشرح هذا الدليل كيفية استخدام سياسة أمان المحتوى (CSP) للتخفيف من هجمات تنفيذ السكريبت عبر المواقع (XSS) في Discourse. يتناول أساسيات CSP، والإعداد، وأفضل الممارسات.

:person_raising_hand: مستوى المستخدم المطلوب: مدير النظام

الملخص

تُعد سياسة أمان المحتوى (CSP) ميزة أمنية حاسمة في Discourse تساعد في الحماية من هجمات تنفيذ السكريبت عبر المواقع (XSS) وأنواع أخرى من هجمات الحقن. يغطي هذا الدليل أساسيات CSP، وكيفية تطبيقها في Discourse، وكيفية تكوينها لموقعك.

ما هي سياسة أمان المحتوى؟

سياسة أمان المحتوى هي طبقة أمنية إضافية تساعد في اكتشاف وتخفيف أنواع معينة من الهجمات، بما في ذلك هجمات تنفيذ السكريبت عبر المواقع (XSS) وهجمات حقن البيانات. تعمل CSP عن طريق تحديد مصادر المحتوى التي تُعتبر موثوقة، وإرشاد المتصفح إلى تنفيذ أو عرض الموارد من هذه المصادر الموثوقة فقط.

لا يزال XSS أحد أكثر ثغرات الويب شيوعًا. من خلال تطبيق CSP، يسمح Discourse بتحميل وتنفيذ السكريبتات من المصادر الموثوقة فقط، مما يقلل بشكل كبير من خطر هجمات XSS.

تطبيق CSP في Discourse

بدءًا من إصدار Discourse 3.3.0.beta1، يطبق Discourse سياسة CSP تعتمد على ‘strict-dynamic’. تستخدم هذه الطريقة قيمة nonce- واحدة وكلمة strict-dynamic في توجيه script-src. يتم منح جميع وسوم \u003cscript\u003e الأولية في النواة والقوالب سمة nonce= المناسبة تلقائيًا.

تشمل السياسة الافتراضية التوجيهات التالية:

  • script-src: يحدد المصادر الصالحة لملفات JavaScript
  • worker-src: يحدد المصادر الصالحة لسكريبتات ServiceWorker
  • object-src: يمنع تنفيذ الإضافات (Flash، Java، إلخ)
  • base-uri: يقيد عناوين URL لعناصر \u003cbase\u003e
  • manifest-src: يقيد عناوين URL لملفات تعريف تطبيقات الويب
  • frame-ancestors: يتحكم في المواقع التي يمكنها تضمين مثيل Discourse الخاص بك داخل إطار iframe
  • upgrade-insecure-requests: يرقّي تلقائيًا طلبات HTTP إلى HTTPS (يُدرج عند تمكين force_https)

تكوين CSP في Discourse

الإعدادات المتاحة

  • content_security_policy: يفعّل أو يعطّل CSP (الافتراضي: مفعل)
  • content_security_policy_report_only: يفعّل وضع تقرير CSP فقط (الافتراضي: معطل)
  • content_security_policy_script_src: يتيح لك توسيع توجيه script-src الافتراضي
  • content_security_policy_frame_ancestors: يفعّل توجيه frame_ancestors (الافتراضي: مفعل)

كيفية تفعيل CSP

  1. انتقل إلى لوحة الإدارة (Admin panel)
  2. اذهب إلى إعدادات الأمان (Security settings)
  3. ابحث عن إعداد content_security_policy وتأكد من أنه مفعل

يُنصح بالبدء بوضع تقرير CSP فقط (Report-Only mode) لتحديد أي مشاكل محتملة قبل تفعيل CSP بالكامل:

  1. فعّل إعداد content_security_policy_report_only
  2. راقب وحدة تحكم المتصفح (browser console) بحثًا عن انتهاكات CSP
  3. تعامل مع أي انتهاكات مشروعة عن طريق توسيع CSP حسب الحاجة
  4. بمجرد التأكد من عدم وجود نتائج إيجابية كاذبة، قم بإيقاف وضع التقرير فقط وقم بتفعيل CSP بالكامل

توسيع CSP الافتراضي

إذا كنت بحاجة إلى السماح بمصادر سكريبت إضافية، يمكنك توسيع توجيه script-src باستخدام إعداد content_security_policy_script_src. يمكنك إضافة:

  • مصادر التجزئة (Hash-sources)
  • 'wasm-unsafe-eval'
  • 'unsafe-eval' (استخدم بحذر)

على سبيل المثال:

'sha256-QFlnYO2Ll+rgFRKkUmtyRublBc7KFNsbzF7BzoCqjgA=' 'unsafe-eval'

:warning: كن حذرًا عند إضافة 'unsafe-eval' أو أي توجيهات متساهلة أخرى، حيث يمكن أن تقلل من فعالية CSP.

CSP ودمج الطرف الثالث

عند استخدام خدمات طرف ثالث مثل Google Tag Manager أو Google Analytics أو خدمات الإعلان، قد تحتاج إلى تعديل إعدادات CSP الخاصة بك. في معظم الحالات مع إصدار Discourse 3.3.0.beta1 أو الأحدث، يجب أن تعمل السكريبتات الخارجية دون حاجة إلى تكوين إضافي بفضل تطبيق CSP ‘strict-dynamic’.

إذا واجهت مشاكل، قد تحتاج إلى:

  1. تحديد مصادر السكريبت المطلوبة عن طريق مراقبة وحدة تحكم المتصفح
  2. إضافة المصادر الضرورية إلى إعداد content_security_policy_script_src
  3. بالنسبة للدمج المعقد مثل خدمات الإعلانات التي تحمّل موارد خارجية، قد تحتاج إلى تمكين العرض عبر النطاقات (cross-domain rendering) (مثال على طلب سحب من discourse-adplugin يقوم بذلك).

أفضل الممارسات

  1. ابدأ بوضع تقرير CSP فقط لتحديد المشاكل المحتملة
  2. ضيق نطاق CSP تدريجيًا أثناء حل الانتهاكات المشروعة
  3. راجع إعدادات CSP بانتظام وعدّلها حسب الحاجة
  4. كن حذرًا عند إضافة توجيهات متساهلة مثل 'unsafe-eval' أو 'wasm-unsafe-eval'
  5. حافظ على تحديث مثيل Discourse للاستفادة من آخر تحسينات CSP

الأسئلة الشائعة (FAQs)

س: أرى العديد من تقارير انتهاكات CSP. هل يجب أن أقلق؟
ج: العديد من انتهاكات CSP هي نتائج إيجابية كاذبة، غالبًا ما تسببها ملحقات المتصفح أو سكريبتات أخرى غير ذات صلة. ركّز على معالجة الانتهاكات المتعلقة بوظائف موقعك.

س: هل يمكنني استخدام CSP مع Google AdSense أو شبكات إعلانية أخرى؟
ج: نعم، ولكن قد تحتاج إلى استخدام إعدادات CSP أكثر تساهلاً. ابدأ بوضع التقرير فقط وعدّل إعداداتك بناءً على الانتهاكات المبلغ عنها.

س: كيف يمكنني استكشاف مشاكل CSP وإصلاحها؟
ج: استخدم أدوات المطورين في متصفحك لمراقبة وحدة التحكم بحثًا عن رسائل انتهاك CSP. ستساعدك هذه في تحديد الموارد التي يتم حظرها ولماذا.

موارد إضافية

56 إعجابًا
Adsense Not Working after Recent Discourse Update
Discourse 2.2.0.beta6 Release Notes
Adding statcounter code
How to install npm packages in custom themes/plugins
How to restart Discourse after server reboot?
Interactive SVG using <object>?
Video Upload to YouTube and Vimeo using Theme Component
Embed HTML5 player for MP3 file
2.5.0.beta5 breaks retort plugin
Should I load third-party libraries from vendor or cdn?
Word Cloud plugin
Embed widget within text in a topic
Discourse Intercom (Advanced)
Push custom events to Google Tag Manager and Analytics
Google Tag Manager and Discourse CSP (Content Security Policy)
Cookie Consent, GDPR, and Discourse
A strange question about google ad display in my site
How to pass a component setting as a value to an attribute?
Need help integrating code wrote on Edittext to the Discourse
Issue with Activate Account Page After Update to 3.4.0 (Blank Page)
"Unsafe JavaScript attempt to initiate navigation"
(Superseded) Experimenting with a 'strict-dynamic' Content Security Policy (CSP)
Can't get script tag to work in landing pages plugin due to content-security-policy
How to embed Razorpay subscription button with CSP restrictions
Any approved method for adding Javascript before body close?
Can I add a snippet to the header?
JS script is not loading
How do we fire scripts after topic HTML is rendered in DOM?
Iframe issue without URL
Where to place ad script?
We couldn't find the code on your site
Javascript not working in customised areas
Difficulties in correctly adding external JavaScript
Report Only CSP Violations
Nginx config in Discourse Docker?
EPN Smart Links
Discourse 2.2.0.beta9 Release Notes
"Refused to load the script" when adding adsense
Why Cookie Consent Doesn't Show Up?
[DigitalOcean] hostname having "www" in A records showing blank page
[DigitalOcean] hostname having "www" in A records showing blank page
Communities with embedded Twitter Feeds
How to add analytics and pixel scripts avoiding Content Security Policy (XSS)
When install html script facing issue?
Discourse 2.4.0.beta10 Release Notes
Add CSP sources to the plugin
IP does not redirect to domain, domain shows white page
DISCOURSE_CDN_URL causes content security policy violations?
Header content is missing due to CSP
How to insert something right after <head>?
How can I embed tracking JS into Discourse
How do I integrate ? cookiebot.com in meinen Forum?
Adding Cookie Consent Banner
Confused about remotely loaded javascript content
User input validation
Custom JS script in theme component not loading

I added a note about this to our public security.md file :tada:

13 إعجابًا

As of this commit, we’ve turned off CSP violations reports by default because the vast majority of the reported violations are false positives.

To illustrate this, here is a screenshot of logs from a site running Discourse with CSP enabled and reporting enabled (filtered using “CSP Violation”):

All of the reported violations are not related to the site’s code:

  • violations with ‘minisrclink.cool’ or ‘proxdev.cool’ in the URL have nothing to do with Discourse, they’re likely coming from a browser extension
  • the Google Analytics violation reports are also not legitimate. They are triggered by Firefox in privacy mode, or Firefox with a privacy extension enabled (like DuckDuckGo Privacy Essentials).
  • Violations with ‘inline’, ‘data’ or ‘about’ are triggered by extensions as well. It’s not shown in the screenshot above, but these violations have some more details in the env tab of the log. In there, under script-sample, some of these violations had code like BlockAdBlock or window.klTabId_kis or AG_onLoad, which come from the AdBlock, Kaspersky, and AdGuard extensions, respectively. (I found this repo: CSP-useful/csp-wtf/README.md at master · nico3333fr/CSP-useful · GitHub very useful in helping explain some of these reports.) Some of these violations will have safari-extension or user-script in the source-file variable (again, in env), so that points to Safari extensions as the culprit for the violation.

In other words, there’s a lot of noise in CSP violation reports, so it’s not useful to log them at all times. They might be helpful while you are configuring CSP, but the reporting should be off during the normal operation of a site.

A few final notes: if you site is using a tag manager (like Google Tag Manager or Segment) you need to load the site in your browser, and carefully examine the violations in the console. These tools load third-party scripts from third-party domains and/or inline scripts so you need to carefully whitelist each of them using the source URL or the hash of the inline script (Chrome usefully includes the hash of inline scripts in the console error statement).

If your site uses an advertising service (like Google Ad Manager, Adsense, etc.) you probably will have to use a very permissive policy:

In the screenshot above, the policy allows any script from a https: source and any inline script. (In the future, this might be replaced by the strict-dynamic keyword, but as of this writing, strict-dynamic isn’t supported by Safari or Edge.)

24 إعجابًا

8 posts were split to a new topic: Protocol-less CDN URLs are problematic

Please note that Safari doesn’t understand some parts of CSP, and this is normal:

You can safely ignore the CSP errors in Safari, you’ll see those on all sites, it just means Safari doesn’t understand worker-src and report-sample .

I guess we need to wait for Safari to be updated?

12 إعجابًا

I’m having trouble configuring, which recommendation?

my forum: forum.meuxbox.com.br

link: White blank advertisement

إعجابَين (2)

It depends on what URLs your ads are requesting. You can look at your browser’s console to see them.

See also the relevant section from the OP:

4 إعجابات

https://meta.discourse.org/t/white-blank-advertisement/140098/3?u=eduardo_braga

this solves the problem of the error

6 إعجابات

Could you please add a Feature-Policy?

This is the one that I am using for more than a year now. (host nginx)

add_header Feature-Policy “geolocation ‘none’; midi ‘none’; notifications ‘self’; push ‘none’; sync-xhr ‘none’; microphone ‘none’; camera ‘none’; magnetometer ‘none’; gyroscope ‘none’; speaker ‘none’; vibrate ‘none’; fullscreen ‘none’; payment ‘none’;”;


Would it make sense to add the following to Content-Security-Policy header? This is what I am successfully using (added by host nginx, on top of discourse built-in CSP):

default-src 'none'
style-src 'self' domain 'unsafe-inline'
img-src https://*.domain.org data: blob: 'unsafe-inline'
font-src 'self' domain
connect-src 'self' domain
manifest-src 'self' domain
3 إعجابات

Given that the spec is still a draft, I don’t expect us to implement it at this time. The Mozilla website you listed even says:

The Feature-Policy header is still in an experimental state, and is subject to change at any time. Be wary of this when implementing Feature Policy on your website.

8 إعجابات

vibrate 'self' - likes on Android trigger a faint, brief vibration.

10 إعجابات

I just installed discourse 2.6.0.beta1 . Do i need to reconfigure this? Thank you

إعجاب واحد (1)

You do not, this is on by default. You only need to modify the config if you’re seeing external resources that are being blocked and you want them to run.

4 إعجابات

I am running 2.6.0 beta 2.

I use the following services in the forums:

  • Google Tag Manager
  • Google Ad Manager
  • Google Ad Sense

Currently, I am using report CSP only while I try to resolve all open issues.

Here are my CSP settings:

With the current settings, I am still receiving LOTS of CSP errors. Some seem like they can be ignored. However this one is boggling me as I have domain declared in the CSP settings.

Am I missing something?

CSP Violation: 'https://www.googletagmanager.com/gtm.js?id=GTM-T9ZW6PR'

backtrace:

/var/www/discourse/app/controllers/csp_reports_controller.rb:9:in `create'
actionpack-6.0.3.2/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack-6.0.3.2/lib/abstract_controller/base.rb:195:in `process_action'
actionpack-6.0.3.2/lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack-6.0.3.2/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport-6.0.3.2/lib/active_support/callbacks.rb:112:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:340:in `block in with_resolved_locale'
i18n-1.8.5/lib/i18n.rb:313:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:340:in `with_resolved_locale'
activesupport-6.0.3.2/lib/active_support/callbacks.rb:121:in `block in run_callbacks'
activesupport-6.0.3.2/lib/active_support/callbacks.rb:139:in `run_callbacks'
actionpack-6.0.3.2/lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack-6.0.3.2/lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack-6.0.3.2/lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
activesupport-6.0.3.2/lib/active_support/notifications.rb:180:in `block in instrument'
activesupport-6.0.3.2/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport-6.0.3.2/lib/active_support/notifications.rb:180:in `instrument'
actionpack-6.0.3.2/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack-6.0.3.2/lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord-6.0.3.2/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack-6.0.3.2/lib/abstract_controller/base.rb:136:in `process'
actionview-6.0.3.2/lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler-2.0.4/lib/mini_profiler/profiling_methods.rb:78:in `block in profile_method'
actionpack-6.0.3.2/lib/action_controller/metal.rb:190:in `dispatch'
actionpack-6.0.3.2/lib/action_controller/metal.rb:254:in `dispatch'
actionpack-6.0.3.2/lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack-6.0.3.2/lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack-6.0.3.2/lib/action_dispatch/journey/router.rb:49:in `block in serve'
actionpack-6.0.3.2/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-6.0.3.2/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-6.0.3.2/lib/action_dispatch/routing/route_set.rb:834:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
rack-2.2.3/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.3/lib/rack/conditional_get.rb:40:in `call'
rack-2.2.3/lib/rack/head.rb:12:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:336:in `call'
rack-2.2.3/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.3/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-6.0.3.2/lib/action_dispatch/middleware/cookies.rb:648:in `call'
actionpack-6.0.3.2/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport-6.0.3.2/lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack-6.0.3.2/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack-6.0.3.2/lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack-6.0.3.2/lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
actionpack-6.0.3.2/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster-2.9.3/lib/logster/middleware/reporter.rb:43:in `call'
railties-6.0.3.2/lib/rails/rack/logger.rb:37:in `call_app'
railties-6.0.3.2/lib/rails/rack/logger.rb:28:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:19:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'
actionpack-6.0.3.2/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack-6.0.3.2/lib/action_dispatch/middleware/request_id.rb:27:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:22:in `call'
rack-2.2.3/lib/rack/method_override.rb:24:in `call'
actionpack-6.0.3.2/lib/action_dispatch/middleware/executor.rb:14:in `call'
rack-2.2.3/lib/rack/sendfile.rb:110:in `call'
actionpack-6.0.3.2/lib/action_dispatch/middleware/host_authorization.rb:76:in `call'
rack-mini-profiler-2.0.4/lib/mini_profiler/profiler.rb:200:in `call'
message_bus-3.3.1/lib/message_bus/rack/middleware.rb:61:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:176:in `call'
railties-6.0.3.2/lib/rails/engine.rb:527:in `call'
railties-6.0.3.2/lib/rails/railtie.rb:190:in `public_send'
railties-6.0.3.2/lib/rails/railtie.rb:190:in `method_missing'
rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
unicorn-5.6.0/lib/unicorn/http_server.rb:632:in `process_client'
unicorn-5.6.0/lib/unicorn/http_server.rb:728:in `worker_loop'
unicorn-5.6.0/lib/unicorn/http_server.rb:548:in `spawn_missing_workers'
unicorn-5.6.0/lib/unicorn/http_server.rb:144:in `start'
unicorn-5.6.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'

Env 1:


hostname	forums-web-only
process_id	27127
application_version	f2e14a3946b020ace5a368614f0da198cd17aa32
HTTP_HOST	forums.paddling.com
REQUEST_URI	/csp_reports
REQUEST_METHOD	POST
HTTP_USER_AGENT	Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0
HTTP_ACCEPT	*/*
HTTP_X_FORWARDED_FOR	74.76.45.218
HTTP_X_REAL_IP	74.76.45.218
time	1:44 pm

Env 2:


hostname	forums-web-only
process_id	27161
application_version	f2e14a3946b020ace5a368614f0da198cd17aa32
HTTP_HOST	forums.paddling.com
REQUEST_URI	/csp_reports
REQUEST_METHOD	POST
HTTP_USER_AGENT	Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0
HTTP_ACCEPT	*/*
HTTP_X_FORWARDED_FOR	66.58.144.146
HTTP_X_REAL_IP	66.58.144.146
time	1:39 pm

Env 3:

hostname	forums-web-only
process_id	27111
application_version	f2e14a3946b020ace5a368614f0da198cd17aa32
HTTP_HOST	forums.paddling.com
REQUEST_URI	/csp_reports
REQUEST_METHOD	POST
HTTP_USER_AGENT	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
HTTP_ACCEPT	*/*
HTTP_REFERER	https://forums.paddling.com/t/need-advice-loading-a-kayak-onto-j-rac/60058
HTTP_X_FORWARDED_FOR	174.83.24.11
HTTP_X_REAL_IP	174.83.24.11
time	12:16 pm
إعجابَين (2)

There are lots and lots of false positives in CSP reporting. See my reply above for more details.

You don’t need most of the rules you have set in your screenshot, just https: and unsafe-inline are enough, they allow all scripts starting with https and all inline scripts. Try cleaning up your CSP sources setting and enabling CSP (without reporting), it should work.

8 إعجابات

مرحبًا، مجرد سؤال: هل توجيه Content-Security-Policy: frame-ancestors ‘none’ هو أحد التوجيهات التي “سيتم تضمينها في التحديثات المستقبلية” كما ذكر صاحب المنشور الأصلي؟

هل من الممكن إضافة هذا التوجيه بطريقة ما، أم عليّ فقط الانتظار وعدم القلق بشأنه؟ كنت أقوم بتمرين تعزيز الأمان، وكان هذا هو العنصر الوحيد المفتوح / التوصية الوحيدة من أداة الأمان عبر الإنترنت. هذا يعطيني ثقة كبيرة في المنصة بالفعل، عمل رائع يا رفاق!

5 إعجابات

أنا لست متأكداً – ما رأيك @xrav3nz؟

4 إعجابات

أقول لك لا تقلق بشأنه في الوقت الحالي.

frame-ancestors يشبه رأس X-Frame-Options الذي يفرضه بالفعل Discourse/Rails. الرأس مضبوط حاليًا على sameorigin — تقريبًا نفس خيار self في توجيه CSP.

في رأيي، لن نكسب الكثير من تنفيذ frame-ancestors في الوقت الراهن، ما لم نحتاج إلى دعم إضافة نطاقات محددة أخرى غير self إلى القائمة البيضاء.

8 إعجابات

أوافق على هذا.

مطاردة كل “مشكلة” قد يكتشفها ماسح الثغرات الأمنية يمكن أن يؤدي في النهاية إلى تعطيل أشياء مهمة، مقابل نسبة مخاطرة-فائدة ضئيلة جدًا.

هناك العديد من “الثغرات النظرية” التي نادرًا ما يتم استغلالها أو لا يمكن استغلالها إلا في سيناريو محدد جدًا. هذه الأنواع من الثغرات المحتملة لم يتم استغلالها أبدًا في موقع Discourse، حسب علمي؛ وأوصي بعدم “إصلاح” أشياء تكون “نظريًا” ثغرة لم تؤدِ إلى أي اختراق ذي عواقب.

هذه هي مساهمتي البسيطة كخبير في الأمن السيبراني لأكثر من عقود. أنا مستعد لمناقشة أساسيات إدارة المخاطر في الأمن السيبراني إذا كان أي شخص مهتمًا.

5 إعجابات

لقد أضفنا للتو دعم توجيه frame-ancestors في سياسة أمان المحتوى (CSP). وهو معطل حاليًا بشكل افتراضي خلف إعداد الموقع “content security policy frame ancestors”. يمكنك إضافة النطاقات إلى القائمة عبر /admin/customize/embedding كما هو معتاد.

سيتم تمكين هذا التوجيه بشكل افتراضي في دورة الإصدار التالية.

7 إعجابات