বিষয়বস্তু নিরাপত্তা নীতি

আপনি যদি কন্টেন্ট সিকিউরিটি পলিসি (সিএসপি) এর সাথে পরিচিত না হন, তাহলে কনটেন্ট সিকিউরিটি পলিসির একটি ভূমিকা একটি ভালো সূচনা পয়েন্ট। সেই ডকুমেন্টটি CSP-এর বৃহত্তর ওয়েব প্ল্যাটফর্ম ভিউ কভার করে; ক্রোম অ্যাপ সিএসপি ততটা নমনীয় নয়।

CSP ক্রস-সাইট স্ক্রিপ্টিং সমস্যাগুলির বিরুদ্ধে প্রশমিত করার একটি নীতি, এবং আমরা সবাই জানি যে ক্রস-সাইট স্ক্রিপ্টিং খারাপ। আমরা আপনাকে বোঝাতে চেষ্টা করব না যে CSP একটি উষ্ণ এবং অস্পষ্ট নতুন নীতি। জড়িত কাজ আছে; আপনাকে শিখতে হবে কিভাবে মৌলিক কাজগুলো ভিন্নভাবে করতে হয়।

এই নথির উদ্দেশ্য হল আপনাকে বলা যে CSP নীতিটি Chrome Apps-এর জন্য ঠিক কী, এটি মেনে চলার জন্য আপনাকে কী করতে হবে এবং কীভাবে আপনি এখনও সেই মৌলিক কাজগুলি এমনভাবে করতে পারেন যা CSP-সঙ্গতিপূর্ণ।

ক্রোম অ্যাপসের জন্য সিএসপি কী?

Chrome অ্যাপ্লিকেশানগুলির জন্য সামগ্রী নিরাপত্তা নীতি আপনাকে নিম্নলিখিতগুলি করতে বাধা দেয়:

  • আপনি আপনার Chrome অ্যাপ পৃষ্ঠাগুলিতে ইনলাইন স্ক্রিপ্টিং ব্যবহার করতে পারবেন না৷ এই নিষেধাজ্ঞাটি <script> ব্লক এবং ইভেন্ট হ্যান্ডলার উভয়কেই নিষিদ্ধ করে ( <button onclick="..."> )।
  • আপনি আপনার যেকোন অ্যাপ ফাইলে (ভিডিও এবং অডিও রিসোর্স ব্যতীত) কোনো বাহ্যিক সম্পদ উল্লেখ করতে পারবেন না। আপনি একটি আইফ্রেমে বহিরাগত সংস্থান এম্বেড করতে পারবেন না।
  • আপনি eval() এবং new Function() এর মত স্ট্রিং-টু-জাভাস্ক্রিপ্ট পদ্ধতি ব্যবহার করতে পারবেন না।

এটি নিম্নলিখিত নীতি মান মাধ্যমে প্রয়োগ করা হয়:

default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;

আপনার ক্রোম অ্যাপ শুধুমাত্র আপনার অ্যাপের মধ্যে থাকা স্ক্রিপ্ট এবং বস্তুগুলিকে উল্লেখ করতে পারে, মিডিয়া ফাইলগুলি বাদ দিয়ে (অ্যাপগুলি প্যাকেজের বাইরে ভিডিও এবং অডিও উল্লেখ করতে পারে)। ক্রোম এক্সটেনশনগুলি আপনাকে ডিফল্ট সামগ্রী নিরাপত্তা নীতি শিথিল করতে দেবে; Chrome Apps করবে না।

কিভাবে CSP মেনে চলতে হয়

সমস্ত জাভাস্ক্রিপ্ট এবং সমস্ত সংস্থান স্থানীয় হওয়া উচিত (সবকিছু আপনার Chrome অ্যাপে প্যাকেজ করা হয়)।

"কিন্তু তাহলে আমি কিভাবে..."

এটা খুবই সম্ভব যে আপনি টেমপ্লেটিং লাইব্রেরি ব্যবহার করছেন এবং এর মধ্যে অনেকগুলি CSP এর সাথে কাজ করবে না। এছাড়াও আপনি আপনার অ্যাপে বাহ্যিক সংস্থানগুলি অ্যাক্সেস করতে চাইতে পারেন (বাহ্যিক ছবি, ওয়েবসাইট থেকে সামগ্রী)।

টেমপ্লেটিং লাইব্রেরি ব্যবহার করুন

একটি লাইব্রেরি ব্যবহার করুন যা প্রি-কম্পাইল করা টেমপ্লেটগুলি অফার করে এবং আপনি সম্পূর্ণ প্রস্তুত৷ আপনি এখনও একটি লাইব্রেরি ব্যবহার করতে পারেন যা প্রি-কম্পাইলেশন অফার করে না, তবে এটির জন্য আপনার পক্ষ থেকে কিছু কাজ করতে হবে এবং সেখানে সীমাবদ্ধতা রয়েছে।

আপনি 'ইভাল' জিনিসগুলি করতে চান এমন কোনও সামগ্রীকে আলাদা করতে আপনাকে স্যান্ডবক্সিং ব্যবহার করতে হবে। স্যান্ডবক্সিং আপনার নির্দিষ্ট করা বিষয়বস্তুতে CSP উত্তোলন করে। আপনি যদি আপনার Chrome অ্যাপে খুব শক্তিশালী Chrome API ব্যবহার করতে চান, তাহলে আপনার স্যান্ডবক্স করা সামগ্রী সরাসরি এই APIগুলির সাথে ইন্টারঅ্যাক্ট করতে পারে না ( স্যান্ডবক্স স্থানীয় সামগ্রী দেখুন)।

দূরবর্তী সম্পদ অ্যাক্সেস

আপনি XMLHttpRequest এর মাধ্যমে দূরবর্তী সংস্থানগুলি আনতে পারেন এবং সেগুলিকে blob: , data: , বা filesystem: URLs এর মাধ্যমে পরিবেশন করতে পারেন (দেখুন বাহ্যিক সংস্থানগুলি উল্লেখ করা )৷

ভিডিও এবং অডিও দূরবর্তী পরিষেবাগুলি থেকে লোড করা যেতে পারে কারণ অফলাইনে বা স্পট সংযোগের অধীনে থাকাকালীন তাদের ভাল ফলব্যাক আচরণ থাকে৷

ওয়েব কন্টেন্ট এম্বেড করুন

একটি iframe ব্যবহার করার পরিবর্তে, আপনি একটি ওয়েবভিউ ট্যাগ ব্যবহার করে একটি বাহ্যিক URL-এ কল করতে পারেন ( এম্বেড বহিরাগত ওয়েব পৃষ্ঠাগুলি দেখুন)৷

,

আপনি যদি কন্টেন্ট সিকিউরিটি পলিসি (সিএসপি) এর সাথে পরিচিত না হন, তাহলে কনটেন্ট সিকিউরিটি পলিসির একটি ভূমিকা একটি ভালো সূচনা পয়েন্ট। সেই ডকুমেন্টটি CSP-এর বৃহত্তর ওয়েব প্ল্যাটফর্ম ভিউ কভার করে; ক্রোম অ্যাপ সিএসপি ততটা নমনীয় নয়।

CSP ক্রস-সাইট স্ক্রিপ্টিং সমস্যাগুলির বিরুদ্ধে প্রশমিত করার একটি নীতি, এবং আমরা সবাই জানি যে ক্রস-সাইট স্ক্রিপ্টিং খারাপ। আমরা আপনাকে বোঝাতে চেষ্টা করব না যে CSP একটি উষ্ণ এবং অস্পষ্ট নতুন নীতি। জড়িত কাজ আছে; আপনাকে শিখতে হবে কিভাবে মৌলিক কাজগুলো ভিন্নভাবে করতে হয়।

এই নথির উদ্দেশ্য হল আপনাকে বলা যে CSP নীতিটি Chrome Apps-এর জন্য ঠিক কী, এটি মেনে চলার জন্য আপনাকে কী করতে হবে এবং কীভাবে আপনি এখনও সেই মৌলিক কাজগুলি এমনভাবে করতে পারেন যা CSP-সঙ্গতিপূর্ণ।

ক্রোম অ্যাপসের জন্য সিএসপি কী?

Chrome অ্যাপ্লিকেশানগুলির জন্য সামগ্রী নিরাপত্তা নীতি আপনাকে নিম্নলিখিতগুলি করতে বাধা দেয়:

  • আপনি আপনার Chrome অ্যাপ পৃষ্ঠাগুলিতে ইনলাইন স্ক্রিপ্টিং ব্যবহার করতে পারবেন না৷ এই নিষেধাজ্ঞাটি <script> ব্লক এবং ইভেন্ট হ্যান্ডলার উভয়কেই নিষিদ্ধ করে ( <button onclick="..."> )।
  • আপনি আপনার যেকোন অ্যাপ ফাইলে (ভিডিও এবং অডিও রিসোর্স ব্যতীত) কোনো বাহ্যিক সম্পদ উল্লেখ করতে পারবেন না। আপনি একটি আইফ্রেমে বহিরাগত সংস্থান এম্বেড করতে পারবেন না।
  • আপনি eval() এবং new Function() এর মত স্ট্রিং-টু-জাভাস্ক্রিপ্ট পদ্ধতি ব্যবহার করতে পারবেন না।

এটি নিম্নলিখিত নীতি মান মাধ্যমে প্রয়োগ করা হয়:

default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;

আপনার ক্রোম অ্যাপ শুধুমাত্র আপনার অ্যাপের মধ্যে থাকা স্ক্রিপ্ট এবং বস্তুগুলিকে উল্লেখ করতে পারে, মিডিয়া ফাইলগুলি বাদ দিয়ে (অ্যাপগুলি প্যাকেজের বাইরে ভিডিও এবং অডিও উল্লেখ করতে পারে)। ক্রোম এক্সটেনশনগুলি আপনাকে ডিফল্ট সামগ্রী নিরাপত্তা নীতি শিথিল করতে দেবে; Chrome Apps করবে না।

কিভাবে CSP মেনে চলতে হয়

সমস্ত জাভাস্ক্রিপ্ট এবং সমস্ত সংস্থান স্থানীয় হওয়া উচিত (সবকিছু আপনার Chrome অ্যাপে প্যাকেজ করা হয়)।

"কিন্তু তাহলে আমি কিভাবে..."

এটা খুবই সম্ভব যে আপনি টেমপ্লেটিং লাইব্রেরি ব্যবহার করছেন এবং এর মধ্যে অনেকগুলি CSP এর সাথে কাজ করবে না। এছাড়াও আপনি আপনার অ্যাপে বাহ্যিক সংস্থানগুলি অ্যাক্সেস করতে চাইতে পারেন (বাহ্যিক ছবি, ওয়েবসাইট থেকে সামগ্রী)।

টেমপ্লেটিং লাইব্রেরি ব্যবহার করুন

একটি লাইব্রেরি ব্যবহার করুন যা প্রি-কম্পাইল করা টেমপ্লেটগুলি অফার করে এবং আপনি সম্পূর্ণ প্রস্তুত৷ আপনি এখনও একটি লাইব্রেরি ব্যবহার করতে পারেন যা প্রি-কম্পাইলেশন অফার করে না, তবে এটির জন্য আপনার পক্ষ থেকে কিছু কাজ করতে হবে এবং সেখানে সীমাবদ্ধতা রয়েছে।

আপনি 'ইভাল' জিনিসগুলি করতে চান এমন কোনও সামগ্রীকে আলাদা করতে আপনাকে স্যান্ডবক্সিং ব্যবহার করতে হবে। স্যান্ডবক্সিং আপনার নির্দিষ্ট করা বিষয়বস্তুতে CSP উত্তোলন করে। আপনি যদি আপনার Chrome অ্যাপে খুব শক্তিশালী Chrome API ব্যবহার করতে চান, তাহলে আপনার স্যান্ডবক্স করা সামগ্রী সরাসরি এই APIগুলির সাথে ইন্টারঅ্যাক্ট করতে পারে না ( স্যান্ডবক্স স্থানীয় সামগ্রী দেখুন)।

দূরবর্তী সম্পদ অ্যাক্সেস

আপনি XMLHttpRequest এর মাধ্যমে দূরবর্তী সংস্থানগুলি আনতে পারেন এবং সেগুলিকে blob: , data: , বা filesystem: URLs এর মাধ্যমে পরিবেশন করতে পারেন (দেখুন বাহ্যিক সংস্থানগুলি উল্লেখ করা )৷

ভিডিও এবং অডিও দূরবর্তী পরিষেবাগুলি থেকে লোড করা যেতে পারে কারণ অফলাইনে বা স্পট সংযোগের অধীনে থাকাকালীন তাদের ভাল ফলব্যাক আচরণ থাকে৷

ওয়েব কন্টেন্ট এম্বেড করুন

একটি iframe ব্যবহার করার পরিবর্তে, আপনি একটি ওয়েবভিউ ট্যাগ ব্যবহার করে একটি বাহ্যিক URL-এ কল করতে পারেন ( এম্বেড বহিরাগত ওয়েব পৃষ্ঠাগুলি দেখুন)৷