পিএইচপি সেশন স্থিরকরণ / হাইজ্যাকিং


145

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

তবে আমি নিশ্চিত নই যে আমি জিনিসগুলি সঠিকভাবে বুঝছি।

সেশন স্থিরকরণ রোধে সাহায্য করার জন্য সেশন_রেজেনারেটে_আইডি (সত্য) কল করা যথেষ্ট; সফলভাবে কাউকে লগ ইন করার পরে? আমি মনে করি আমি এটি সঠিকভাবে বুঝতে পেরেছি।

তিনি অধিবেশন ছিনতাই রোধ করতে $ _GET এর মাধ্যমে ইউআরএলগুলিতে পাস হওয়া টোকেনগুলি ব্যবহার করার বিষয়েও কথা বলেন। এটি ঠিক কীভাবে হবে? আমি অনুমান করছি যে আপনি যখন লগ ইন করেন কেউ তাদের টোকেন উত্পন্ন করে এটি একটি সেশন ভেরিয়েবলের মধ্যে সঞ্চয় করেন, তবে প্রতিটি পৃষ্ঠায় আপনি সেই সেশন ভেরিয়েবলকে $ _GET ভেরিয়েবলের মানের সাথে তুলনা করতে চান?

এই টোকেনটি প্রতি সেশন বা প্রতিটি পৃষ্ঠা লোডে একবার পরিবর্তন করা দরকার?

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


আপনি এই পৃষ্ঠাগুলিতে লিঙ্কগুলি যুক্ত করতে পারেন যেখানে আপনি এই সুপারিশগুলি পেয়েছেন।
গম্বো

উত্তর:


219

ঠিক আছে, দুটি পৃথক তবে সম্পর্কিত সমস্যা আছে এবং প্রতিটি পৃথকভাবে পরিচালনা করা হয়।

সেশন স্থিরকরণ

এখানেই কোনও আক্রমণকারী কোনও ব্যবহারকারীর জন্য একটি সেশনের সেশন সনাক্তকারীকে স্পষ্টভাবে সেট করে। সাধারণত পিএইচপি-তে এটি একটি ইউআরএল দেওয়ার মতো করে সম্পন্ন হয় http://www.example.com/index...?session_name=sessionid। একবার আক্রমণকারী ক্লায়েন্টকে url দেয়, আক্রমণটি একটি সেশন হাইজ্যাকিং আক্রমণ হিসাবে সমান same

অধিবেশন নির্ধারণের কয়েকটি উপায় রয়েছে (সেগুলি সব করুন):

  • session.use_trans_sid = 0আপনার php.iniফাইল সেট করুন। এটি পিএইচপি কে ইউআরএলটিতে সনাক্তকারী অন্তর্ভুক্ত না করার এবং সনাক্তকারীদের জন্য ইউআরএল না পড়তে বলবে tell

  • session.use_only_cookies = 1আপনার php.iniফাইল সেট করুন। এটি পিএইচপি কে সেশন শনাক্তকারীদের সাথে কখনও ইউআরএল ব্যবহার করতে বলবে।

  • সেশনের স্থিতি পরিবর্তনের সময় সেশন আইডি পুনরায় তৈরি করুন। এর অর্থ নীচের যে কোনও একটি:

    • ব্যবহারকারী প্রমাণীকরণ
    • সেশনে সংবেদনশীল তথ্য সংরক্ষণ করা হচ্ছে
    • অধিবেশন সম্পর্কে কিছু পরিবর্তন
    • ইত্যাদি ...

সেশন হাইজ্যাকিং

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

আপনি সরাসরি সেশন হাইজ্যাকিং প্রতিরোধ করতে পারবেন না। তবে এটি ব্যবহার করা খুব কঠিন এবং আরও শক্ত করার জন্য আপনি পদক্ষেপ রাখতে পারেন।

  • একটি শক্তিশালী অধিবেশন হ্যাশ শনাক্তকারী ব্যবহার করুন: session.hash_functionমধ্যে php.ini। যদি পিএইচপি <5.3, এটি session.hash_function = 1SHA1 এর জন্য সেট করুন । যদি পিএইচপি> = 5.3 হয় তবে এটিকে সেট করুন session.hash_function = sha256বা session.hash_function = sha512

  • একটি শক্তিশালী হ্যাশ পাঠান: session.hash_bits_per_characterইন php.ini। এটি সেট করুন session.hash_bits_per_character = 5। যদিও এটি ক্র্যাক করা আরও কঠিন করে তোলে না, আক্রমণকারী যখন সেশন শনাক্তকারীটি অনুমান করার চেষ্টা করে তখন কিছুটা পার্থক্য আসে। আইডিটি ছোট হবে, তবে আরও অক্ষর ব্যবহার করবে।

  • আপনার ফাইলের সাথে session.entropy_fileএবং একটি অতিরিক্ত এনট্রপি সেট করুন। উদাহরণস্বরূপ, এনট্রপি ফাইল থেকে পড়া হবে এমন বাইটের সংখ্যার জন্য পূর্বের এবং পরবর্তীটি সেট করুন ।session.entropy_lengthphp.inisession.entropy_file = /dev/urandomsession.entropy_length = 256

  • ডিফল্ট PHPSESSID থেকে সেশনের নাম পরিবর্তন করুন। এটি কল session_name()করার আগে প্রথম প্যারামিটার হিসাবে আপনার নিজের সনাক্তকারী নাম দিয়ে কল করার মাধ্যমে সম্পন্ন হয় session_start

  • আপনি যদি সত্যিই অচল হয়ে পড়ে থাকেন তবে আপনি সেশনটির নামটিও ঘোরান could তবে আপনার ব্যবহারের উপর নির্ভর করে এটি একটি বিকল্প হতে পারে ...

  • আপনার সেশন সনাক্তকারীটি প্রায়শই ঘোরান। আমি এই প্রতিটি অনুরোধটি করব না (যদি না আপনার সত্যিকারের সেই স্তরের সুরক্ষা প্রয়োজন হয়) তবে এলোমেলো ব্যবধানে। আপনি এটি প্রায়শই পরিবর্তন করতে চান যেহেতু কোনও আক্রমণকারী যদি একটি সেশন হাইজ্যাক করে তবে আপনি চান না যে তারা এটিকে খুব বেশি দিন ব্যবহার করতে সক্ষম হবেন।

  • সেশন থেকে ব্যবহারকারী এজেন্ট$_SERVER['HTTP_USER_AGENT'] অন্তর্ভুক্ত করুন । মূলত, যখন সেশন শুরু হয়, তখন এটি এমন কোনও কিছুতে সঞ্চয় করুন $_SESSION['user_agent']। তারপরে, প্রতিটি পরবর্তী অনুরোধে এটি মিলছে কিনা তা পরীক্ষা করে দেখুন। নোট করুন যে এটি নকল হতে পারে তাই এটি 100% নির্ভরযোগ্য নয়, তবে এটির চেয়ে ভাল।

  • সেশনে ব্যবহারকারীর আইপি ঠিকানা$_SERVER['REMOTE_ADDR'] অন্তর্ভুক্ত করুন । মূলত, যখন সেশন শুরু হয়, তখন এটি এমন কোনও কিছুতে সঞ্চয় করুন $_SESSION['remote_ip']। এটি এমন কিছু আইএসপি থেকে সমস্যাযুক্ত হতে পারে যা তাদের ব্যবহারকারীদের জন্য একাধিক আইপি ঠিকানা ব্যবহার করে (যেমন এওএল করত ব্যবহৃত)। তবে আপনি যদি এটি ব্যবহার করেন তবে এটি অনেক বেশি সুরক্ষিত হবে। কোনও আক্রমণকারীর আইপি ঠিকানাকে নকল করার একমাত্র উপায় হ'ল আসল ব্যবহারকারী এবং আপনার মধ্যে নেটওয়ার্কের মধ্যে কিছু সময় আপস করা। এবং যদি তারা নেটওয়ার্কের সাথে আপস করে তবে তারা ছিনতাইয়ের চেয়েও খারাপ করতে পারে (যেমন এমআইটিএম আক্রমণ ইত্যাদি)।

  • আপনি বৃদ্ধি এবং প্রায়শই তুলনা করে অধিবেশন এবং ব্রাউজারগুলির পাশে একটি টোকেন অন্তর্ভুক্ত করুন। মূলত, প্রতিটি অনুরোধের জন্য $_SESSION['counter']++সার্ভারের পাশে করুন। ব্রাউজারগুলির পাশের জেএসেও কিছু করুন (স্থানীয় সঞ্চয়স্থান ব্যবহার করে)। তারপরে, আপনি যখন কোনও অনুরোধ প্রেরণ করবেন, কেবল একটি টোকেনের নোকস নিন এবং যাচাই করুন যে সার্ভারে ননসটি একই the এটি করে আপনি হাইজ্যাক হওয়া অধিবেশনটি সনাক্ত করতে সক্ষম হবেন কারণ আক্রমণকারীটির সঠিক কাউন্টারটি নেই, বা যদি তাদের কাছে আপনার কাছে একই গণনা প্রেরণকারী 2 টি সিস্টেম রয়েছে এবং একটি জাল হয়েছে তা বলতে পারেন। এটি সমস্ত অ্যাপ্লিকেশনগুলির জন্য কাজ করবে না, তবে সমস্যাটির বিরুদ্ধে লড়াইয়ের একটি উপায়।

দুজনের একটি নোট

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

সেশন আইডি পুনর্জন্ম

আপনি যখনই session_regenerate_idপুরানো সেশনটি ব্যবহার করে সেশন আইডেন্টিফায়ারটি পুনরায় জেনারেট করে মুছে ফেলা উচিত। মূল সেশন হ্যান্ডলারের সাথে এটি স্বচ্ছভাবে ঘটে। তবে কিছু কাস্টম সেশন হ্যান্ডলারগুলি এটি ব্যবহার করেsession_set_save_handler() না এবং এটি পুরানো সেশন শনাক্তকারীদের আক্রমণ করার জন্য উন্মুক্ত। নিশ্চিত হয়ে নিন যে আপনি যদি কাস্টম সেশন হ্যান্ডলারটি ব্যবহার করছেন, আপনি যে শনাক্তকারীটি খোলেন তার উপর নজর রাখেন এবং যদি আপনি এটি সংরক্ষণ না করেন তবে আপনি সেই স্পষ্টতই পুরানোটির শনাক্তকারীটিকে মুছে ফেলা (বা পরিবর্তন) করতে পারবেন।

ডিফল্ট সেশন হ্যান্ডলারটি ব্যবহার করে, আপনি কেবল কল করেই ঠিক আছেন session_regenerate_id(true)। এটি আপনার জন্য পুরানো সেশনের তথ্য সরিয়ে দেবে। পুরানো আইডি আর বৈধ নয় এবং যদি আক্রমণকারী (বা অন্য কোনও ব্যক্তি) এটি ব্যবহার করার চেষ্টা করে তবে একটি নতুন অধিবেশন তৈরির কারণ ঘটবে। কাস্টম সেশন হ্যান্ডলারগুলির সাথে সতর্ক থাকুন যদিও ....

একটি অধিবেশন ধ্বংস

আপনি যদি কোনও সেশন নষ্ট করতে চলেছেন (উদাহরণস্বরূপ লগআউটে), নিশ্চিত হয়ে নিন যে আপনি এটি পুঙ্খানুপুঙ্খভাবে ধ্বংস করেছেন। এর মধ্যে কুকিকে আনসেট করা অন্তর্ভুক্ত। ব্যবহার session_destroy:

function destroySession() {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
    session_destroy();
}

4
চরিত্র প্রতি 4 বিটের পরিবর্তে 5 ব্যবহার করা কোনওভাবেই "শক্তি" পরিবর্তন করে না (যাই হোক না কেন "শক্তি" এর অর্থ)। তবে আপনার পয়েন্টগুলি সাধারণভাবে পরামর্শ দেওয়া হলেও এগুলির কয়েকটি গুরুত্বপূর্ণ বিশদের অভাব রয়েছে। উদাহরণস্বরূপ, পুরান সেশন আইডির সাথে সম্পর্কিত সেশনটির কী ঘটে বা পুরানো সেশন আইডি সহ একটি সেশন কীভাবে এটি অবৈধ হওয়ার পরে পরিচালনা করা উচিত।
গম্বো

2
@ ব্যাটাল: না, এটাই কথা। session_regenerate_idএখনও পুরানো আইডির সাথে সম্পর্কিত সেশনটি অকার্যকর করে না; শুধুমাত্র যদি delete_old_session প্যারামিটার সত্যতে সেট করা থাকে অধিবেশন ধ্বংস হয়ে যাবে। তবে যদি কোনও আক্রমণকারী এই আইডি পুনর্জন্মের সূচনা করে?
গম্বো

6
আমি যখনই সেশন ভেরিয়েবল পরিবর্তন করি তখনই আমি সেশন পুনর্জন্মের সাথে একমত নই, এটি কেবল লগইন / লগআউটে করা উচিত। ব্যবহারকারী-এজেন্ট পরীক্ষা করা অর্থহীন এবং REMOTE_ADDR পরীক্ষা করা সমস্যাযুক্ত। আমি যুক্ত করতে চাই একটি জিনিস session.entropy_file = /dev/urandom। পিএইচপি-র অভ্যন্তরীণ এনট্রপি জেনারেশনটি অত্যন্ত দুর্বল প্রমাণিত হয়েছে এবং / ডিভ / র্যান্ডম বা / ডিভ / ইউরেনম দ্বারা সরবরাহ করা এনট্রপি পুলটি কোনও হার্ডওয়ার আরএনবি ছাড়া ওয়েব সার্ভারে পাওয়ার সেরা।
রোক

4
এছাড়াও আপনার যোগ করা উচিত session.cookie_httponlyএবং session.cookie_secure। প্রথমটি এক্সএসএসকে ব্যর্থ করতে সহায়তা করে (তবে এটি নিখুঁত নয়)। 2nd OWASP A9 থামাতে ভাল উপায় ...
দাড়কাক

4
এমন দুর্দান্ত উত্তরটি বুঝতে পারছেন না তবে সর্বাধিক আমদানি টুকরা অনুপস্থিত: এসএসএল / এইচটিটিপিএস ব্যবহার করুন। কাউন্টার ইনক্রিমেন্টটি একে অপরের পরে দ্রুত একাধিক অনুরোধে সমস্যার উত্স, কোনও ব্যবহারকারী দু'বার একটি পৃষ্ঠা সতেজ করে বা দু'বার জমা বোতামগুলিতে আঘাত করে। আজকাল সমস্ত মোবাইল ব্যবহারকারী এবং আইপি'র পরিবর্তন করে আইপি অ্যাড্রেস সমাধানটি একটি সমস্যা। আপনি আইপির প্রথম সেটটি দেখতে পেয়েছিলেন তবে এখনও এটি সমস্যার জন্য জিজ্ঞাসা করছে। সেরাটি প্রথম স্থানে সেশন আইডি আবিষ্কার করা আটকাচ্ছে এবং এটি এসএসএল / এইচটিটিপিএস ব্যবহার করছে।
সান

37

উভয় সেশন আক্রমণ একই লক্ষ্য: অন্য ব্যবহারকারীর বৈধ সেশনে অ্যাক্সেস অর্জন করুন। তবে আক্রমণ ভেক্টরগুলি পৃথক:

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

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

সেশন ফিক্সেশন আক্রমণগুলি রোধ করতে, নিশ্চিত করুন:

  • সেশন আইডিটি কেবল একটি কুকি থেকে গৃহীত হয় (এতে সেশন.উজ_অনলি_ কুকি সেট করুন true) এবং এটি সম্ভব হলে কেবল এইচটিটিপিএসের জন্য তৈরি করুন (সেশন কোড । কুকি_সিকিউর সেট করুন true); আপনি উভয় সঙ্গে করতে পারেন session_set_cookie_params

সেশন হাইজ্যাকিং আক্রমণ রোধ করতে, নিশ্চিত করুন:

উভয় অধিবেশন আক্রমণ প্রতিরোধ করতে, তা নিশ্চিত করুন:

  • আপনার অ্যাপ্লিকেশন শুরু করা সেশনগুলি কেবল মেনে নিতে। আপনি ক্লায়েন্ট নির্দিষ্ট তথ্য দিয়ে দীক্ষায় একটি সেশন ফিঙ্গারপ্রিন্ট করে এটি করতে পারেন। আপনি ব্যবহারকারীর এজেন্ট আইডি ব্যবহার করতে পারেন তবে দূরবর্তী আইপি ঠিকানা বা অনুরোধের মধ্যে থেকে পরিবর্তন হতে পারে এমন অন্য কোনও তথ্য ব্যবহার করবেন না।
  • session_regenerate_id(true)প্রমাণীকরণের চেষ্টা ( trueকেবলমাত্র সাফল্যে) বা সুযোগ-সুবিধার পরিবর্তনের পরে সেশন আইডি ব্যবহার করে এবং পুরানো সেশনটি ধ্বংস করতে। (আপনি যদি পুরনো আইডির সাথে সম্পর্কিত সেশনটি সংরক্ষণ করতে চান তবে আইডিটি পুনরায় জেনারেট করার আগে$_SESSION ব্যবহারের যে কোনও পরিবর্তন সঞ্চিত রাখবেন তা নিশ্চিত করুন ; অন্যথায় কেবল নতুন আইডির সাথে সেশনটি সেই পরিবর্তনগুলি দ্বারা প্রভাবিত হবে))session_write_close
  • যথাযথ সেশনটির মেয়াদোত্তীর্ণ প্রয়োগকরণ ব্যবহার করতে (দেখুন 30 মিনিটের পরে আমি কীভাবে পিএইচপি সেশন শেষ করব? )

দুর্দান্ত পোস্ট, বিশেষত শেষ বিভাগ।
ম্যাটিস

6

আপনার উল্লেখ করা টোকেনগুলি একটি "ননস" - একবার ব্যবহার করা নম্বর used এগুলি অগত্যা কেবল একবার ব্যবহার করতে হবে না, তবে তারা যত বেশি সময় ব্যবহার করবে তত বেশি প্রতিকূলতা যা ননসকে ধরে রাখতে এবং অধিবেশন হাইজ্যাক করার জন্য ব্যবহার করা যেতে পারে।

ননসের আরেকটি অসুবিধা হ'ল এমন একটি সিস্টেম তৈরি করা খুব শক্ত যে এটি ব্যবহার করে এবং একই ফর্মটিতে একাধিক সমান্তরাল উইন্ডোজকে মঞ্জুরি দেয়। উদাহরণস্বরূপ ব্যবহারকারী একটি ফোরামে দুটি উইন্ডো খোলে এবং দুটি পোস্টে কাজ শুরু করে:

window 'A' loads first and gets nonce 'P'
window 'B' loads second and gets nonce 'Q'

আপনার যদি একাধিক উইন্ডোজ ট্র্যাক করার কোনও উপায় না থাকে তবে আপনি কেবল একটি ননস সংরক্ষণ করেছেন - উইন্ডো বি / কিউ। তারপরে ব্যবহারকারী যখন উইন্ডো এ থেকে তাদের পোস্ট জমা দেয় এবং ননস 'পি' তে পাস করে, THS সিস্টেম পোস্টটি হিসাবে প্রত্যাখ্যান করবে P != Q


সুতরাং এই সেশন স্থিরকরণের সাথে কি আছে?
রোক

2
বিশেষত এক সাথে অনেক AJAX অনুরোধগুলি ব্যবহারের ক্ষেত্রে তার একটি বৈধ পয়েন্ট রয়েছে।
ড্যানিয়েলজি

2

আমি শিফলেটটির নিবন্ধটি পড়িনি, তবে আমি মনে করি আপনি কিছু ভুল বুঝেছেন।

ডিফল্টরূপে পিএইচপি যখনই ক্লায়েন্ট কুকিজ গ্রহণ করে না তখন ইউআরএলে সেশন টোকনটি পাস করে। সর্বাধিক সাধারণ ক্ষেত্রে সেশন টোকেনটি কুকি হিসাবে সংরক্ষণ করা হয়।

এর অর্থ হ'ল আপনি যদি URL এ একটি সেশন টোকেন রাখেন তবে পিএইচপি এটি সনাক্ত করবে এবং এটি পরে ব্যবহার করার চেষ্টা করবে। যখন কেউ একটি অধিবেশন তৈরি করে এবং তারপরে সেশন টোকেন ধারণ করে এমন একটি URL খোলার মাধ্যমে অন্য ব্যবহারকারীকে একই সেশনটি ভাগ করে নেওয়ার কৌশল করে তখন সেশন ফিক্সেশন হয়। যদি ব্যবহারকারী কোনও উপায়ে প্রমাণীকরণ করে তবে দূষিত ব্যবহারকারী তার পরে কোনও অনুমোদনপ্রাপ্ত ব্যক্তির সেশন টোকেন জানেন, যার বিভিন্ন সুযোগ-সুবিধা থাকতে পারে।

আমি যেমন শিফলেট ব্যাখ্যা করেছি নিশ্চিতভাবে, করণীয় হ'ল প্রতিবার ব্যবহারকারীর পরিবর্তনের সুযোগ-সুবিধার জন্য আলাদা টোকেনটি পুনরায় তৈরি করা।


এটি যুক্ত করার জন্য, দয়া করে পূর্ববর্তী কোনও খোলা সেশনগুলি অবশ্যই ধ্বংস করবেন তা নিশ্চিত করুন কারণ তারা বিদ্যমান ব্যবহারকারীর অনুমতি সহ এখনও বৈধ থাকবে।
corrodedmonkee

0

হ্যাঁ আপনি লগইন করার পরে সেশন আইডি পুনরায় জেনারেট করে সেশন ফিক্সেশন আটকাতে পারবেন। এইভাবে যদি আক্রমণকারী সদ্য প্রমাণীকৃত সেশনের কুকি মানটি জানতে না পারে। সমস্যাটি সম্পূর্ণভাবে থামিয়ে দেয় এমন আরও একটি পদ্ধতির session.use_only_cookies=Trueআপনার রানটাইম কনফিগারেশনে সেট করা আছে। একজন আক্রমণকারী অন্য ডোমেনের প্রসঙ্গে একটি কুকির মান সেট করতে পারে না। সেশন স্থিরকরণ জিইটি বা পোষ্ট হিসাবে কুকির মান প্রেরণের উপর নির্ভর করছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.