একটি কাস্টম অ্যাপ্লিকেশন অনুমতি সংজ্ঞায়িত করুন

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

পটভূমি

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

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

অ্যাপ সাইনিং

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

ডিভাইস তৈরির সময় শেষ হওয়ার পরে স্বাক্ষরের অনুমতি দিন

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) থেকে শুরু করে, স্বাক্ষর-স্তরের অনুমতির জন্য knownCerts অ্যাট্রিবিউট আপনাকে ঘোষণার সময় পরিচিত স্বাক্ষরকারী সার্টিফিকেটের ডাইজেস্টগুলি উল্লেখ করতে দেয়।

আপনি knownCerts অ্যাট্রিবিউটটি ঘোষণা করতে পারেন এবং একটি নির্দিষ্ট স্বাক্ষর-স্তরের অনুমতির জন্য আপনার অ্যাপের protectionLevel অ্যাট্রিবিউটে knownSigner ফ্ল্যাগ ব্যবহার করতে পারেন। তারপর, সিস্টেমটি একটি অনুরোধকারী অ্যাপকে সেই অনুমতি দেয় যদি অনুরোধকারী অ্যাপের স্বাক্ষরকারী বংশের কোনও স্বাক্ষরকারী, বর্তমান স্বাক্ষরকারী সহ, knownCerts অ্যাট্রিবিউটে অনুমতির সাথে ঘোষিত ডাইজেস্টগুলির একটির সাথে মেলে।

knownSigner পতাকা ডিভাইস এবং অ্যাপগুলিকে ডিভাইস তৈরি এবং চালানের সময় অ্যাপগুলিতে স্বাক্ষর না করেই অন্যান্য অ্যাপগুলিকে স্বাক্ষরের অনুমতি দিতে দেয়।

ব্যবহারকারী আইডি এবং ফাইল অ্যাক্সেস

ইনস্টলেশনের সময়, অ্যান্ড্রয়েড প্রতিটি প্যাকেজকে একটি স্বতন্ত্র লিনাক্স ব্যবহারকারী আইডি দেয়। ডিভাইসে প্যাকেজের মেয়াদ থাকাকালীন পরিচয়টি অপরিবর্তিত থাকে। ভিন্ন ডিভাইসে, একই প্যাকেজের একটি ভিন্ন UID থাকতে পারে—বিষয়টি হল প্রতিটি প্যাকেজের একটি নির্দিষ্ট ডিভাইসে একটি স্বতন্ত্র UID থাকে।

যেহেতু নিরাপত্তা প্রয়োগ প্রক্রিয়া স্তরে ঘটে, তাই যেকোনো দুটি প্যাকেজের কোড সাধারণত একই প্রক্রিয়ায় চলতে পারে না, কারণ তাদের ভিন্ন লিনাক্স ব্যবহারকারী হিসাবে চালাতে হয়।

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

অ্যান্ড্রয়েডের নিরাপত্তা মডেল সম্পর্কে আরও তথ্যের জন্য, অ্যান্ড্রয়েড নিরাপত্তা ওভারভিউ দেখুন।

অনুমতি নির্ধারণ এবং প্রয়োগ করুন

আপনার নিজস্ব অনুমতিগুলি কার্যকর করতে, আপনাকে প্রথমে আপনার AndroidManifest.xml এ এক বা একাধিক <permission> উপাদান ব্যবহার করে সেগুলি ঘোষণা করতে হবে।

নামকরণের রীতি

সিস্টেমটি একাধিক প্যাকেজকে একই নামের অনুমতি ঘোষণা করার অনুমতি দেয় না যদি না সমস্ত প্যাকেজ একই সার্টিফিকেট দিয়ে স্বাক্ষরিত হয়। যদি একটি প্যাকেজ একটি অনুমতি ঘোষণা করে, তাহলে সিস্টেম ব্যবহারকারীকে একই অনুমতি নামের অন্যান্য প্যাকেজ ইনস্টল করার অনুমতি দেয় না, যদি না সেই প্যাকেজগুলি প্রথম প্যাকেজের মতো একই সার্টিফিকেট দিয়ে স্বাক্ষরিত হয়।

আমরা সুপারিশ করি যে অ্যাপের প্যাকেজ নামের সাথে অনুমতিগুলি পূর্বে যুক্ত করা হোক, বিপরীত-ডোমেইন-স্টাইল নামকরণ ব্যবহার করে, তারপরে .permission. এবং তারপর উপরের SNAKE_CASE-তে অনুমতিটি যে ক্ষমতার প্রতিনিধিত্ব করে তার বিবরণ দিন। উদাহরণস্বরূপ, com.example.myapp.permission.ENGAGE_HYPERSPACE

এই সুপারিশ অনুসরণ করলে সংঘর্ষের নামকরণ এড়ানো যায় এবং কাস্টম অনুমতির মালিক এবং উদ্দেশ্য স্পষ্টভাবে সনাক্ত করতে সাহায্য করে।

উদাহরণ

উদাহরণস্বরূপ, যে অ্যাপটিকে নিয়ন্ত্রণ করতে হবে যে অন্য কোন অ্যাপগুলি তার কোনও কার্যকলাপ শুরু করতে পারে, সে এই ক্রিয়াকলাপের জন্য নিম্নলিখিতভাবে অনুমতি ঘোষণা করতে পারে:

<manifest
  xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.myapp" >
    
    <permission
      android:name="com.example.myapp.permission.DEADLY_ACTIVITY"
      android:label="@string/permlab_deadlyActivity"
      android:description="@string/permdesc_deadlyActivity"
      android:permissionGroup="android.permission-group.COST_MONEY"
      android:protectionLevel="dangerous" />
    ...
</manifest>

protectionLevel অ্যাট্রিবিউটটি প্রয়োজনীয় এবং এটি সিস্টেমকে বলে যে ব্যবহারকারীদের অনুমতি প্রয়োজন এমন অ্যাপ সম্পর্কে কীভাবে জানাতে হবে অথবা কোন অ্যাপগুলি অনুমতি ধরে রাখতে পারে, যেমনটি লিঙ্ক করা ডকুমেন্টেশনে বর্ণিত হয়েছে।

android:permissionGroup অ্যাট্রিবিউটটি ঐচ্ছিক এবং শুধুমাত্র ব্যবহারকারীকে সিস্টেমের অনুমতি প্রদর্শনে সহায়তা করার জন্য ব্যবহৃত হয়। বেশিরভাগ ক্ষেত্রে, আপনি এটি একটি স্ট্যান্ডার্ড সিস্টেম গ্রুপে সেট করেন ( android.Manifest.permission_group এ তালিকাভুক্ত), যদিও আপনি নিম্নলিখিত বিভাগে বর্ণিত হিসাবে নিজেই একটি গ্রুপ সংজ্ঞায়িত করতে পারেন। আমরা একটি বিদ্যমান গ্রুপ ব্যবহার করার পরামর্শ দিচ্ছি, কারণ এটি ব্যবহারকারীকে দেখানো অনুমতি UI কে সহজ করে তোলে।

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

CALL_PHONE অনুমতির জন্য একটি লেবেল এবং বর্ণনার একটি উদাহরণ এখানে দেওয়া হল:

<string name="permlab_callPhone">directly call phone numbers</string>
<string name="permdesc_callPhone">Allows the app to call non-emergency
phone numbers without your intervention. Malicious apps may cause unexpected
calls on your phone bill.</string>

একটি অনুমতি গ্রুপ তৈরি করুন

পূর্ববর্তী বিভাগে দেখানো হয়েছে, আপনি android:permissionGroup অ্যাট্রিবিউট ব্যবহার করে সিস্টেমকে ব্যবহারকারীর অনুমতি বর্ণনা করতে সাহায্য করতে পারেন। বেশিরভাগ ক্ষেত্রে, আপনি এটি একটি স্ট্যান্ডার্ড সিস্টেম গ্রুপে সেট করেন ( android.Manifest.permission_group এ তালিকাভুক্ত), তবে আপনি <permission-group> ব্যবহার করে আপনার নিজস্ব গ্রুপও সংজ্ঞায়িত করতে পারেন।

<permission-group> উপাদানটি অনুমতিগুলির একটি সেটের জন্য একটি লেবেল সংজ্ঞায়িত করে—উভয় <permission> উপাদানগুলির সাথে ম্যানিফেস্টে ঘোষিত এবং অন্য কোথাও ঘোষিত। এটি কেবলমাত্র ব্যবহারকারীর কাছে উপস্থাপন করার সময় অনুমতিগুলি কীভাবে গোষ্ঠীভুক্ত করা হয় তা প্রভাবিত করে। <permission-group> উপাদানটি গ্রুপের সাথে সম্পর্কিত অনুমতিগুলি নির্দিষ্ট করে না, তবে এটি গ্রুপটিকে একটি নাম দেয়।

<permission> এলিমেন্টের permissionGroup অ্যাট্রিবিউটে গ্রুপের নাম নির্ধারণ করে আপনি গ্রুপে একটি অনুমতি দিতে পারেন।

<permission-tree> উপাদানটি কোডে সংজ্ঞায়িত অনুমতিগুলির একটি গ্রুপের জন্য একটি নেমস্পেস ঘোষণা করে।

কাস্টম অনুমতির সুপারিশ

আপনি আপনার অ্যাপের জন্য কাস্টম অনুমতি নির্ধারণ করতে পারেন এবং <uses-permission> উপাদানগুলি সংজ্ঞায়িত করে অন্যান্য অ্যাপ থেকে কাস্টম অনুমতির জন্য অনুরোধ করতে পারেন। তবে, এটি করা প্রয়োজন কিনা তা সাবধানে মূল্যায়ন করুন।

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

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

সম্পর্কে পড়া চালিয়ে যান:

<uses-permission>
আপনার অ্যাপের প্রয়োজনীয় সিস্টেম অনুমতি ঘোষণা করে এমন ম্যানিফেস্ট ট্যাগের API রেফারেন্স।

আপনার আগ্রহ থাকতে পারে:

অ্যান্ড্রয়েড নিরাপত্তা ওভারভিউ
অ্যান্ড্রয়েড প্ল্যাটফর্মের নিরাপত্তা মডেল সম্পর্কে বিস্তারিত আলোচনা।