IT-Swarm.Net

সামগ্রী সুরক্ষা নীতি কীভাবে কাজ করে?

বিকাশকারী কনসোলে আমি বেশ কিছু ত্রুটি পেয়ে যাচ্ছি:

একটি স্ট্রিং মূল্যায়ন প্রত্যাখ্যান

ইনলাইন স্ক্রিপ্ট কার্যকর করতে অস্বীকার করেছে কারণ এটি নিম্নলিখিত সামগ্রী সুরক্ষা নীতি নির্দেশকে লঙ্ঘন করে

স্ক্রিপ্ট লোড করতে অস্বীকার

স্টাইলশীট লোড করতে অস্বীকার

এসব কিসের? সামগ্রী সুরক্ষা নীতি কীভাবে কাজ করে? আমি কীভাবে Content-Security-Policy HTTP শিরোনামটি ব্যবহার করব?

বিশেষত, কীভাবে ...

  1. ... একাধিক উত্স অনুমতি দেয়?
  2. ... বিভিন্ন নির্দেশনা ব্যবহার করবেন?
  3. ... একাধিক নির্দেশিকা ব্যবহার করবেন?
  4. ... বন্দরে হ্যান্ডেল?
  5. ... বিভিন্ন প্রোটোকল হ্যান্ডেল?
  6. ... অনুমতি দিন file:// প্রোটোকল?
  7. ... ইনলাইন শৈলী, স্ক্রিপ্ট এবং ট্যাগ <style> এবং <script> ব্যবহার করবেন?
  8. ... অনুমতি দিন eval()?

এবং পরিশেষে:

  1. 'self' এর অর্থ কী?
193
Schlaus

Content-Security-Policy মেটা-ট্যাগ আপনাকে XSS আক্রমণগুলির ঝুঁকি হ্রাস করতে দেয় যেখানে আপনাকে সংজ্ঞা দেওয়া যেতে পারে যেখানে সংস্থানগুলি লোড করা যায়, ব্রাউজারগুলিকে অন্য কোনও অবস্থান থেকে ডেটা লোড করা থেকে বিরত করে। আক্রমণকারীর পক্ষে আপনার সাইটে দূষিত কোড ইনজেকশন করা আরও শক্ত করে তোলে।.

আমি কেন একের পর এক সিএসপি ত্রুটি পাচ্ছি তা জানার চেষ্টা করে আমি একটি ইট প্রাচীরের বিপরীতে আমার মাথাটি বেঁধে দিয়েছি এবং এটি কীভাবে কাজ করে তার কোনও সংক্ষিপ্ত, সুস্পষ্ট নির্দেশনা বলে মনে হয় না। সুতরাং এখানে আমার প্রয়াসটি ব্যাখ্যা করার --- কিছু সংক্ষেপে সিএসপির পয়েন্টগুলি, বেশিরভাগ ক্ষেত্রে যে বিষয়গুলি সমাধান করতে আমার কাছে কঠিন মনে হয়েছিল সেগুলিতে মনোনিবেশ করা।.

ব্রিভিটির জন্য আমি প্রতিটি নমুনায় পুরো ট্যাগটি লিখব না। পরিবর্তে আমি কেবল contentসম্পত্তিটি দেখাব, সুতরাং content="default-src 'self'" বলে এমন একটি নমুনা এর অর্থ:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'">

1। একাধিক উত্সকে কীভাবে অনুমতি দেবেন?

একটি স্থান পৃথকীকরণ তালিকা হিসাবে আপনি কেবল নির্দেশের পরে কেবল আপনার উত্সগুলি তালিকাভুক্ত করতে পারেন:

content="default-src 'self' https://example.com/js/"

মনে রাখবেন যে 'self' এর মতো বিশেষ গুলি ব্যতীত প্যারামিটারগুলির আশেপাশে কোনও উদ্ধৃতি নেই। এছাড়াও, নির্দেশের পরে কোনও কোলন নেই (:)। কেবল নির্দেশিকা, তারপরে পরামিতিগুলির একটি স্থান-বিভাজিত তালিকা।.

নির্দিষ্ট প্যারামিটারের নীচে সমস্ত কিছু স্পষ্টভাবে অনুমোদিত। এর অর্থ এই যে উপরের উদাহরণে এটি বৈধ উত্স হবে:

https://example.com/js/file.js
https://example.com/js/subdir/anotherfile.js

এগুলি অবশ্য বৈধ হবে না:

http://example.com/js/file.js
^^^^ wrong protocol

https://example.com/file.js
                   ^^ above the specified path

2। বিভিন্ন নির্দেশিকা কীভাবে ব্যবহার করবেন, তারা প্রত্যেকে কী করে?

সর্বাধিক সাধারণ নির্দেশাবলী হ'ল:

  • default-src জাভাস্ক্রিপ্ট, চিত্র, সিএসএস, ফন্ট, AJAX অনুরোধ, ইত্যাদি লোড করার জন্য ডিফল্ট নীতি
  • script-src জাভাস্ক্রিপ্ট ফাইলগুলির জন্য বৈধ উত্সগুলি সংজ্ঞায়িত করে
  • style-src CSS ফাইলগুলির জন্য বৈধ উত্সগুলি সংজ্ঞায়িত করে
  • img-src চিত্রগুলির জন্য বৈধ উত্সগুলি সংজ্ঞায়িত করে
  • connect-src XMLHttpRequest (AJAX), ওয়েবসকেট বা ইভেন্টসোর্সের জন্য বৈধ লক্ষ্যগুলি নির্ধারণ করে। যদি এখানে কোনও অনুমতিপ্রাপ্ত হোস্টের সাথে সংযোগের প্রচেষ্টা করা হয় তবে ব্রাউজারটি একটি 400 ত্রুটি অনুকরণ করবে

অন্যদের মধ্যে রয়েছে, তবে এগুলি হ'ল আপনার সবচেয়ে বেশি প্রয়োজন।.

। একাধিক নির্দেশিকা কীভাবে ব্যবহার করবেন?

আপনি আপনার সমস্ত নির্দেশকে একটি মেটা-ট্যাগের ভিতরে একটি সেমিকোলন (;) দিয়ে সমাপ্ত করে সংজ্ঞায়িত করেন:

content="default-src 'self' https://example.com/js/; style-src 'self'"

4। পোর্টগুলি কীভাবে পরিচালনা করবেন?

ডিফল্ট বন্দরগুলি ছাড়াও সমস্ত কিছুই অনুমোদিত ডোমেনের পরে পোর্ট নম্বর বা একটি নক্ষত্র যুক্ত করে স্পষ্টভাবে অনুমতি দেওয়া দরকার:

content="default-src 'self' https://ajax.googleapis.com http://example.com:123/free/stuff/"

উপরের ফলাফল হতে পারে:

https://ajax.googleapis.com:123
                           ^^^^ Not ok, wrong port

https://ajax.googleapis.com - OK

http://example.com/free/stuff/file.js
                 ^^ Not ok, only the port 123 is allowed

http://example.com:123/free/stuff/file.js - OK

আমি যেমন উল্লেখ করেছি, আপনি সমস্ত বন্দরকে স্পষ্টভাবে মঞ্জুরি দেওয়ার জন্য একটি নক্ষত্র ব্যবহার করতে পারেন:

content="default-src example.com:*"

5। বিভিন্ন প্রোটোকল কীভাবে পরিচালনা করবেন?

ডিফল্টরূপে শুধুমাত্র মানক প্রোটোকল অনুমোদিত allowed উদাহরণস্বরূপ ওয়েবসকেটগুলিকে অনুমতি দেওয়ার জন্য ws:// আপনাকে এটি স্পষ্টভাবে অনুমতি দিতে হবে:

content="default-src 'self'; connect-src ws:; style-src 'self'"
                                         ^^^ web sockets are now allowed on all domains and ports

6। ফাইল প্রোটোকল file:// কে কীভাবে অনুমতি দিন?

আপনি যদি এটির সংজ্ঞা দেওয়ার চেষ্টা করেন তবে এটি কাজ করবে না। পরিবর্তে, আপনি এটিকে filesystemপ্যারামিটার দিয়ে মঞ্জুরি দিন:

content="default-src filesystem"

7। ইনলাইন স্ক্রিপ্ট এবং শৈলীর সংজ্ঞা কীভাবে ব্যবহার করবেন?

সুস্পষ্টভাবে অনুমোদিত না হলে আপনি ইনলাইন স্টাইল সংজ্ঞা, <script> ট্যাগের ভিতরে কোড বা onclickএর মতো ট্যাগ বৈশিষ্ট্যে ব্যবহার করতে পারবেন না। আপনি তাদের যেমন অনুমতি দিন:

content="script-src 'unsafe-inline'; style-src 'unsafe-inline'"

আপনাকে স্পষ্টভাবে ইনলাইন, বেস 64 এনকোডযুক্ত চিত্রগুলিও অনুমতি দিতে হবে:

content="img-src data:"

8। কীভাবে eval()?

আমি নিশ্চিত যে অনেক লোকই বলবে যে আপনি তা করবেন না, যেহেতু 'alভালটি মন্দ and' এবং পৃথিবীর আসন্ন শেষের সর্বাধিক কারণ cause এই লোকেরা ভুল হবে। অবশ্যই, আপনি অবশ্যই স্পষ্টভাবে আপনার সাইটের সুরক্ষার মধ্যে প্রধান গর্তগুলি ঘুষি মারতে পারেন, তবে এটির ক্ষেত্রে পুরোপুরি বৈধ ব্যবহারের ঘটনা রয়েছে। আপনি এটি ব্যবহার সম্পর্কে স্মার্ট হতে হবে। আপনি এটি এর মত অনুমতি দিন:

content="script-src 'unsafe-eval'"

9। 'self' এর অর্থ কী?

লোকালহোস্ট, লোকাল ফাইল সিস্টেম বা একই হোস্টের কিছু বোঝাতে আপনি 'self' নিতে পারেন। এর অর্থ এইগুলির কোনও নয়। এর অর্থ সূত্রগুলি যা একই স্কিম (প্রোটোকল), একই হোস্ট এবং একই পোর্ট বিষয়বস্তু নীতি হিসাবে সংজ্ঞায়িত ফাইল হিসাবে আছে HT HTTP- র মাধ্যমে আপনার সাইট পরিবেশন করছে? আপনার জন্য কোনও https নেই, যদি না আপনি এটিকে স্পষ্টভাবে সংজ্ঞায়িত করেন।.

আমি বেশিরভাগ উদাহরণগুলিতে 'self' ব্যবহার করেছি কারণ এটি এটিকে অন্তর্ভুক্ত করা সাধারণত বোধগম্য হয় তবে এটি কোনওভাবেই বাধ্যতামূলক নয়। আপনার প্রয়োজন না হলে এটি ছেড়ে দিন।.

তবে এক মিনিটের জন্য স্তব্ধ থাকুন! আমি কি কেবল content="default-src *" ব্যবহার করতে এবং এটি দিয়ে সম্পন্ন করতে পারি না?

না। স্পষ্টত সুরক্ষিত দুর্বলতাগুলি ছাড়াও এটি আপনার প্রত্যাশার মতো কাজ করবে না। যদিও কিছু ডক্স দাবি করে যে এটি যে কোনও কিছুকে অনুমতি দেয়, এটি সত্য নয়। এটি ইনলাইনিং বা বিস্ফোরনের অনুমতি দেয় না, সুতরাং সত্যই সত্যই আপনার সাইটটিকে অতিরিক্ত দুর্বল করে তুলবে, আপনি এটি ব্যবহার করবেন:

content="default-src * 'unsafe-inline' 'unsafe-eval'"

... তবে আমি বিশ্বাস করি আপনি পারবেন না।.

আরও পড়া:

http://content-security-policy.com

http://en.wikipedia.org/wiki/Content_Security_Policy

450
Schlaus

অ্যাপাচি 2 মোড_এইএইডিআরএস

আপনি অ্যাপাচি 2 মোড_হেডারগুলি সক্ষম করতে পারেন, ফেডোরায় এটি ইতিমধ্যে ডিফল্টরূপে সক্ষম হয়েছে, আপনি যদি উবুন্টু/ডেবিয়ান ব্যবহার করেন তবে এটি এটি সক্ষম করুন:

# First enable headers module for Apache2, 
# then restart the Apache2 service   
a2enmod headers
Apache2 -k graceful

উবুন্টু/ডেবিয়ানে আপনি /etc/Apache2/conf-enabled/security.conf ফাইলটিতে শিরোনাম কনফিগার করতে পারেন

#
# Setting this header will prevent MSIE from interpreting files as something
# else than declared by the content type in the HTTP headers.
# Requires mod_headers to be enabled.
# 
#Header set X-Content-Type-Options: "nosniff"

#
# Setting this header will prevent other sites from embedding pages from this
# site as frames. This defends against clickjacking attacks.
# Requires mod_headers to be enabled.
#
Header always set X-Frame-Options: "sameorigin"
Header always set X-Content-Type-Options nosniff
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Permitted-Cross-Domain-Policies "master-only"
Header always set Cache-Control "no-cache, no-store, must-revalidate"
Header always set Pragma "no-cache"
Header always set Expires "-1"
Header always set Content-Security-Policy: "default-src 'none';"
Header always set Content-Security-Policy: "script-src 'self' www.google-analytics.com adserver.example.com www.example.com;"
Header always set Content-Security-Policy: "style-src 'self' www.example.com;"

দ্রষ্টব্য: এটি ফাইলের নীচের অংশ, কেবল সর্বশেষ 3 টি প্রবেশিকা সিএসপি সেটিংস।.

প্রথম প্যারামিটারটি নির্দেশিকা, দ্বিতীয়টি হ'ল সাদা তালিকাভুক্ত হওয়ার উত্স। আমি গুগল অ্যানালিটিক্স এবং একটি অ্যাডভারভার যুক্ত করেছি, যা আপনার থাকতে পারে। তদুপরি আমি খুঁজে পেয়েছি যে যদি আপনার উপাধি আছে, যেমন, www.example.com এবং উদাহরণ.কম যদি অ্যাপাচি 2 তে কনফিগার করা থাকে তবে আপনার সেগুলি সাদা তালিকাতেও যুক্ত করা উচিত।.

ইনলাইন কোড ক্ষতিকারক হিসাবে বিবেচিত হয়, আপনার এটি এড়ানো উচিত। সমস্ত জাভাস্ক্রিপ্ট এবং সিএসএস ফাইল অনুলিপি করতে এবং সেগুলি সাদা-তালিকায় যুক্ত করুন to.

আপনি এটির সময়ে আপনি অন্যান্য শিরোনামের সেটিংসটি একবার দেখে নিতে পারেন এবং মোড_সিকিউরিটি ইনস্টল করতে পারেন

আরও পড়ুন:

https://developers.google.com/web/fundamentals/security/csp/

https://www.w3.org/TR/CSP/

12
Erik Hendriks