.NET এ কখন আমার সিকিউরস্ট্রিং লাগবে?


179

আমি নেট নেট সিকিউরস্ট্রিংয়ের উদ্দেশ্যটি ছাঁটাই করার চেষ্টা করছি। এমএসডিএন থেকে:

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

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

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

স্বয়ংক্রিয় এনক্রিপশন কি বড় পরিশোধ?

এবং কেন আমি কেবল বলতে পারি না:

SecureString password = new SecureString("password");

পরিবর্তে

SecureString pass = new SecureString();
foreach (char c in "password".ToCharArray())
    pass.AppendChar(c);

সিকিউরস্ট্রিংয়ের কোন দিকটি আমি অনুপস্থিত?


3
11 বছর পরে এবং এমএস আর SecureStringনতুন বিকাশের জন্য সুপারিশ করে না : github.com/dotnet/platform-compat/blob/master/docs/DE0001.md
ম্যাট থমাস

উত্তর:


4

আমি সিকিউরস্ট্রিং ব্যবহার বন্ধ করব। দেখে মনে হচ্ছে পিজি ছেলেরা এর জন্য সমর্থন বাদ দিচ্ছে। সম্ভবত এটি ভবিষ্যতেও টানুন - https://github.com/dotnet/apireviews/tree/master/2015-07-14-securestring

আমাদের। নেট কোরের সমস্ত প্ল্যাটফর্ম জুড়ে সিকিউরস্ট্রিং থেকে এনক্রিপশন সরিয়ে নেওয়া উচিত - আমাদের সিকিউরস্ট্রিং অপ্রচলিত করা উচিত - আমাদের সম্ভবত। নেট কোরটিতে সিকিউরস্ট্রিং প্রকাশ করা উচিত নয় should


1
লিঙ্কটি মারা গেছে তবে এটি এগিয়ে চলেছে বলে মনে হচ্ছে: ডকস.মাইক্রোসফটকম / en-us / dotnet / api/ … .. পাথ ফরোয়ার্ড এক্সপেক্টর সম্পর্কে "বেশিরভাগ দুর্বল নির্দেশিকা সহ" শংসাপত্রগুলি ব্যবহার করবেন না "- github.com / ডটনেট / প্ল্যাটফর্ম- কমপ্যাট / ব্লব / মাস্টার / ডকস / DE0001.md .. আপনি নিজের শংসাপত্রগুলির ব্যক্তিগত কী রক্ষা করতে কোনও পাসওয়ার্ড ব্যবহার করার সাহস করবেন না!
felickz

1
11 বছর পরে, এই উত্তরটি এখন 'নতুন' সঠিক বলে মনে হচ্ছে। লিঙ্কগুলি বাসি হয়ে যাচ্ছে বলে মনে হচ্ছে তবে এমএসের দিকনির্দেশনাটি হ'ল: সিকিউরস্ট্রিং ব্যবহার করা উচিত নয়
রিচার্ড মরগান

109

কাঠামোর কিছু অংশ যা বর্তমানে ব্যবহার করছে SecureString:

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

যেমনটি অন্যেরা বলেছেন, আপনি SecureStringচরিত্র দ্বারা চরিত্রটি তৈরি করার কারণটি অন্যথায় করার প্রথম স্পষ্ট ত্রুটি কারণ: সম্ভবত আপনি ইতিমধ্যে একটি সরল স্ট্রিং হিসাবে গোপনীয় মানটি রেখেছেন, তবে কী কথা?

SecureStringএকটি চিকেন এবং ডিম সমস্যা সমাধানের প্রথম পদক্ষেপ, সুতরাং বেশিরভাগ বর্তমান পরিস্থিতিতে এগুলি ব্যবহার করার জন্য নিয়মিত স্ট্রিংগুলিতে তাদের আবার রূপান্তর করা প্রয়োজন, ফ্রেমওয়ার্কে তাদের অস্তিত্ব এখন তাদের জন্য আরও ভাল সমর্থন মানে ভবিষ্যত - কমপক্ষে এমন একটি পয়েন্টে যেখানে আপনার প্রোগ্রামটি দুর্বল লিঙ্ক হতে হবে না।


2
আমি প্রসেসস্টার্টআইএনফো-র পাসওয়ার্ডের সম্পত্তি দেখছিলাম; এমনকি প্রকারের দিকেও মনোযোগ দিচ্ছি না, কম্পাইলারটি আমার দিকে ঝাঁকুনি না হওয়া পর্যন্ত আমি কেবল এটি নিয়মিত স্ট্রিংয়ে রেখেছি।
রিচার্ড মরগান

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

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

2
"সম্ভবতঃ আপনার ইতিমধ্যে একটি সরল স্ট্রিং হিসাবে গোপনীয় মান রয়েছে, তবে কী কথা?" এই প্রশ্নের উত্তর আছে? মনে হয় এটি দীর্ঘস্থায়ীভাবে স্মৃতিতে কোনও পাসওয়ার্ড সঞ্চিত রাখতে চাইলে এটি একটি "কিছুই নয় এর চেয়ে ভাল" সমাধান।
xr280xr

2
ব্যবহারের কয়েকটি সহজ কোড উদাহরণ থাকা সম্পর্কে কী? আমি বিশ্বাস করি যে এটি কীভাবে এবং কখন ব্যবহার করব তা আমি আরও ভালভাবে বুঝতে পারি।
কোডে

37

সম্পাদনা : সিকিউরস্ট্রিং ব্যবহার করবেন না

বর্তমান নির্দেশিকা এখন বলছে যে ক্লাসটি ব্যবহার করা উচিত নয়। বিশদটি এই লিঙ্কটিতে পাওয়া যাবে: https://github.com/dotnet/platform-compat/blob/master/docs/DE0001.md

নিবন্ধ থেকে:

DE0001: সিকিউরস্ট্রিং ব্যবহার করা উচিত নয়

প্রেরণা

  • এর উদ্দেশ্য SecureStringহ'ল প্রক্রিয়া মেমরিতে গোপনীয় জিনিসগুলি সরল পাঠ্য হিসাবে সংরক্ষণ করা উচিত।
  • তবে, এমনকি উইন্ডোজেও, SecureString ওএস ধারণা হিসাবে বিদ্যমান নেই।
    • এটি উইন্ডোটিকে সরল পাঠ্যকে ছোট করে তুলবে; এটি সম্পূর্ণরূপে এটি প্রতিরোধ করে না। নেটকে এখনও স্ট্রিংটিকে একটি সাধারণ পাঠ্য উপস্থাপনায় রূপান্তর করতে হবে।
    • সুবিধাটি হ'ল সরল পাঠ্য উপস্থাপনা উদাহরণ হিসাবে ঘুরে না System.String- নেটিভ বাফারের জীবনকাল সংক্ষিপ্ত is
  • অ্যারের বিষয়বস্তু .NET ফ্রেমওয়ার্ক ব্যতীত এনক্রিপ্ট করা আছে।
    • .NET ফ্রেমওয়ার্কে, অভ্যন্তরীণ চর অ্যারের সামগ্রীগুলি এনক্রিপ্ট করা হয়। .NET সমস্ত পরিবেশে এনক্রিপশন সমর্থন করে না, হয় নিখোঁজ API বা কী পরিচালিত সমস্যার কারণে।

সুপারিশ

ব্যবহার করবেন না SecureStringনতুন কোডের জন্য । .NET কোর-এ কোড পোর্ট করার সময় বিবেচনা করুন যে অ্যারের সামগ্রীগুলি মেমরিতে এনক্রিপ্ট করা হয়নি।

শংসাপত্রাদি নিয়ে কাজ করার সাধারণ পদ্ধতির হ'ল এগুলি এড়ানো এবং পরিবর্তে শংসাপত্র বা উইন্ডোজ প্রমাণীকরণের মতো প্রমাণীকরণের জন্য অন্যান্য উপায়গুলির উপর নির্ভর করা।

সমাপ্তি সম্পাদনা: নীচের মূল সংক্ষিপ্তসার

প্রচুর দুর্দান্ত উত্তর; এখানে যা আলোচনা করা হয়েছে তার দ্রুত সংক্ষিপ্তসার এখানে দেওয়া হল।

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

  • এনক্রিপশন (মেমরি ডাম্প বা পৃষ্ঠা ক্যাশিংয়ের ক্ষেত্রে)
  • স্মৃতিতে পিন করছে
  • কেবল পঠনযোগ্য হিসাবে চিহ্নিত করার ক্ষমতা (আরও কোনও পরিবর্তন রোধ করতে)
  • একটি ধ্রুব স্ট্রিং প্রবেশ করার অনুমতি না দিয়ে নিরাপদ নির্মাণ

বর্তমানে, সিকিউরস্ট্রিং ব্যবহারের মধ্যে সীমাবদ্ধ তবে ভবিষ্যতে আরও ভাল গ্রহণের প্রত্যাশা রয়েছে।

এই তথ্যের উপর ভিত্তি করে, সিকিউরস্ট্রিংয়ের নির্মাতাকে কেবল একটি স্ট্রিং নেওয়া উচিত নয় এবং এটিকে চর অ্যারে পর্যন্ত টুকরো করা উচিত কারণ স্ট্রিংটি বানানটি সিকিউরস্ট্রিংয়ের উদ্দেশ্যকে পরাস্ত করে।

অতিরিক্ত তথ্য:

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

সম্পাদনা: অনেকের মধ্যে ভাল তথ্য রয়েছে বলে সেরা উত্তরটি বেছে নেওয়া আমার পক্ষে শক্ত মনে হয়েছিল; খুব খারাপ কোনও সহায়ক উত্তর বিকল্প নেই।


19

সংক্ষিপ্ত উত্তর

কেন আমি শুধু বলতে পারি না:

SecureString password = new SecureString("password");

কারণ এখন আপনার passwordস্মৃতি আছে; এটি মুছানোর কোনও উপায় ছাড়াই - যা সিকিউরস্ট্রিংয়ের ঠিক বিন্দু

দীর্ঘ উত্তর

কারণ SecureString কারণ আপনার ব্যবহার করতে পারবেন না বিদ্যমান ZeroMemory সংবেদনশীল তথ্য মুছা যখন আপনি এটি দিয়ে কাজ সম্পন্ন হয়। এটি সিএলআর কারণে বিদ্যমান একটি সমস্যা সমাধানের জন্য বিদ্যমান ।

একটি নিয়মিত নেটিভ অ্যাপ্লিকেশন আপনি কল করতে হবে SecureZeroMemory:

জিরো দিয়ে মেমরির একটি ব্লক পূরণ করে।

দ্রষ্টব্য : সিকিউর জিরো মেমরিটি সমান ZeroMemory, সংকলক ব্যতীত এটি অপ্টিমাইজ করবে না except

সমস্যাটি হ'ল আপনি কল করতে পারবেন নাZeroMemory বা SecureZeroMemoryভিতরে .NET। এবং .NET স্ট্রিংগুলি অপরিবর্তনীয়; এমনকি স্ট্রিংয়ের বিষয়বস্তু আপনি ওভাররাইট করতে পারবেন না যেমন আপনি অন্যান্য ভাষায় করতে পারেন:

//Wipe out the password
for (int i=0; i<password.Length; i++)
   password[i] = \0;

তো তুমি কি করতে পার? আমরা যখন NET এর সাথে পাসওয়ার্ড মুছে ফেলার ক্ষমতা বা মেমরি থেকে ক্রেডিট কার্ড নম্বরটি সরবরাহ করি তখন কীভাবে তা সরবরাহ করব?

এটি করার একমাত্র উপায় হ'ল কিছু নেটিভ মেমরি ব্লকে স্ট্রিং স্থাপন করা , যেখানে আপনি কল করতে পারেনZeroMemory । একটি নেটিভ মেমরি অবজেক্ট যেমন:

  • একটি বিএসটিআর
  • একটি HGLOBAL
  • CoTaskMem নিয়ন্ত্রণহীন মেমরি

সিকিউরস্ট্রিং হারানো ক্ষমতা ফিরে দেয়

.NET- এ, স্ট্রিংগুলি মুছা যায় না যখন আপনি সেগুলি সম্পন্ন করার পরে:

  • তারা অপরিবর্তনীয়; আপনি তাদের বিষয়বস্তু ওভাররাইট করতে পারবেন না
  • তুমি পার না Dispose তাদের
  • তাদের পরিষ্কার-পরিচ্ছন্নতা আবর্জনা সংগ্রাহকের করুণায়

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

আপনি প্রশ্ন জিজ্ঞাসা করেছেন:

কেন আমি শুধু বলতে পারি না:

SecureString password = new SecureString("password");

কারণ এখন আপনার passwordস্মৃতি আছে; এটি মুছানোর কোনও উপায় নেই। সিএলআর সেই স্মৃতিটিকে পুনরায় ব্যবহারের সিদ্ধান্ত নেওয়ার আগ পর্যন্ত এটি আটকে আছে। আমরা যেখানেই শুরু করেছি সেখানে আপনি ঠিক আমাদের পিছনে ফেলেছেন; একটি পাসওয়ার্ড সহ একটি চলমান অ্যাপ্লিকেশন আমরা এড়াতে পারি না এবং যেখানে মেমরি ডাম্প (বা প্রক্রিয়া মনিটর) পাসওয়ার্ডটি দেখতে পারে।

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

আমি পাসওয়ার্ডটি কীভাবে পড়ব?

তারপরে প্রশ্নটি হল: আমি স্ট্রিংয়ের সাথে কীভাবে যোগাযোগ করব? আপনি একেবারে মতো পদ্ধতি চান না :

String connectionString = secureConnectionString.ToString()

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

এজন্যই .NET একটি সুরক্ষিত স্ট্রিংকে একটি নিয়ন্ত্রণহীন মেমোরিতে মার্শাল করতে তিনটি সহায়ক সহায়ক কার্য সরবরাহ করে:

আপনি স্ট্রিংটিকে একটি নিয়ন্ত্রণহীন মেমরি ব্লবতে রূপান্তর করুন, এটি পরিচালনা করুন এবং তারপরে আবার মুছুন।

কিছু এপিআই সিকিউরস্ট্রিংস গ্রহণ করে । উদাহরণস্বরূপ ADO.net 4.5 এ স্ক্যেলকনেকশন.সক্রেনডিয়াল একটি সেট স্কেলক্রেনডিয়েনশন নেয় :

SqlCredential cred = new SqlCredential(userid, password); //password is SecureString
SqlConnection conn = new SqlConnection(connectionString);
conn.Credential = cred;
conn.Open();

আপনি একটি সংযোগ স্ট্রিংয়ের মধ্যে পাসওয়ার্ডও পরিবর্তন করতে পারেন:

SqlConnection.ChangePassword(connectionString, cred, newPassword);

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

সিকিউরস্ট্রিংয়ে পাঠ্য কীভাবে রাখবেন?

এটি এখনও সমস্যাটি ফেলে দেয়:

আমি প্রথম স্থানে সিকিউরস্ট্রিংয়ে কীভাবে একটি পাসওয়ার্ড পাব?

এটি চ্যালেঞ্জ, তবে মূল বিষয়টি আপনাকে সুরক্ষা সম্পর্কে চিন্তাভাবনা করা।

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

পাসওয়ার্ডবক্স.সিকিউরপ্যাসওয়ার্ড সম্পত্তি

বর্তমানে দ্বারা অনুষ্ঠিত পাসওয়ার্ড পায় PasswordBox হিসেবে SecureString

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

সিকিউরস্ট্রিং রূপান্তর করা যথেষ্ট সহজ:

  • SecureStringToBSTR
  • PtrToStringBSTR

যেমন হিসাবে:

private static string CreateString(SecureString secureString)
{
    IntPtr intPtr = IntPtr.Zero;
    if (secureString == null || secureString.Length == 0)
    {
        return string.Empty;
    }
    string result;
    try
    {
        intPtr = Marshal.SecureStringToBSTR(secureString);
        result = Marshal.PtrToStringBSTR(intPtr);
    }
    finally
    {
        if (intPtr != IntPtr.Zero)
        {
            Marshal.ZeroFreeBSTR(intPtr);
        }
    }
    return result;
}

তারা সত্যিই আপনি এটি করতে চান না।

তবে আমি কীভাবে একটি সিকিউরস্ট্রিংয়ের স্ট্রিং পেতে পারি? ওয়েল, আপনাকে প্রথমে স্ট্রিংয়ের পাসওয়ার্ড থাকা বন্ধ করতে হবে । আপনি এটা আছে করা প্রয়োজন কিছু আর। এমনকি কChar[] অ্যারে সহায়ক হবে।

আপনি যখন প্রতিটি অক্ষর সংযুক্ত করতে পারেন এবং আপনার কাজ শেষ হয়ে যায় তখন প্লেটেক্সট মুছতে পারেন :

for (int i=0; i < PasswordArray.Length; i++)
{
   password.AppendChar(PasswordArray[i]);
   PasswordArray[i] = (Char)0;
}

আপনার মুছতে পারে এমন কিছু মেমরিতে আপনার পাসওয়ার্ড সঞ্চিত থাকতে হবে। সেখান থেকে সিকিউরস্ট্রিং এ এটি লোড করুন।


tl; dr: জিরো মেমোরির সমতুল্য সরবরাহের জন্য সিকিউরস্ট্রিং বিদ্যমান ।

কিছু লোক কোনও ডিভাইস লক হয়ে গেলে ব্যবহারকারীর পাসওয়ার্ড মেমোরি থেকে মুছতে, বা স্বাক্ষরিত হওয়ার পরে মেমরি থেকে কী-স্ট্রোক মোছার বিন্দুটি দেখতে পায় না । এই লোকেরা সিকিউরস্ট্রিং ব্যবহার করে না।


14

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

আপনি এটিকে সিস্টেম থেকে / এ রূপান্তর করার সাথে সাথেই আপনি এর উদ্দেশ্যকে পরাস্ত করেছেন।

এমএসডিএন নমুনা সিকিউরস্ট্রিংকে কনসোল ইনপুট থেকে একবারে একটি অক্ষর তৈরি করে এবং সুরক্ষিত স্ট্রিংটিকে একটি পরিচালনা না করা এপিআইতে দেয়। এটি বরং দুর্গন্ধযুক্ত এবং অবাস্তব।

আপনি আশা করতে পারেন। নেট এর ভবিষ্যতের সংস্করণগুলিকে সিকিউরস্ট্রিংয়ের জন্য আরও বেশি সমর্থন থাকতে হবে যা এটি আরও কার্যকর করে তুলবে, যেমন:

  • সিকিউরস্ট্রিং কনসোল.আরেডলাইনসিকিউর () বা স্যাম্পলটিতে সমস্ত কনভোল্ট কোড ছাড়াই সিকিউরস্ট্রিংয়ে কনসোল ইনপুট পড়ার অনুরূপ।

  • উইনফোর্স টেক্সটবক্স প্রতিস্থাপন যা এর টেক্সটবক্সকে পাঠ্য সুরক্ষিত স্ট্রিং হিসাবে পাঠ্য সম্পত্তি হিসাবে সংরক্ষণ করে যাতে পাসওয়ার্ডগুলি সুরক্ষিতভাবে প্রবেশ করা যায়।

  • সুরক্ষা সম্পর্কিত পাসওয়ার্ডগুলিকে সিকিউরস্ট্রিং হিসাবে পাস করার অনুমতি দেওয়ার জন্য সুরক্ষা সম্পর্কিত API গুলিগুলিতে বর্ধিতকরণ।

উপরেরটি ব্যতীত সিকিউরস্ট্রিংয়ের সীমিত মূল্য হবে।


12

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

যোগ করার মাধ্যমে আপনি কেবল স্মৃতিতে এমন একটি চরিত্র স্থাপন করছেন যা একে অপরের সাথে সংলগ্ন না হওয়া যেমন শারীরিকভাবে মূল স্ট্রিংটিকে পুনর্গঠন করা আরও শক্ত করে তোলে li আমি এখানে ভুল হতে পারি তবে এটি আমাকে ব্যাখ্যা করা হয়েছিল।

শ্রেণীর উদ্দেশ্য হ'ল মেমরি ডাম্প বা অনুরূপ সরঞ্জামের মাধ্যমে সুরক্ষিত ডেটা উন্মুক্ত হওয়া রোধ করা।


11

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


5

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


4

আমার ধারণা এটি এর কারণ স্ট্রিংটি সুরক্ষিত হওয়ার অর্থ হ্যাকার এটি পড়তে সক্ষম হবে না। আপনি যদি স্ট্রিং দিয়ে এটি সূচনা করেন তবে হ্যাকার মূল স্ট্রিংটি পড়তে পারে।


4

ঠিক আছে, বর্ণনায় যেমন বলা হয়েছে, মানটি এনক্রিপ্ট করা থাকে, এর অর্থ হল যে আপনার প্রক্রিয়াটির একটি মেমরি ডাম্প স্ট্রিংয়ের মান প্রকাশ করবে না (কিছুটা গুরুতর কাজ ছাড়াই) without

আপনি কেবল একটি ধ্রুবক স্ট্রিং থেকে একটি সিকিউরস্ট্রিং তৈরি করতে পারবেন না কারণ তারপরে আপনার কাছে মেমরিতে স্ট্রিংয়ের একটি এনক্রিপ্ট করা সংস্করণ থাকবে। আপনাকে টুকরো টুকরো স্ট্রিং তৈরি করতে সীমাবদ্ধ করা একবারে স্মৃতিতে পুরো স্ট্রিং থাকার ঝুঁকি হ্রাস করে।


2
যদি তারা একটি ধ্রুব স্ট্রিং থেকে নির্মাণকে সীমাবদ্ধ করে থাকেন, তবে লাইন ফোরচ ("পাসওয়ার্ডে" চার সি .ToCharArray ()) এটি পরাস্ত করবে, না? এটি পাস হওয়া উচিত App অ্যাপেনডচার ('পি'); pass.AppendChar ( 'একটি'); ইত্যাদি?
রিচার্ড মরগান

হ্যাঁ, সিকিউরস্ট্রিং আপনাকে যে সামান্য সুরক্ষা দেয় তা আপনি সহজেই যথেষ্ট পরিমাণে ফেলে দিতে পারেন। তারা নিজেকে পুরোপুরি পায়ে আটকানো শক্ত করার চেষ্টা করছে। স্পষ্টতই সিকিউরস্ট্রিংয়ের মান বা আউট করার জন্য কিছু উপায় থাকতে হবে, বা আপনি এটি কোনও কিছুর জন্য ব্যবহার করতে পারেন নি।
মার্ক বেসে

1

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

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