গোপন তথ্য যেমন API কীগুলি উত্স নিয়ন্ত্রণের বাইরে রাখার কৌশল?


216

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

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

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

আমার কোডগুলি যখন আমার কোডটিতে থাকে এবং আমার কোডটি কোনও পাবলিক ভান্ডারে পাওয়া যায় তখন কীভাবে আমি আমার দেহ অক্ষত রাখতে পারি?

আমি এটি পরিচালনা করার বিভিন্ন উপায় সম্পর্কে ভাবতে পারি, তবে এর মধ্যে কোনওটিই সন্তোষজনক নয়।

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

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

প্রযুক্তিগত বিশদ: VS2012, সি # 4.5, উত্স নিয়ন্ত্রণটি হয় টিএফ পরিষেবা বা গিটহাব হতে চলেছে। সংবেদনশীল কীগুলি আলাদা আলাদা .cs ফাইলে বিভক্ত করতে আংশিক শ্রেণি ব্যবহার করে যা উত্স নিয়ন্ত্রণে যুক্ত হবে না। আমি মনে করি যে আংশিক শ্রেণীর ফাইলটি চেক ইন করা হয়নি তা নিশ্চিত করার জন্য .gitignore ব্যবহার করা যেতে পারে বলে গিটহাবের সুবিধা থাকতে পারে তবে আমি এটি আগেই ভুল করেছি। "ওহ, সাধারণ সমস্যাটির প্রত্যাশা করছি, আপনি এটি কীভাবে করেন" তবে আমাকে "এটির যতটা চুষতে পারে না" তার জন্য নিষ্পত্তি করতে হতে পারে ":: /


6
আপনি নিশ্চিত করতে পারেন যে কনফিগারেশন ফাইল যা আপনার এপিআই কী রাখে উত্স নিয়ন্ত্রিত ডিরেক্টরিতে নেই, এটি এটি প্রথম স্থানে পরীক্ষা করা অসম্ভব করে তোলে।
ডেভিড সার্জে

22
BitBucket.org এর সীমাহীন ব্যক্তিগত সংগ্রহস্থল রয়েছে। বিনামূল্যে। এবং গিটহাব সংগ্রহস্থল আমদানিকারক (ইতিহাস রাখে)
রব ভ্যান ডের ভীর

4
@ ডেনিয়াস আমি আমার বিকাশকারীদের বিশ্বাস করি না কারণ আমি তাদের জানি। গলাগলি। আসলে আমি নিজের সাথে অন্তত অন্তরঙ্গ ... না, আমি তাকে মিথ্যা বলব। তবে আমি জানি যে এটি স্ক্রু করা কতটা সহজ, এবং বলা স্ক্রুআপের ইতিহাস স্ক্রাব করা কতটা কঠিন।
উইল

15
@ ডেনিয়াস: হ্যাঁ আমি প্রতিটি একক চরিত্রকে আমার দলের কোডগুলিতে দেখি। সিরিয়াসলি। আমার কোন পছন্দ নেই. আমি চোখের পাতায় কোডিং করতে পারি না। নির্ভরযোগ্যভাবে না, অন্তত। তবে আমি করি, কারণ আমি আমার দল। আমি টিমে আছি। একজন বিকাশকারী আছেন এবং আমিই আছি। আমি সে। হ্যাঁ. আমি যে লোকটি এটি সঠিকভাবে না করা হলে এই বিষয়টি ঘৃণা করতে চলেছে। আমাকে.
উইল

3
আপনি কোডটিতে কীটি প্রথম স্থানে সংকলন করার চেষ্টা করছেন? এই ধরণের জিনিসটি একটি কনফিগারেশন ফাইলে রাখা স্বাভাবিক।
ডোনাল ফেলো

উত্তর:


127

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

এটি কীভাবে ভাল করতে হয় তার জন্য প্রশ্ন সংস্করণ নিয়ন্ত্রণ এবং ব্যক্তিগত কনফিগারেশন ফাইলও দেখুন


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

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

4
ওয়েল, ফ্যাক্টরি ডিফল্টে এক অংশ, "ইনস্টলারের" বা "প্রথমবার চালনার উইজার্ড" অন্য এক
জোহানেস

6
যদি অনেক ব্যবহারকারীর নিজস্ব ইনস্টলেশন থাকে তবে তাদের নিজস্ব এপিআই কী তৈরি করা এবং ব্যবহার করা উচিত নয়? একই কী ব্যবহার করে একাধিক সাইট / ইনস্টল করা সম্ভবত একটি খারাপ ধারণা। যদি এটি কেবল একটি ইনস্টল হয় তবে কনফিগারেশন ফাইলটি ব্যবহার করা কোনও বড় ঝামেলা নয়।
মাইক ওয়েলার

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

29

আপনি সমস্ত ব্যক্তিগত / সুরক্ষিত কীগুলিকে সিস্টেম এনভায়রনমেন্ট ভেরিয়েবল হিসাবে রাখতে পারেন। আপনার কনফিগারেশন ফাইলটি দেখতে এইরকম হবে:

private.key=#{systemEnvironment['PRIVATE_KEY']}

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

private.key=A_DEVELOPMENT_LONG_KEY

এটি আমার হোস্টিং বিকল্পের সাথে কাজ করতে পারলে এটি একটি যুক্তিসঙ্গত সমাধান হবে। বিভিন্ন পরিবেশের কিন্তু সম্ভবত কিছু মূল / মান কনফিগারেশন জোড়া যে প্রকাশ করার পর অপনোদিত পেতে না ... করে না
উইল

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

বিল্ড সার্ভার হ'ল ডেভলপমেন্ট মেশিন, এই কারণেই আমি ঘটনাক্রমে উত্স নিয়ন্ত্রণে অনুসন্ধান করা এই তথ্যটি সম্পর্কে উদ্বিগ্ন।
উইল

এটির সাথে সমস্যাটি হ'ল পরিবেশটি সার্ভারের যে কেউ দ্বারা পঠনযোগ্য।
জেসনজি

কোনও ব্যবহারকারীর এনভেরগুলি কেবল ব্যবহারকারী বা মূল দ্বারা পাঠযোগ্য। (প্রাচীন লিনাক্স এবং এআইএক্স অবশ্য এটি করেনি)
নিল ম্যাকগুইগান

27

খাঁটি গিট উপায়

  • .gitignore ব্যক্তিগত ডেটা সহ ফাইল অন্তর্ভুক্ত
  • একটি স্থানীয় শাখা ব্যবহার করুন, যাতে আপনি এটি প্রতিস্থাপন TEMPLATEকরেনDATA
  • স্মাড / ক্লিন ফিল্টার ব্যবহার করুন, যার মধ্যে (স্থানীয়) ফিল্টারটির স্ক্রিপ্ট দ্বিদ্বায়ক প্রতিস্থাপন সম্পাদন করে TEMPLATE<->DATA

মার্চুরিয়াল উপায়

  • ডামি কোডের শীর্ষে এমকিউ-প্যাচ (এস), যা এর সাথে প্রতিস্থাপন TEMPLATEকরে DATA(চেঞ্জসেটগুলি সর্বজনীন, প্যাচটি ব্যক্তিগত)
  • বিশেষভাবে ডিজাইন করা কীওয়ার্ড সহ কীওয়ার্ড এক্সটেনশন (কেবলমাত্র আপনার ওয়ার্কিং ডিরেক্টরিতে প্রসারিত )

এসসিএম-অজিনস্টিক উপায়

  • বিল্ড / মোতায়েন প্রক্রিয়া অংশ হিসাবে কীওয়ার্ড প্রতিস্থাপন আছে

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

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

11
@ শাবুঙ্ক - আরটিএফএম! অগ্রাহ্য করা ফাইল সংরক্ষণ করা রেপো তে
অলস ব্যাজার

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

4
@ শ্যাবুনক - এসসিএমের পথটি কনফিগার করে রাখার জন্য ভাল বিষয়। এ কারণেই, উদাহরণস্বরূপ, পোস্টগ্রিস আপনাকে কোনও ফাইলের মধ্যে পাসওয়ার্ড রেখে পাসওয়ার্ড চেকগুলি বাইপাস করতে দেয়। তবে তাদের প্রয়োজন যে পাসওয়ার্ড ফাইলটি ~ / .pgpass- এ রাখা উচিত - সম্ভবত এটি এমন কোনও অবস্থান নয় যা উত্স নিয়ন্ত্রণে যাচাই করা খুব সুবিধাজনক। তারা জানে, অটোমেশনের জন্য, তাদের আপনাকে একটি বন্দুক দিতে হবে, তবে তারা আপনাকে এটির সাথে পায়ে গুলি করা থেকে বিরত রাখতে কঠোর পরিশ্রম করে ...
স্টিভ মিডগলি

14

আমি এরপরে এনক্রিপ্ট করা ফাইলগুলিতে গোপনীয়তা রেখেছি। সিস্টেমটি চালু হওয়ার সময় পাসের বাক্যাংশটি সরবরাহ করা হয়, বা এটি ছোট ফাইলটিতে সংরক্ষণ করা হয় যা আমি প্রতিশ্রুতিবদ্ধ না। এটি দুর্দান্ত যে ইমাকস আনন্দের সাথে এই এনক্রিপ্ট করা ফাইলগুলি পরিচালনা করবেন। উদাহরণস্বরূপ, emacs init ফাইলটিতে অন্তর্ভুক্ত রয়েছে: ("Secrets.el.gpg" লোড করুন), যা কেবলমাত্র কাজ করে - যখন আমি সম্পাদক শুরু করি তখন সেই বিরল ঘটনাগুলিতে আমাকে পাসওয়ার্ডের জন্য অনুরোধ জানানো হয়। আমি কারও এনক্রিপশনটি ভাঙ্গার বিষয়ে চিন্তা করি না।


3
এটি দুর্দান্ত সমাধান - আমি অবাক হয়েছি যে আপনার কাছে বেশি ভোট নেই don't আমি এমন একটি সংস্থার সাথে কাজ করি যা শিক্ষার্থীদের ডেটা নিয়ে কাজ করে, যা মার্কিন যুক্তরাষ্ট্রে সংঘবদ্ধভাবে নিয়ন্ত্রিত, সুতরাং তাদের শংসাপত্রাদি এবং গোপনীয়তাগুলির সাথে অতিরিক্ত সতর্কতা অবলম্বন করতে হবে। এগুলি একটি বড় সংস্থাও তাই তাদের শংসাপত্রগুলির জন্য এসসিএম ব্যবহার করা দরকার যাতে ইঞ্জিনিয়ারগুলি তাদের তৈরি করার পরে এটি তাদের খুঁজে পেতে / পরিচালনা করতে পারে। আপনার সমাধান হ'ল তারা যা করেন। তাদের কাছে ডিক্রিপ্ট কী ফাইল রয়েছে যা ডিভ / স্টেজিং / প্রোড / ইত্যাদি (প্রতিটিটির জন্য একটি ফাইল) এর জন্য ডিক্রিপ্ট কী রাখে। তারপরে সমস্ত গোপনীয়তা এনক্রিপ্ট করা হয় এবং ফাইলগুলিতে চেক করা হয়। ডিক্রিপ্ট ফাইলগুলি প্রতিটি পরিবেশে পেতে ব্যবহৃত হয়।
স্টিভ মিডলেগি

7
ওয়েল, কিছু অর্থে গোপন (এই ক্ষেত্রে API কী) এনক্রিপ্ট একমাত্র থেকে সমস্যা বদল গোপন তথ্য সংগঠনের না করতে পাস ফ্রেজ সংগঠনের না (যা এখন হয়ে গোপন তথ্য )। তবে অবশ্যই, সিস্টেম লঞ্চের জন্য এটি চাওয়া একটি ভাল বিকল্প।
সিইজি

আমি এই সমাধানটি পছন্দ করি। আপনি যে ধরণের এনক্রিপ্ট ফাইল করেন তা কিপাস ফাইল হতে পারে। notes.Env ফাইলের সামগ্রী সংরক্ষণের জন্য ক্ষেত্রটি ব্যবহার করে এটি প্রতিটি পরিবেশের জন্য প্রবেশ করবে an কয়েক মাস আগে আমি একটি সরঞ্জাম লিখেছিলাম যা একটি কিপাস ফাইল পড়তে পারে এবং একটি এন্ট্রিের notesক্ষেত্রটি ব্যবহার করে .env ফাইল তৈরি করতে পারে । আমি একটি বৈশিষ্ট্য যুক্ত করার কথা ভাবছি যাতে আমি require('switchenv').env()নোড.জেএস প্রোগ্রামের শীর্ষে করতে পারি এবং NODE_ENV এর সাথে মেলে এমন প্রবেশের ভিত্তিতে প্রক্রিয়া.েনভ ভেরিয়েবলগুলি তৈরি করতে পারি বা এর মতো কিছু। -> github.com/christiaanwesterbeek/switcv
ক্রিশ্চিয়ান ওয়েস্টারবিক

14

এটি খুব অ্যান্ড্রয়েড / গ্রেডল নির্দিষ্ট তবে আপনি gradle.propertiesঅবস্থিত আপনার বিশ্বব্যাপী ফাইলের কীগুলি সংজ্ঞায়িত করতে পারেন user home/.gradle/। এটি বিল্ডটাইপ বা গন্ধের উপর নির্ভর করে যেমন আইপিআই দেবের জন্য এবং রিলিজের জন্য পৃথক পৃথক বৈশিষ্ট্যগুলির উপর নির্ভর করে বিভিন্ন বৈশিষ্ট্য ব্যবহার করতে পারেন এটিও দরকারী।

gradle.properties

MY_PRIVATE_API_KEY=12356abcefg

build.gradle

buildTypes {
        debug{
            buildConfigField("String", "GOOGLE_VERIFICATION_API_KEY", "\"" + MY_PRIVATE_API_KEY +"\"")
            minifyEnabled false
            applicationIdSuffix ".debug"
            }
        }

কোড আপনি এই মত রেফারেন্স চাই

String myAPI = BuildConfig.GOOGLE_VERIFICATION_API_KEY;

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

1
আসলে, একটি বৈধ পয়েন্ট। তবে প্রশ্নটি ছিল বাইনারি না করে কীভাবে এপিআই কীগুলি সোর্স কোডের বাইরে রাখা যায়।
স্কটিয়াব

11

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

মোবাইল ওয়েব অ্যাপ্লিকেশন

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

হোস্ট করা ওয়েব অ্যাপ্লিকেশন

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

প্রকাশিত উত্স কোড

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

আপনি আপনার config.cfgফাইলটি সঞ্চয়ীগুলিতে বিকাশ বা উত্পাদনের জন্য ব্যবহার করেন না।


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

আমি অন্য অনেকের মতোই প্রশ্নের উত্তরটি সঠিকভাবে দিয়েছি। আপনি তাদের মধ্যে একটিও গ্রহণ করেন নি এই বিষয়টি বোঝায় যে আপনি কীগুলি কীভাবে কাজ করবেন তা আপনি বুঝতে পারেন না।
23:39

7
তাহলে কীভাবে আমরা কী-প্রকাশনা ওয়েব পরিষেবাদি রক্ষা করব? আরেকটি চাবি ব্যবহার করছেন?
জিয়াং জাং

ডিট্টো যা জিয়াংজেহাং বলেছেন - এটি বিপজ্জনক পরামর্শ
ডেভিড কে। হেস

5

প্রতিটি সার্ভারের জন্য পরিবর্তিত গোপন জিনিসগুলির জন্য পরিবেশের ভেরিয়েবলগুলি ব্যবহার করুন।

http://en.wikipedia.org/wiki/Environment_variable

এগুলি কীভাবে ব্যবহার করবেন তা ভাষা নির্ভর।


3
অস্পষ্টতার মাধ্যমে সুরক্ষা অনেকের জন্য প্রস্তাবিত পদ্ধতির নয়। আপনার উত্তরটি আরও স্পষ্ট হওয়ার জন্য আপনি কি আরও বিস্তারিত জানাতে যত্ন নেবেন?

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

4

আমি মনে করি এটি এমন একটি বিষয় যার সাথে সবার মাঝে কিছুটা সময় কিছুটা সমস্যা হয়েছিল।

এখানে আমি ব্যবহার করেছি এমন একটি কার্যপ্রবাহ যা আপনার পক্ষে কার্যকর হতে পারে। এটি একটি টুইস্ট সহ .gitignore ব্যবহার করে:

  1. সমস্ত কনফিগারেশন ফাইল একটি বিশেষ ফোল্ডারে যায় (ডাব্লু / নমুনা কনফিগারেশন ফাইলগুলি - alচ্ছিক)
  2. সমস্ত কনফিগারেশন ফাইলগুলি .gitignore এ অন্তর্ভুক্ত রয়েছে, যাতে সেগুলি সর্বজনীন হয় না
  3. একটি ব্যক্তিগত বাক্সে একটি গিটোলাইট সার্ভার (বা আপনার প্রিয় গিট সার্ভার) সেটআপ করুন
  4. ব্যক্তিগত সার্ভারে সমস্ত কনফিগার ফাইল সহ একটি রেপো যুক্ত করুন
  5. মূল রেপোর বিশেষ ফোল্ডারে কনফিগারেশন ফাইলগুলি অনুলিপি করতে একটি স্ক্রিপ্ট যুক্ত করুন (alচ্ছিক)

এখন, আপনি কোনও বিকাশ এবং স্থাপনার সিস্টেমে কনফিগার রেপো ক্লোন করতে পারেন। সঠিক ফোল্ডারে ফাইলগুলি অনুলিপি করতে কেবল স্ক্রিপ্টটি চালান এবং আপনার কাজ শেষ।

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

আমি প্রাইভেট গিট সার্ভারের জন্য একটি 15 $ / বছরের বাক্স ব্যবহার করি, তবে আপনি সস্তাস্কেট প্রয়োজন অনুসারে বাড়িতে একটি সেটআপও করতে পারেন ;-)

পিএস: আপনি একটি গিট সাবমডিউলও ব্যবহার করতে পারেন ( http://git-scm.com/docs/git-submodule ), তবে আমি সবসময় আদেশগুলি ভুলে যাই, তাই দ্রুত এবং নোংরা নিয়ম!


2

এনক্রিপশন ব্যবহার করুন, তবে কনসোলে পাসওয়ার্ড হিসাবে প্রারম্ভকালে একটি মাস্টার কী সরবরাহ করুন কেবলমাত্র একটি ফাইলের মধ্যে প্রক্রিয়াটির ব্যবহারকারী পড়তে পারে বা ম্যাক ওএস কীচেইন বা উইন্ডোজ কী স্টোরের মতো সিস্টেম-সরবরাহিত কী স্টোর থেকে পড়তে পারে।

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


1

3 কৌশলগুলি, এখনও উল্লেখ করা হয়নি (?)

চেক ইন বা একটি ভিসিএস প্রাক-চেক ইন হুক

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

কৌশল ইতিমধ্যে উল্লিখিত

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

0

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

উপকারিতা:

  • বিকাশ সত্তা == উত্পাদন সত্তা ধরে না
  • সমস্ত সহযোগী / কোড পর্যালোচক বিশ্বাসযোগ্য বলে ধরে নেই
  • সংস্করণ নিয়ন্ত্রণের বাইরে রেখে সহজ ভুলগুলি প্রতিরোধ করুন
  • QA / বিল্ডগুলির জন্য কাস্টম কনফিগারেশন সহ ইনস্টলগুলি স্বয়ংক্রিয় করতে সহজ

যদি আপনি ইতিমধ্যে এটি করছেন এবং দুর্ঘটনাক্রমে এটি পরীক্ষা করে দেখছেন তবে এটি আপনার প্রকল্পের সাথে যুক্ত করুন .gitignore। এটি আবার করা অসম্ভব করে তুলবে।

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


-2

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

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

সম্পাদনা করুন: সম্ভবত স্ট্যানফোর্ড জাভাস্ক্রিপ্ট ক্রিপ্টো লাইব্রেরিটি ব্যবহার করে দেখুন এটি বেশ কিছু সুরক্ষিত প্রতিসৃত এনক্রিপশন / ডিক্রিপশন করার অনুমতি দেয়।


1
হ্যাশগুলি সাধারণত একভাবে স্ক্র্যাম্বেল হয়। এখানে প্রতিসম এনক্রিপশন অ্যালগরিদম রয়েছে যা আপনার পরামর্শ অনুসারে করবে।

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