অ্যাপ্লিকেশনগুলিতে প্রাইভেট API কীগুলি সংরক্ষণ এবং সুরক্ষার জন্য সেরা অনুশীলন [বন্ধ]


373

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

ধরে নিলাম আমার এর মতো কিছু রয়েছে, আমি কীভাবে গোপন কীটি সুরক্ষা দিতে পারি:

public class DropboxService  {

    private final static String APP_KEY = "jk433g34hg3";
    private final static String APP_SECRET = "987dwdqwdqw90";
    private final static AccessType ACCESS_TYPE = AccessType.DROPBOX;

    // SOME MORE CODE HERE

}

আপনার মতে ব্যক্তিগত কী সংরক্ষণের সর্বোত্তম এবং সুরক্ষিত উপায় কোনটি? অবক্ষেপণ, এনক্রিপশন, আপনার কী মনে হয়?



আমার কাছে ইমেজ / পিএনজি স্টোর ছিল এবং বাফারিডার হিসাবে পিএনজি-এর মাধ্যমে কীটি পেয়েছি
সুমিত

আমি মনে করি এটি একটি বৈধ উদ্বেগ এবং ফায়ারবেস অ্যান্ড্রয়েড এসডিকে গিথুব পৃষ্ঠায় অনুরূপ সমস্যা পোস্ট করেছে: github.com/firebase/firebase-android-sdk/issues/1583 । এটি পরিচালনা করা হয় কিনা দেখুন।
গ্রায়ুলন

উত্তর:


349
  1. যেমনটি হয়, আপনার সংকলিত অ্যাপ্লিকেশনটিতে মূল স্ট্রিং রয়েছে, তবে ধ্রুবক নামগুলি APP_KEY এবং APP_SECRET রয়েছে। যেমন স্ব-ডকুমেন্টিং কোড থেকে কীগুলি উত্তোলন করা তুচ্ছ, উদাহরণস্বরূপ মানক অ্যান্ড্রয়েড সরঞ্জাম dx সহ।

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

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

    -dontwarn com.dropbox.**
    -keep class com.dropbox.** { *; }

    এটি একটি নিষ্ঠুর শক্তি পদ্ধতির; একবার প্রক্রিয়াজাত অ্যাপ্লিকেশন কাজ হয়ে গেলে আপনি এই ধরনের কনফিগারেশন পরিমার্জন করতে পারেন।

  3. আপনি নিজের কোডটিতে স্ট্রিংগুলি ম্যানুয়ালি অবিচ্ছিন্ন করতে পারেন, উদাহরণস্বরূপ কোনও বেস 64 এনকোডিং সহ বা আরও বেশি জটিল কিছু দিয়ে; এমনকি দেশীয় কোড। একটি হ্যাকার তারপরে স্থিরভাবে আপনার এনকোডিংটিকে রিভার্স-ইঞ্জিনিয়ার করতে হবে বা ডিকোডিংকে যথাযথ স্থানে বিরতি দিতে হবে।

  4. প্রোগুয়ার্ডের বিশেষায়িত ভাইবোন ডেক্সগুয়ার্ডের মতো আপনি বাণিজ্যিক ওফসকেটার আবেদন করতে পারেন । এটি অতিরিক্তভাবে আপনার জন্য স্ট্রিং এবং ক্লাসগুলিকে এনক্রিপ্ট / নিখুঁত করতে পারে। কীগুলি বের করে আনতে আরও বেশি সময় এবং দক্ষতা লাগে।

  5. আপনি নিজের সার্ভারে আপনার অ্যাপ্লিকেশনটির কিছু অংশ চালাতে সক্ষম হতে পারেন। আপনি যদি কীগুলি সেখানে রাখতে পারেন তবে সেগুলি নিরাপদ।

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

(আমি প্রোগুয়ার্ড এবং ডেক্সগার্ডের বিকাশকারী)


2
জাভ ক্লাসে স্ট্রিং রিসোর্স এক্সএমএলে প্রাইভেট কী স্ট্রিংটি সংরক্ষণ করা থাকলে @ এরিকল্যাফর্টুনে কোনও তফাত আসে না?
অ্যালান

1
@ এরিকল্যাফোর্টুন কী কী নিরাপদে কীগুলি সংরক্ষণ করার জন্য এখন অ্যান্ড্রয়েড কীস্টোর সিস্টেম ব্যবহার করা সম্ভব? ( বিকাশকারী.অ্যান্ড্রয়েড.
ডেভিড থমাস

1
@ ডেভিড থমাস: আপনি কীস্টোর ব্যবহারের চেষ্টা করেছিলেন? আমি জাভা ক্লাসে লেখা একটি API কী অবলম্বন করতে চাই। দয়া করে উত্তর দিন
সাগর ত্রিহান

1
অ্যান্ড্রয়েড কীস্টোর কি এর জন্য দরকারী? ( বিকাশকারী.অ্যান্ড্রয়েড.
com

1
আমি # 5 বুঝতে পারছি না। এটির মূল সমস্যাটির মতো একই সমস্যা নেই?
পিট

79

কয়েকটি ধারণা, আমার মতে কেবলমাত্র প্রথমে কিছুটা গ্যারান্টি দেয়:

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

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

  3. obfuscator ব্যবহার করুন, এছাড়াও কোড হ্যাশ গোপনে রেখেছিলেন এবং পরে যখন ব্যবহারের প্রয়োজন হয় তখন এটি আনসাশ করুন।

  4. আপনার গোপন কীটি সম্পদে আপনার কোনও চিত্রের সর্বশেষ পিক্সেল হিসাবে রাখুন। তারপরে যখন প্রয়োজন হয় তা আপনার কোডটিতে পড়ুন। আপনার কোডটি অবলম্বন করা সেই কোডটি লুকিয়ে রাখতে সহায়তা করবে যা এটি পড়বে।

আপনি যদি এপিপি কোড পড়তে কতটা সহজ তাড়াতাড়ি নজর রাখতে চান তবে APKAnalyser ধরুন:

http://developer.sonymobile.com/knowledge-base/tool-guides/analyse-your-apks-with-apkanalyser/


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

3
হ্যাঁ, নম্বর 1 কোনও গ্যারান্টি দেয় না।
marcinj

41
আমি চিত্রগুলির ভিতরে কীগুলি লুকিয়ে রাখার ধারণাটি পছন্দ করি। +1
ইগোর šordaš

1
@ মার্সিনজেড্রেজেজেউস্কি আপনি কি আরও সমাধান (স্যাম্পল বা স্নিপড কোড সহ সর্বাধিক) সমাধান সম্পর্কে আরও ব্যাখ্যা করতে চান? ধন্যবাদ.
ডাঃ জ্যাকি

2
@ মিঃ হাইড এটিকে স্টেগনোগ্রাফি বলা হয়, এটি একটি নমুনা কোড দেওয়ার পক্ষে খুব জটিল, আপনি গুগলে উদাহরণ খুঁজে পেতে পারেন। আমি এখানে একটি খুঁজে পেয়েছি: স্বপ্নের কোড.নেট / ফোরাম / টপিক / 27950- স্টেস্ট্যানোগ্রাফি । ধারণাটি দুর্দান্ত তবে যেহেতু এপিপি কোডটি এটি দ্রবীভূত করা যেতে পারে এটি এর সৌন্দর্যকে নষ্ট করে।
marcinj

33

আর একটি পদ্ধতির ডিভাইসে গোপনীয়তা প্রথম স্থানে না রাখা! দেখুন মোবাইল API সিকিউরিটি প্রযুক্তি (বিশেষত অংশ 3)।

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

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

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

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

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


5
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
অর্টনমি

3
আপনি যখন প্রমাণীকরণ পরিষেবাটি অ্যাক্সেস করতে চান তখন সমস্যাটি থেকেই যায়। এটি আপনাকে একটি ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট দেবে। আমাদের তাদের কোথায় বাঁচানো উচিত?
আশী

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

25

পুরানো অনিরাপদ উপায়:

এপিআই / সিক্রেট কী সুরক্ষিত করতে 3 টি সহজ পদক্ষেপ অনুসরণ করুন ( পুরানো উত্তর )

আমরা API কী বা গোপন কীটি সুরক্ষিত করতে গ্রেডল ব্যবহার করতে পারি।

1. gradle.properties (প্রকল্প বিশিষ্টতা): কী দিয়ে পরিবর্তনশীল তৈরি করুন।

GoolgeAPIKey = "Your API/Secret Key"

2. build.gradle (মডিউল: অ্যাপ্লিকেশন): ক্রিয়াকলাপ বা খণ্ডে এটি অ্যাক্সেসের জন্য বিল্ড.gradle এ ভেরিয়েবল সেট করুন। বিল্ডটাইপস below} এ নীচে কোড যুক্ত করুন}

buildTypes.each {
    it.buildConfigField 'String', 'GoogleSecAPIKEY', GoolgeAPIKey
}

৩. অ্যাপ্লিকেশনটির বিল্ডকনফাইগ দ্বারা ক্রিয়াকলাপ / খণ্ডে এটি অ্যাক্সেস করুন:

BuildConfig.GoogleSecAPIKEY

হালনাগাদ :

উপরের সমাধানটি গিটকে প্রতিশ্রুতিবদ্ধ করতে ওপেন সোর্স প্রকল্পে সহায়ক। (আপনার মন্তব্যের জন্য ডেভিড রাউসন এবং রিয়াজ-আলিকে ধন্যবাদ)

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

সমাধান:

আমরা নিরাপদ এপিআই কীগুলিতে এনডিকে ব্যবহার করতে পারি। আমরা স্থানীয় সি / সি ++ শ্রেণিতে কীগুলি সঞ্চয় করতে পারি এবং আমাদের জাভা ক্লাসে সেগুলি অ্যাক্সেস করতে পারি।

এটি অনুসরণ করুনএনডিকে ব্যবহার করে এপিআই কীগুলি সুরক্ষিত করতে ব্লগটি ।

অ্যান্ড্রয়েডে সুরক্ষিতভাবে টোকেন কীভাবে সংরক্ষণ করবেন সে সম্পর্কে একটি ফলোআপ


4
গ্রেড ফাইলের একটি কী সংরক্ষণ করা নিরাপদ?
গুগল 8

4
@ গুগলকে গিটে gradle.propertiesচেক করা উচিত নয় সুতরাং এটি কমপক্ষে প্রতিশ্রুতিবদ্ধ উত্স কোড থেকে গোপন রাখার উপায়
ডেভিড

4
এটি ফলস্বরূপ এপিআই কীটি বান্ডিল হওয়া থেকে বিরত রাখে না apk(এটি উত্পন্ন BuildConfigফাইলটিতে যুক্ত করা হবে), যদিও এটি অবশ্যই আলাদা আলাদা API কী পরিচালনা করতে পারে (উদাহরণস্বরূপ ওপেন সোর্স প্রকল্পে)
রিয়াজ-আলি

5
একটি জাভা ডিকম্পিলার ব্যবহার করে কাউকে বিল্ডকনফিগ ফাইল এবং "গুগলসেকাপিক" দেখতে দেওয়া হবে
ম্যাথু

3
আপনার BuildConfig.javaফাইলটিতে সরল পাঠ্য আকারে কী থাকবে। এটি ওপি ইতিমধ্যে যা করছে তার চেয়ে ভাল নয়।
আইসম্যান

16

অ্যাপ-সিক্রেট কীটি ব্যক্তিগত রাখতে হবে - তবে অ্যাপটি প্রকাশ করার সময় কিছু লোক তাদের বিপরীত হতে পারে।

এই ছেলেদের জন্য এটি লুকানো হবে না, ProGuardকোডটি লক করুন । এটি একটি রিফ্যাক্টর এবং কিছু প্রদেয় অব্ফিউসেটর jk433g34hg3 স্ট্রিং ফিরে পেতে কয়েক বিটওয়াইজ অপারেটরগুলি সন্নিবেশ করিয়ে দিচ্ছে । আপনি যদি 3 দিন কাজ করেন তবে আপনি 5 -15 মিনিট দীর্ঘ হ্যাকিং করতে পারবেন :)

সেরা উপায় হ'ল এটি যেমন রাখা হয় তেমনি ho

এমনকি যদি আপনি সার্ভার সাইডে (আপনার পিসি) সঞ্চয় করেন তবে কীটি হ্যাক এবং মুদ্রণযোগ্য হতে পারে। সম্ভবত এটি সবচেয়ে দীর্ঘ লাগে? যাইহোক এটি সর্বোত্তম ক্ষেত্রে কয়েক মিনিট বা কয়েক ঘন্টার বিষয়।

একটি সাধারণ ব্যবহারকারী আপনার কোডটি ছড়িয়ে দেবেন না।


1
ঠিক আছে - আমি যে উত্তরটি
বেসিক কোডার

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

1
প্রকৃতপক্ষে প্রকৃত কীটি নিবিড় হয়ে উঠবে না ..? করণীয় সর্বোত্তম জিনিস হ'ল কিছু সহজ এনক্রিপ্ট / ডিক্রিপ্ট রুটিন, যে অবলম্বন লুকিয়ে থাকবে।
ডুমসকনাইট

3
এটি ডিক্রিপশন রুটিনটি "দৃশ্যমান", বিপরীত করা সহজ এবং আপনার কাছে মূল স্ট্রিং রয়েছে

14

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

// "the real string is: "mypassword" "; 
//encoded 2 times with an algorithm or you can encode with other algorithms too
public String getClientSecret() {
    return Utils.decode(Utils
            .decode("Ylhsd1lYTnpkMjl5WkE9PQ=="));
}

একটি অগ্রগামী অ্যাপ্লিকেশনটির ডিসম্পিল্ড উত্স কোডটি হ'ল:

 public String c()
 {
    return com.myrpoject.mypackage.g.h.a(com.myrpoject.mypackage.g.h.a("Ylhsd1lYTnpkMjl5WkE9PQ=="));
  }

কমপক্ষে এটি আমার পক্ষে যথেষ্ট জটিল। আমার অ্যাপ্লিকেশনটিতে কোনও মূল্য সঞ্চয় করা ছাড়া আমার কোনও বিকল্প না থাকলে আমি এইভাবেই করি। অবশ্যই আমরা সবাই জানি এটি সর্বোত্তম উপায় নয় তবে এটি আমার পক্ষে কাজ করে।

/**
 * @param input
 * @return decoded string
 */
public static String decode(String input) {
    // Receiving side
    String text = "";
    try {
        byte[] data = Decoder.decode(input);
        text = new String(data, "UTF-8");
        return text;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return "Error";
}

দ্রবীভূত সংস্করণ:

 public static String a(String paramString)
  {
    try
    {
      str = new String(a.a(paramString), "UTF-8");
      return str;
    }
    catch (UnsupportedEncodingException localUnsupportedEncodingException)
    {
      while (true)
      {
        localUnsupportedEncodingException.printStackTrace();
        String str = "Error";
      }
    }
  }

এবং গুগলে সামান্য সন্ধানের মাধ্যমে আপনি এতগুলি এনক্রিপ্টর শ্রেণি খুঁজে পেতে পারেন।


13

@ মনোহর রেড্ডি সমাধানটিতে যুক্ত করে ফায়ারবেস ডাটাবেস বা ফায়ারবেস রিমোটকনফিগ (নাল ডিফল্ট মান সহ) ব্যবহার করা যেতে পারে:

  1. আপনার কীগুলি সিফার করুন
  2. এটি ফায়ারবেস ডাটাবেসে সংরক্ষণ করুন
  3. অ্যাপ স্টার্টআপের সময় বা যখনই প্রয়োজন হবে এটি পান
  4. ডিসিফার কীগুলি এবং এটি ব্যবহার করুন

এই সমাধানে আলাদা কী?

  • ফায়ারবেসের জন্য কোনও শংসাপত্র নেই
  • ফায়ারবেস অ্যাক্সেস সুরক্ষিত তাই কেবল স্বাক্ষরিত শংসাপত্র সহ অ্যাপ্লিকেশনগুলিতে এপিআই কল করার সুযোগ রয়েছে
  • মধ্যম পুরুষের বাধা রোধে সিফারিং / ডিসিফেরিং। তবে ফায়ারবেসে https টি ইতিমধ্যে কল করেছে

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

এর একটি সুবিধা যদিও প্রস্তাবিত সমাধান সহ আমরা হ্যাকারের সামনে আরও একটি জটিলতা যুক্ত করছি।
আশী

11

এই উদাহরণটির বিভিন্ন দিক রয়েছে। আমি কয়েকটি বিষয় উল্লেখ করব যা আমি মনে করি না যে স্পষ্টভাবে অন্যত্র .াকা পড়েছে।

ট্রানজিটে গোপনীয়তা রক্ষা করা

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

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

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

বিশ্রামে গোপনীয়তা রক্ষা করা

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

আরও উন্নত বিকল্প

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

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

আমার কত করা উচিত?

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


1
আপনি কেবল এখান থেকে এটি অনুলিপি এবং আটকানো হয়েছে: উত্সটি স্বীকার না করেই হ্যাকারুন.ন.মোবাইল- অ্যাপি- সুরক্ষা-techniques-682a5da4fe10
অর্টনমি

1
@ পূর্বশক্তি আমি সম্মত হই যে আপনার লিখিত লিখিত নিবন্ধটি উদ্ধৃত করানো উচিৎ ছিল, তবে তিনি সম্ভবত এটি ভুলে গিয়েছিলেন কারণ উভয়ই একই জায়গায় কাজ করে ...
Exadra37

2
এছাড়াও Skip এর নিবন্ধ এবং তারা যে ব্লগ পোস্টের উপর ভিত্তি করে রয়েছে তা আমার উত্তর দেওয়ার এক সপ্তাহ পরে প্রকাশিত হয়েছিল।
ThePragmatist

8

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


32
সমস্যাটি হ'ল - সেই সার্ভারে পৌঁছতে যাতে সমস্ত গোপনীয়তা রয়েছে যা আমার অন্য একটি সিক্রেট কী ব্যবহার করা উচিত - আমি ভাবছি আমি এটি কোথায় রাখব? ;) আমি যা বলার চেষ্টা করছি তা হ'ল - এটিও সেরা সমাধান নয় (এখানে কোনও আদর্শ সমাধান আছে বলে মনে করবেন না)
বুধবার

এটি সত্য নয়, আপনার সার্ভারটি সম্পূর্ণরূপে আপনার নিয়ন্ত্রণে রয়েছে। এটির যা প্রয়োজন তা সম্পূর্ণ আপনার উপর নির্ভর করে।
বার্নার্ড ইগিরি

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

2
@ বার্নার্ডিগিরি এবং তারপরে আবার আমরা স্কোয়ার ১ এ ফিরে এসেছি Let's ধরা যাক, ফোনটি একটি এলোমেলো লগইন তৈরি করে এবং সার্ভার এটি গ্রহণ করে এবং একটি পিন প্রেরণ করে (এটি আমরা তথাকথিত প্রাইভেট সার্ভার হিসাবে কথা বলছি)। তারপরে যিনি আপনার অ্যাপটিকে পৃথকীকরণযোগ্য করেছেন তিনি দেখতে পান যে আপনার ব্যক্তিগত সার্ভারটি অ্যাক্সেস করতে যা লাগে তা হ'ল কিছু র্যান্ডম লগইন যা সে নিজে তৈরি করতে পারে। আমাকে বলুন যে সেটিকে একটি তৈরি করতে এবং আপনার সার্ভারটি অ্যাক্সেস করা থেকে বাধা দেয়? আসলে আপনার সমাধানের মধ্যে এবং মূল সার্ভারটিতে লগইন বা এপিআই কী (যার শংসাপত্রগুলি আমরা আমাদের ব্যক্তিগত সার্ভারে সঞ্চয় করতে চেয়েছিলাম) সংরক্ষণ করার মধ্যে পার্থক্য কী
কেন

3
@ একরকম এলোমেলো নম্বরটি ফোন নম্বর এবং এর পাঠ্য বার্তাগুলিতে দৈহিক অ্যাক্সেসের বিরুদ্ধে প্রমাণীকৃত। যদি কেউ আপনাকে ঠকায় তবে আপনার কাছে তাদের তথ্য রয়েছে। যদি এটি যথেষ্ট ভাল না হয় তবে তাদের একটি পূর্ণ ব্যবহারকারী অ্যাকাউন্ট এবং পাসওয়ার্ড তৈরি করতে বাধ্য করুন। যদি এটি যথেষ্ট ভাল না হয় তবে ক্রেডিট কার্ডও পান। যদি এটি যথেষ্ট ভাল না হয় তবে তাদেরকে ফোন করুন that's যদি এটি যথেষ্ট ভাল না হয় তবে তাদের মুখোমুখি সাক্ষাত করুন। আপনি কতটা সুরক্ষিত / অসুবিধে হতে চান?
বার্নার্ড ইগিরি

7

firebase databaseঅ্যাপটি শুরু হওয়ার সাথে সাথে গোপনীয়তা রাখুন এবং এটি থেকে পান, ওয়েব পরিষেবা কল করার চেয়ে এটি আরও ভাল better


13
তবে ফায়ারবেসের শংসাপত্রগুলির কী?
the_জোরিক

2
দুর্ভাগ্যক্রমে, ফায়ারবেস ডাটাবেস চীনে কাজ করে না।
কনজেংবাম

9
কোনও অর্থবহ নয়, আক্রমণকারীরা আপনাকে ডিসপম্পলড কোড থেকে ফায়ারবেস বিশদ দেখতে এবং আপনার ডাটাবেস থেকে কোনও ডেটা পেতে পারে
user924

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

আপনি যখন নেটওয়ার্কের মাধ্যমে ফায়ারবেস ডাটাবেস থেকে গোপনীয়তা পান, তখন কোনও সুরক্ষিত (https) চ্যানেলের মাধ্যমে অন্য ওয়েব পরিষেবা থেকে একই গোপনীয়তা অর্জনের চেয়ে কী আরও নিরাপদ হয়? তুমি কি ব্যাখ্যা করতে পারো?
সিএসবা তোথ

6

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

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


5

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


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

5
Androidauthority.com/… এর মতে এ মুহূর্তে অ্যান্ড্রয়েডে এটি করার কোনও নিরাপদ উপায় নেই।
ডেভিড 72

1
@ আহমাদওয়াদ বুঝতে পারবেন না কেন এটি 3 টি আপগেট করছে। যে কোনও সহজেই অ্যাপটি সংক্ষেপণ করতে পারে এবং দেখতে পারে কীভাবে এনডিকে প্রবেশের পয়েন্টটি বলা হচ্ছে: /
Johny19

1
এই উত্তরটি প্রায় সেরা বিকল্পগুলির মধ্যে একটি, তবে লেখকের উল্লেখ করা উচিত যে চেকসামটি আপনার APK এর সাথে মেলে কিনা তার জন্য আপনার কোনও কল অন্তর্ভুক্ত করা উচিত (আপনার এনডিকে লাইব্রেরির অভ্যন্তরে) একটি কল অন্তর্ভুক্ত করা উচিত অন্যথায় কেউ আপনার এনডিকে লাইব্রেরিতে কল করতে পারে আপনার অ্যাপ্লিকেশন
Stoycho Andreev

@ স্নিপারটি দুর্দান্ত হবে যদি এটির একটি বড় সমস্যা না থাকে। আপনি কীভাবে জানবেন কোন ফাইলটি "কলিং" দেশীয় পদ্ধতিতে চলছে? আপনি যদি এপিপির নামটি হার্ড-কোড করে চেক করতে পারেন তবে দুর্দান্ত, তবে আমি যদি আমার "হ্যাক" এপিকে "ভাল" এপিপির মতো একই ফোল্ডারটি তৈরি করি তবে কী হবে? এটি যাচাই করবে যে "ভাল" এপিকে ভাল চেকসাম রয়েছে এবং এটি আমাকে সেই দেশীয় পদ্ধতিটি সম্পাদন করার অনুমতি দেবে। JNI / C ++ দিক থেকে কলার ফাইলটি জানার কোনও উপায় না থাকলে অন্য বিকল্পগুলির মতো এটি অর্থহীন।
সকেটবাইট

5

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


11
কিন্তু কীভাবে আপনি সারা বিশ্বে সার্ভারটি কল করতে বাধা দেন?
ব্যবহারকারী 2966445

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

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

3
ঠিক আছে, তবে আপনি বলেছেন অ্যাপটি সার্ভারের সাথে প্রথমে প্রমাণীকরণ করবে। এর অর্থ কি অ্যাপটিতে শংসাপত্রের আরও একটি সেট সঞ্চয় করা নয়? আমি বুঝতে পারি সার্ভারটি আসল ড্রপবক্স কলগুলি পরিচালনা করবে।
ব্যবহারকারী 2966445

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

0

তিক্ত অভিজ্ঞতার ভিত্তিতে এবং আইডিএ-প্রো বিশেষজ্ঞের সাথে পরামর্শ করার পরে সবচেয়ে ভাল সমাধান হ'ল কোডের মূল অংশটি একটি ডিএলএল / শেয়ার্ডবজেক্টে স্থানান্তরিত করা, তারপরে এটি সার্ভার থেকে এনে রানটাইমের সময় লোড করা।

সংবেদনশীল ডেটা অবশ্যই এনকোড করা উচিত কারণ এর মতো কিছু করা খুব সহজ:

$ strings libsecretlib.so | grep My
  My_S3cr3t_P@$$W0rD

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