কন্টেন্ট-সিকিউরিটি পলিসি (সিএসপি) সহ স্প্রিং বুটে ক্রস-সাইট স্ক্রিপ্টিং (এক্সএসএস) প্রতিরোধ করুন

ভূমিকা

একটি ওয়েব অ্যাপ্লিকেশন ব্যবহার করার সময় ব্যবহারকারীদের এবং তাদের ব্যক্তিগত ডেটার নিরাপত্তা সবচেয়ে গুরুত্বপূর্ণ। যদিও এই গাইডিং নীতিটি এমনকি ওয়েব ডেভেলপমেন্টের প্রাথমিক পর্যায় থেকেই স্বীকৃত হয়েছে – খারাপ অভিনেতারা অ্যাপ্লিকেশনগুলিতে ত্রুটি খুঁজে পায় এবং আপনার ব্যবহারকারীদের শোষণ করতে পারে।

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

এই সংক্ষিপ্ত নির্দেশিকাটিতে, আমরা ক্রস-সাইট স্ক্রিপ্টিং (XSS) কী, কীভাবে কেউ আপনার নিজের অ্যাপ্লিকেশনে এই আক্রমণটি সম্পাদন করতে পারে এবং কীভাবে আপনি স্প্রিং বুট দিয়ে সহজেই এটি প্রতিরোধ করতে পারেন তা দেখব।

ক্রস-সাইট স্ক্রিপ্টিং (XSS) কি?

ক্রস-সাইট স্ক্রিপ্টিং একটি সুপরিচিত, ব্যাপকভাবে ছড়িয়ে পড়া শোষণ, যেখানে একজন খারাপ অভিনেতা একটি ওয়েব অ্যাপ্লিকেশনে একটি স্ক্রিপ্ট ইনজেক্ট করে।

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

ক্রস-সাইট স্ক্রিপ্টিং একই-উৎস নীতিকে বাধা দেয়, একটি বিশ্বস্ত ওয়েবসাইটের পৃষ্ঠায় একটি দূষিত স্ক্রিপ্ট ইনজেক্ট করে৷ যেহেতু স্ক্রিপ্টটি একটি বিশ্বস্ত ওয়েবসাইট থেকে চালিত হয়, তাই এটি একটি বিশ্বস্ত স্ক্রিপ্ট হিসাবে কার্যকর করা হয়। দূষিত স্ক্রিপ্ট এবং নন-দূষিত স্ক্রিপ্টগুলির মধ্যে পার্থক্য করার কোনও স্পষ্ট উপায় ছিল না - তাই ক্রস-সাইট স্ক্রিপ্টিংয়ের মাধ্যমে নির্বিচারে কোড সম্পাদন করা সম্ভব ছিল। এটি বিরক্তিকর সতর্কতা সন্নিবেশ করা থেকে শুরু করে সামাজিক প্রকৌশল আক্রমণ, নীরবে ব্যবহারকারীর তথ্য সংগ্রহ করা, বা বিশ্বস্ত ওয়েবসাইটের অংশ বলে মনে হয় এমন ফিশিং পৃষ্ঠাগুলিতে ব্যবহারকারীদের পুনঃনির্দেশিত করা থেকে শুরু করে যেকোন জায়গায় বিস্তৃত।

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

কনটেন্ট-সিকিউরিটি পলিসি (সিএসপি) সহ একটি স্প্রিং বুট অ্যাপ্লিকেশনে এক্সএসএস প্রতিরোধ করা

স্প্রিং বুট নিরাপত্তাকে গুরুত্ব সহকারে নেয়, এবং স্প্রিং-এর নিরাপত্তা মডিউল নমনীয় এবং শক্তিশালী নিরাপত্তা অনুশীলন প্রয়োগ করে যা নিরাপত্তার ক্ষেত্রে ডেভেলপারদের তাদের উদ্বেগ কমাতে দেয়, যার জন্য অনেক সময় ওয়েবে বার্তা আদান-প্রদানের নীতিগুলির নিম্ন-স্তরের বোঝার প্রয়োজন হয়। আবেদন

ডিফল্টভাবে, স্প্রিং বুট বেশ কয়েকটি নিরাপত্তা শিরোনাম প্রয়োগ করে:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

এক্স-এক্সএসএস-সুরক্ষা ডিফল্টরূপে অন্তর্ভুক্ত! এই নিরাপত্তা হেডার চেষ্টা করে সনাক্ত XSS চেষ্টা করে, এবং তাদের ব্লক করে। যদিও এটি একটি ব্যর্থ-প্রমাণ প্রক্রিয়া নয়, এবং ব্রাউজারগুলিতে ডিটেক্টরগুলির বিভিন্ন বাস্তবায়ন রয়েছে। কিছু ব্রাউজার, ক্রোমের মত, এমনকি আছে তাদের XSS অডিটর সরিয়ে দিয়েছে. উপরন্তু, স্বয়ংক্রিয় সনাক্তকরণ জন্য কাজ করে প্রতিফলিত XSS আক্রমণ, যখন অন্যান্য ধরনের আক্রমণও বিদ্যমান।

এক্স-এক্সএসএস-প্রটেকশনের আরও আধুনিক বিকল্প হল বিষয়বস্তু-নিরাপত্তা নীতি (CSP), যা প্রাথমিকভাবে নীতিগুলির সাথে মোকাবিলা করে যার উপর সম্পদ লোড করা যেতে পারে, কোন উৎস থেকে এবং কোন প্রান্তে। 2022 সালের হিসাবে, XSS, ক্লিকজ্যাকিং এবং অন্যান্য ধরণের আক্রমণের বিরুদ্ধে CSP হল সর্বোত্তম প্রতিরোধ ব্যবস্থা। সমস্ত ব্রাউজার CSP প্রয়োগ করে না, তাই এটি ডিফল্টরূপে নিরাপত্তা শিরোনামে অন্তর্ভুক্ত করা হয় না।

বিঃদ্রঃ: এমনকি সিএসপি থাকা সত্ত্বেও, এটি যাচাই করার সর্বদা সর্বোত্তম পদক্ষেপ কোন ব্যবহারকারীর ইনপুট এবং নিশ্চিত করুন যে কোড ইনজেকশন প্রতিরোধ করতে আপনার সিস্টেম ব্যবহার করে প্রক্রিয়া করা নিরাপদ।

স্প্রিং বুটে - কাস্টম ওয়েব নিরাপত্তা ব্যবস্থা কনফিগার করতে, আপনি সাধারণত প্রসারিত করবেন WebSecurityConfigurerAdapter ক্লাস, এবং ওভাররাইড করুন configure() পদ্ধতি:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("csp-directives");
    }
}

যেখানে বিষয়বস্তু নিরাপত্তা নীতি নির্দেশাবলী (এ হিসাবে সরবরাহ করা হয় ;-বিচ্ছিন্ন স্ট্রিং) আপনার ব্যবহারের ক্ষেত্রে এবং আপনি কোন উত্সগুলিকে বিশ্বাস করতে চান তার উপর নির্ভর করে:

Content-Security Policy: directive1; directive2; directive3; ... directiveN;

উদাহরণস্বরূপ, একটি ওয়েব অ্যাপ্লিকেশন বিশ্বস্ত ওয়েবসাইটগুলির তালিকা করতে পারে যেগুলি থেকে স্ক্রিপ্টগুলি লোড করা যেতে পারে:

script-src https://trusted.com;

অথবা আপনি যেকোন তৃতীয় পক্ষের ওয়েবসাইট বিশ্বাস করা এড়িয়ে যেতে পারেন:

script-src self;

একইভাবে, একটি অ্যাপ্লিকেশন প্লাগইনগুলিকে বিশ্বাস করতে পারে:

object-src https://trusted.com

আপনি সরবরাহ করতে পারেন এমন বিভিন্ন ধরণের নির্দেশাবলী রয়েছে, যার মধ্যে রয়েছে:

  • default-src - ডিফল্ট ফলব্যাক
  • child-src - বৈধ ওয়েব কর্মী উত্স
  • frame-src - জন্য বৈধ উত্স এস এবং s
  • img-src - ছবির জন্য বৈধ উৎস
  • media-src - জন্য বৈধ উত্স , এবং ট্যাগ
  • script-src - বৈধ স্ক্রিপ্ট উত্স (XSS প্রতিরোধ করতে সাহায্য করে)
  • style-src - জন্য বৈধ উত্স উপাদান
  • base-uri - থেকে অ্যাক্সেসযোগ্য সংস্থান সীমাবদ্ধ করে উপাদান
  • frame-ancestors - এর বৈধ পিতামাতা , , , ইত্যাদি উপাদান
  • ইত্যাদি।

সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!

উদাহরণস্বরূপ, এখানে নীতি নির্দেশাবলীর একটি নিরাপদ সেট রয়েছে:

script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://csp.example.com;

আসুন আমাদের স্প্রিং বুট অ্যাপ্লিকেশনে এগুলি যুক্ত করি:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; require-trusted-types-for 'script'; report-uri https://csp.example.com;");
    }
}

আপনি ব্যবহার করতে পারেন সিএসপি-মূল্যায়নকারী আপনার CSP নির্দেশাবলী বৈধ কিনা তা মূল্যায়ন করতে এবং নিরাপদ, এবং এটি নির্দেশ করবে কোন নির্দেশাবলী সহজেই শোষণযোগ্য। এখানে একটি CSP-নির্দেশ রয়েছে যা Google API-এর জন্য অনুমতি দেয়:

default-src 'self';
object-src 'none';
frame-src 'self' data:; 
script-src 'self' 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' https://storage.googleapis.com; 
style-src 'self' 'unsafe-inline'; 
img-src 'self' data:; 
font-src 'self' data:;
base-uri 'self'

উপসংহার

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

অবশেষে, আমরা সিএসপি নির্দেশাবলী অন্বেষণ করেছি এবং কয়েকটি ভিন্ন নিরাপদ নীতি দেখেছি।

সময় স্ট্যাম্প:

থেকে আরো Stackabuse