ব্যক্তিগত ভেরিয়েবলগুলি সীমাবদ্ধ করা যায় না বলে প্রতিফলন কি কোনও অসুবিধা?


14

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


2
নিম্ন বিশ্বাসের কোডটি ব্যক্তিগত প্রতিচ্ছবি ব্যবহার করতে পারে না (কমপক্ষে অন্যান্য সমাবেশগুলিতে নয়, আমি বিশদটি ভুলে গিয়েছি)। সম্পূর্ণ বিশ্বাসের কোডটি প্রক্রিয়াটির মধ্যে থাকা কোনও বিধিনিষেধকে বাইপাস করতে পয়েন্টারগুলিকে সহজেই ব্যবহার করতে পারে।
কোডসইনচাউস

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

6
এটি Google, সেখানে অনুরূপ প্রচুর আছে: stackoverflow.com/questions/7566626/... , stackoverflow.com/questions/29246028/... , stackoverflow.com/questions/18619754/java-preventing-reflection ...
dagnelies

4
ব্যবহারকারীরা যা চান তা করতে আপনার কোডটি কেবল প্যাচ করতে পারে। ডিআরএমের আংশিক ব্যতিক্রম (যা স্থায়ী সুরক্ষা সরবরাহ করার পক্ষে যথেষ্ট শক্তিশালী নয়), আপনার আবেদনে (বাইনারি বা উত্স কোড) যে কেউ অ্যাক্সেস পেয়েছেন তারা এটি দিয়ে কিছু করতে পারেন।
ব্রায়ান

6
এটি কি কোনও ভাষা নির্দিষ্ট প্রশ্ন নয়? প্রতিবিম্ব বিভিন্ন ভাষায় ভিন্নভাবে কাজ করে। আমি ভাবছি যে এই প্রশ্নের জাভা বা অন্য কোনও কিছুর জন্য ট্যাগ থাকা উচিত।
ওয়েন কনরাড

উত্তর:


54

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


33
এটি সর্বজনীনভাবে সত্য নয়। এরিক লিপার্টের উদ্ধৃতি দিয়ে , "সিএলআর-এ অ্যাক্সেস মডিফায়ারগুলি সুরক্ষা বৈশিষ্ট্য। কোডটি চালাচ্ছেন এমন সিস্টেমের দূষিত ব্যবহারকারীদের ক্ষেত্রে এটি (এবং না) প্রযোজ্য না । তবে এটি দূষিত প্লাগ-ইনগুলির ক্ষেত্রে প্রযোজ্য।
ব্রায়ান

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

3
@ ব্রায়ান এটি ১০০% সঠিক নয় - কিছু প্রতিবিম্ব অপারেশন রয়েছে যা আপনি আংশিক বিশ্বস্ত কোডে করতে পারেন; এটি কেবল আপনাকে ব্যক্তিগত ক্ষেত্রগুলি অ্যাক্সেস করার মতো জিনিসগুলি করার অনুমতি দেয় না।
লুয়ান

1
@ ব্রায়ান যতক্ষণ না কেউ কোনও দুর্বলতা বা সোস্যাল ইঞ্জিনিয়ারিং খুঁজে না পাওয়া যায় যা তাদেরকে বিধিনিষেধগুলি বাইপাস করার অনুমতি দেয়। তাদের সেভাবে ব্যবহার করার চেষ্টা করার কোনও মানে নেই। এটি তাদের প্রাথমিক উদ্দেশ্য নয়।
jpmc26

31

শ্রেণি অ্যাক্সেসের অধিকারগুলিতে ভেষজ সুটার উদ্ধৃত করতে :

"এখানে বিষয়টি মারফি বনামের বিরুদ্ধে রক্ষা এবং ম্যাকিয়াভেলির বিরুদ্ধে রক্ষা করা ... অর্থাৎ দুর্ঘটনাজনিত অপব্যবহারের বিরুদ্ধে রক্ষা করা (যা ভাষা খুব ভাল করে) বনাম ইচ্ছাকৃত অপব্যবহারের বিরুদ্ধে রক্ষা করা (যা কার্যকরভাবে অসম্ভব) শেষ পর্যন্ত, যদি একজন প্রোগ্রামার সিস্টেমটিকে বিকৃত করার জন্য খারাপভাবে চান, তিনি একটি উপায় খুঁজে পাবেন "


2
এমন অনেক সময় আছে যেখানে আপনাকে অবিশ্বস্ত কোড স্যান্ডবক্স করা দরকার তবে এটি একটি দুরূহ কাজ। ত্রুটির বিরুদ্ধে রক্ষা করা (মারফি) আরও সাধারণ বিষয়।
পল

#define private public(এটি আসলে অপরিজ্ঞাত আচরণের বিষয়টি উপেক্ষা করে) এবং ভয়েলা আপনার ক্লাসের সীমিত অংশে আমার বাইরে থেকে সম্পূর্ণ প্রবেশ রয়েছে access
বলভ

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

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

@ বলভ যে স্টান্ট ভাষা নির্ভর করে বলে আমি মনে করি। যদিও সি / সি ++ প্রিপ্রসেসরগুলি সম্ভবত আপনাকে এটি থেকে দূরে সরিয়ে দেবে, সেগুলি ব্যতীত যে কোনও কিছুই সম্ভবত "# সংজ্ঞায়িত সংরক্ষিত শব্দ ব্যবহার করতে পারে না" ত্রুটি দেয়।
ড্যান ফায়ারল্ড ফায়ারলাইট

10

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


1
অন্য কথায়, এটি একটি সম্ভাব্য ভাঙা এপিআই রোধ করার একটি উপায় - অসম্পূর্ণ প্রয়োজনীয়তা বা অসম্পূর্ণ বাস্তবায়নের কারণে হোক।
মনিকা

4

আপনি আরও এক স্তরে গিয়ে আরও অ্যাক্সেসযোগ্যতা সীমাবদ্ধ করেছেন: কার্যকর করার পরিবেশ।

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

জাভাতে এটি করার বিষয়ে আরও তথ্য: প্রতিচ্ছবি সুরক্ষা


3

আপনি কোন প্রতিবিম্বের কথা বলছেন?

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

আপনি যদি এনক্যাপসুলেশন সম্পর্কে উদ্বিগ্ন হন তবে সহজ সমাধানটি হ'ল কেবল প্রতিচ্ছবি সিস্টেমটি ব্যবহার না করা যা এটি সংরক্ষণ করে না।


3

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

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

মনে রাখবেন যে এটি স্পষ্টতই সুরক্ষার সমস্যা তৈরি করে যেখানে কোনও তৃতীয় পক্ষ আপনার ডেটা অ্যাক্সেস করতে পারে ; এমন কিছু যা স্ট্রিং এবং অনুরূপ ডেটা স্ট্রাকচারের এনক্রিপ্ট হওয়া রূপগুলিতে বাড়ে । তবে এই জাতীয় ব্যবহার থেকে আপনার কোড রক্ষা করা আরও সম্পর্কিত ওএস এবং কোড-স্তরের অ্যাক্সেস বিধিনিষেধগুলি এবং প্রতি সেফ প্রতিফলনের সাথে এর কোনও যোগসূত্র নেই।


2
মনে রাখবেন যে সি # তে, কেবলমাত্র সম্পূর্ণ বিশ্বাসযোগ্য কোডটি ব্যক্তিগত সদস্যদের প্রতিফলিত করতে পারে। মেমরি প্রসেস করতে সরাসরি লেখা এখনও কাজ করে তবে স্থানীয় কোডের চেয়ে শক্ত
লুয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.