কম্পিউটার টিউটোরিয়াল

সুইফটে আইওএস ডেভেলপমেন্টকে সুরক্ষিত করুন:সাধারণ সমস্যাগুলি এড়িয়ে চলুন এবং আপনার অ্যাপকে শক্তিশালী করুন

সুইফটে আইওএস ডেভেলপমেন্টকে সুরক্ষিত করুন:সাধারণ সমস্যাগুলি এড়িয়ে চলুন এবং আপনার অ্যাপকে শক্তিশালী করুন

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

তাই আপনি যদি একজন iOS ডেভেলপার হন, তাহলে অ্যাপ ডেভেলপমেন্টের প্রতিটি পর্যায়ে আপনার নিরাপত্তাকে অগ্রাধিকার দিতে শিখতে হবে।

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

এই নিবন্ধটি সুইফ্ট-ভিত্তিক iOS অ্যাপে 10টি সাধারণ নিরাপত্তা ত্রুটিগুলি অন্বেষণ করে এবং সেগুলি প্রশমিত করার জন্য ব্যবহারিক কৌশলগুলি অফার করে৷

পূর্বশর্ত

ডাইভিং করার আগে, আপনার প্রয়োজন হবে:

  • সুইফট এবং আইওএস ডেভেলপমেন্টের কাজের জ্ঞান।

  • Xcode-এ অ্যাক্সেস।

  • কিভাবে iOS অ্যাপ সার্ভারের সাথে যোগাযোগ করে তার প্রাথমিক ধারণা।

  • টার্মিনাল/কমান্ড লাইন বেসিকগুলির সাথে পরিচিতি।

কোডের উদাহরণগুলি ব্যবহারিক এবং ধাপে ধাপে ব্যাখ্যা করা হয়েছে, যা জুনিয়র ডেভেলপারদের কাছে অ্যাক্সেসযোগ্য করে তোলে এবং এখনও তাদের অ্যাপের নিরাপত্তা জোরদার করতে চাচ্ছেন এমন অভিজ্ঞদের কাছে মূল্য প্রদান করে৷

আমরা যা কভার করব:

  • সুইফ্ট iOS অ্যাপ্লিকেশনে সবচেয়ে প্রচলিত নিরাপত্তা ফাঁদগুলি কী কী?
    • 1. অনিরাপদ ডেটা স্টোরেজ
    • 2. দুর্বল নেটওয়ার্ক যোগাযোগ
    • 3. অনুপযুক্ত ইনপুট বৈধতা
    • 4. হার্ডকোডিং সিক্রেটস
    • 5. অপর্যাপ্ত প্রমাণীকরণ এবং অনুমোদন
    • 6. অনিরাপদ লগিং এবং ত্রুটি হ্যান্ডলিং
    • 7. উপেক্ষা করা কোড অস্পষ্টতা এবং বিপরীত প্রকৌশল
    • 8. অনিরাপদ থার্ড-পার্টি লাইব্রেরি
    • 9. অপর্যাপ্ত বায়োমেট্রিক এবং মাল্টি-ফ্যাক্টর প্রমাণীকরণ
    • 10. পর্যায়ক্রমিক নিরাপত্তা পরীক্ষাকে উপেক্ষা করা

সুইফ্ট iOS অ্যাপ্লিকেশনগুলিতে সর্বাধিক প্রচলিত নিরাপত্তা ফাঁদগুলি কী কী?

সুইফট এবং আইওএস দৃঢ় নিরাপত্তা বৈশিষ্ট্য অফার করে, কিন্তু ভুল এখনও ঘটতে পারে। নিম্নলিখিত সবচেয়ে সাধারণ ফাঁদ এবং কিভাবে তাদের ঠিক করতে হয়:

1. অনিরাপদ ডেটা স্টোরেজ

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

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

কিভাবে ঠিক করবেন:

সংবেদনশীল ডেটা নিরাপদে সংরক্ষণ করতে Keychain Services API ব্যবহার করুন। কীচেন ডেটা এনক্রিপ্ট করে এবং এটিকে ডিভাইসে আবদ্ধ করে যাতে এটি অন্য অননুমোদিত অ্যাপ্লিকেশন বা ব্যবহারকারীদের দ্বারা অ্যাক্সেস করা না যায়৷

আপনি সুইফটে লাইব্রেরি ব্যবহার করে শংসাপত্রগুলি নিরাপদে সংরক্ষণ করতে পারেন যেমন KeychainAccess বা অন্তর্নির্মিত SecItemAdd এবং SecItemCopyMatching ফাংশন৷

উদাহরণস্বরূপ, আপনি কীভাবে কীচেইনে একটি ব্যবহারকারীর পাসওয়ার্ড সংরক্ষণ করতে পারেন যাতে সংবেদনশীল ডেটা সুরক্ষিতভাবে সংরক্ষণ করা হয় তা নিশ্চিত করতে পারেন:

do {
try keychain.set("userPassword123", key: "userPassword")
} catch {
 print("Error saving to Keychain: \(error)")
}

পর্দার আড়ালে, আপনি keychain.set("userPassword123", key: "userPassword") কল করলে যা হয় তা এখানে একটি KeychainManager ক্লাসের ভিতরে যা স্টোরেজের জন্য Apple-এর নেটিভ সিকিউরিটি ফ্রেমওয়ার্ক ব্যবহার করে:

import Security
class KeychainManager {
 func set(_ value: String, key: String) throws {
 // 1. Convert string to Data
 guard let data = value.data(using: .utf8) else {
 throw NSError(domain: "KeychainManager", code: -1)
 }
 // 2. Build the query dictionary
 let query: [String: Any] = [
 // Store as password
 kSecClass as String: kSecClassGenericPassword,
 // Your app's bundle identifier
 kSecAttrService as String: "com.yourapp.keychain",
 // "userPassword"
 kSecAttrAccount as String: key,
 // "userPassword123" encrypted
 kSecValueData as String: data,
 kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlock
 ]
 // 3. Save to keychain (iOS encrypts it automatically)
 let status = SecItemAdd(query as CFDictionary, nil)
 // 4. Check if successful
 guard status == errSecSuccess else {
 throw NSError(domain: "KeychainManager", code: Int(status))
 }
 }
}

যখন এই ফাংশনটি চলে, iOS স্ট্রিং মানকে রূপান্তর করে, যেমন "userPassword123", এনক্রিপ্ট করা বাইনারি ডেটাতে এবং এটিকে ডিভাইসের Keychain ডাটাবেসে নিরাপদে সংরক্ষণ করে। এন্ট্রিটি প্রদত্ত কী-এর অধীনে সংরক্ষিত হয় (উদাহরণস্বরূপ, "userPassword"), এবং শুধুমাত্র আপনার অ্যাপ এটি অ্যাক্সেস করতে পারে।

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

2. দুর্বল নেটওয়ার্ক যোগাযোগ

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

সমস্যা :যখন ডেটা আপনার অ্যাপ এবং সার্ভারের মধ্যে একটি অনিরাপদ সংযোগের মাধ্যমে ভ্রমণ করে, তখন একই নেটওয়ার্কে আক্রমণকারীরা (যেমন সর্বজনীন Wi-Fi) করতে পারে:

  • সংবেদনশীল তথ্য পড়ুন (পাসওয়ার্ড, ব্যক্তিগত ডেটা, অর্থপ্রদানের বিবরণ)

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

  • আপনার বৈধ সার্ভারের ছদ্মবেশ ধারণ করুন

কিভাবে ঠিক করবেন:

1. সর্বদা HTTPS ব্যবহার করুন
HTTPS ট্রানজিটের সমস্ত ডেটা এনক্রিপ্ট করে, এটি আক্রমণকারীদের কাছে অপঠনযোগ্য করে তোলে। iOS-এর অ্যাপ ট্রান্সপোর্ট সিকিউরিটি (ATS) ডিফল্টরূপে অনিরাপদ HTTP সংযোগগুলি ব্লক করে এটি প্রয়োগ করে:

// ❌ INSECURE - HTTP connection (blocked by ATS by default)
let url = URL(string: "http://api.example.com/login")
// ✅ SECURE - HTTPS connection
let url = URL(string: "https://api.example.com/login")

একেবারে প্রয়োজনীয় না হলে আপনি আপনার Info.plist-এ ATS ব্যতিক্রম যোগ করা এড়াতে চাইবেন। যদি একটি তৃতীয় পক্ষের API শুধুমাত্র HTTP সমর্থন করে, তাহলে আপগ্রেড করতে বা আরও নিরাপদ বিকল্প খুঁজতে তাদের সাথে যোগাযোগ করুন।

২. শংসাপত্র পিনিং (উন্নত সুরক্ষা) প্রয়োগ করুন৷

এমনকি HTTPS এর সাথেও, আপনার অ্যাপ এখনও অত্যাধুনিক MITM আক্রমণের জন্য ঝুঁকিপূর্ণ হতে পারে। একজন আক্রমণকারী ব্যবহারকারীর ডিভাইসে (ম্যালওয়্যার বা সামাজিক প্রকৌশলের মাধ্যমে) একটি প্রতারণামূলক শংসাপত্র ইনস্টল করতে পারে, উদাহরণস্বরূপ, এবং HTTPS ট্র্যাফিককে আটকাতে পারে যা বৈধ বলে মনে হয়৷ আক্রমণকারীর জাল শংসাপত্রটি ডিভাইসের দ্বারা বিশ্বস্ত হবে, যাতে তারা "নিরাপদ" যোগাযোগগুলি ডিক্রিপ্ট করতে এবং পড়তে পারে৷

শংসাপত্র পিনিং আপনার অ্যাপকে শুধুমাত্র আপনার নির্দিষ্ট সার্ভারের শংসাপত্রকে বিশ্বাস করে, অন্য সকলকে প্রত্যাখ্যান করার মাধ্যমে এটি সমাধান করে – এমনকি যদি সেগুলি অন্যথায় বৈধ হয়।

শংসাপত্র পিনিং কীভাবে কাজ করে:

আপনার অ্যাপ প্রত্যাশিত শংসাপত্র (বা এর সর্বজনীন কী হ্যাশ) সঞ্চয় করে এবং প্রতিটি সংযোগের সময় এটি যাচাই করে:

class SecureNetworkManager: NSObject, URLSessionDelegate {
 // Store your server's certificate hash
 // Get this by running: openssl x509 -in certificate.crt -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64
 private let expectedPublicKeyHash = "YOUR_CERTIFICATE_HASH_HERE"
 func urlSession(
 _ session: URLSession,
 didReceive challenge: URLAuthenticationChallenge,
 completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void
 ) {
 // Step 1: Check if this is a server trust challenge (certificate validation)
 guard challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust,
 let serverTrust = challenge.protectionSpace.serverTrust
 else {
 // Not a certificate challenge; use default handling
 completionHandler(.performDefaultHandling, nil)
 return
 }
 // Step 2: Validate that the server's certificate matches our pinned certificate
 if isValidServerTrust(serverTrust) {
 // Certificate matches - proceed with the connection
 completionHandler(.useCredential, URLCredential(trust: serverTrust))
 } else {
 // Certificate doesn't match - reject the connection to prevent MITM attack
 completionHandler(.cancelAuthenticationChallenge, nil)
 }
 }
 // Validates the server's certificate against our pinned hash
 private func isValidServerTrust(_ serverTrust: SecTrust) -> Bool {
 // Extract the server's certificate
 guard let serverCertificate = SecTrustGetCertificateAtIndex(serverTrust, 0) else {
 return false
 }
 // Get the public key from the certificate
 let serverPublicKey = SecCertificateCopyKey(serverCertificate)
 guard let publicKey = serverPublicKey else {
 return false
 }
 // Convert the public key to data and hash it
 var error: Unmanaged<CFError>?
 guard let publicKeyData = SecKeyCopyExternalRepresentation(publicKey, &error) as Data? else {
 return false
 }
 // Hash the public key using SHA-256
 let publicKeyHash = SHA256.hash(data: publicKeyData)
 let publicKeyHashString = Data(publicKeyHash).base64EncodedString()
 // Compare with our expected hash
 return publicKeyHashString == expectedPublicKeyHash
 }
}

এই কোডটি কি করে, ধাপে ধাপে:

  1. urlSession(_:didReceive:completionHandler:) - যখনই আপনার অ্যাপ একটি HTTPS সংযোগ করে তখন এই পদ্ধতিটি বলা হয়৷ iOS জিজ্ঞাসা করে:"আমি কি এই সার্ভারের শংসাপত্রকে বিশ্বাস করব?"

  2. প্রমাণীকরণ পদ্ধতি পরীক্ষা করুন - আমরা যাচাই করি এটি একটি সার্ভার ট্রাস্ট চ্যালেঞ্জ (শংসাপত্র যাচাইকরণ), অন্য কোনো ধরনের প্রমাণীকরণ নয়।

  3. সার্টিফিকেট যাচাই করুন - আমরা isValidServerTrust() কল করি , যা:

    • সংযোগ থেকে সার্ভারের শংসাপত্র বের করে

    • সেই সার্টিফিকেট থেকে সর্বজনীন কী পায়

    • SHA-256

      ব্যবহার করে পাবলিক কী হ্যাশ করে
    • হ্যাশকে আমাদের সঞ্চিত, প্রত্যাশিত হ্যাশের সাথে তুলনা করে

  1. একটি সিদ্ধান্ত নিন:
  • যদি হ্যাশ মেলে, তাহলে সার্ভার বৈধ। .useCredential দিয়ে এগিয়ে যান .

  • যদি হ্যাশগুলি না মেলে তবে আমাদের একটি সম্ভাব্য MITM আক্রমণ রয়েছে৷ .cancelAuthenticationChallenge দিয়ে বাতিল করুন .

তাই কিভাবে এটি MITM আক্রমণ প্রতিরোধ করে? এমনকি যদি একজন আক্রমণকারী ব্যবহারকারীর ডিভাইসে একটি প্রতারণামূলক শংসাপত্র ইনস্টল করে এবং ট্র্যাফিক বাধা দেয়, তবে তাদের শংসাপত্রের হ্যাশ আপনার পিন করা হ্যাশের সাথে মিলবে না৷ আপনার অ্যাপ্লিকেশানটি সংযোগ প্রত্যাখ্যান করবে, আক্রমণকারীকে আপনার ট্র্যাফিক ডিক্রিপ্ট করতে বাধা দেবে৷

3. অতিরিক্ত সুরক্ষা:সর্বজনীন Wi-Fi-এ একটি VPN সুপারিশ করুন৷

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

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

3. অনুপযুক্ত ইনপুট বৈধতা

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

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

কিভাবে ঠিক করবেন:

ইনপুট বৈধতা দূষিত ডেটার বিরুদ্ধে আপনার প্রতিরক্ষার প্রথম লাইন। আপনার iOS অ্যাপ্লিকেশনগুলিকে কীভাবে সুরক্ষিত করবেন তা এখানে রয়েছে:

1. প্যাটার্নের সাথে ব্যবহারকারীর ইনপুট যাচাই করুন

প্রক্রিয়া করার আগে সর্বদা নিয়মিত এক্সপ্রেশন বা পূর্বনির্ধারিত নিদর্শন ব্যবহার করে ব্যবহারকারীর ইনপুট যাচাই করুন। উদাহরণস্বরূপ, ইমেল ঠিকানা গ্রহণ করার সময়:

func isValidEmail(_ email: String) -> Bool {
 let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
 let emailPredicate = NSPredicate(format: "SELF MATCHES %@", emailRegex)
 return emailPredicate.evaluate(with: email)
}
// Only accept properly formatted data
guard isValidEmail(userEmail) else {
 // Reject invalid input
 return
}

এটি নিশ্চিত করে যে শুধুমাত্র সঠিকভাবে ফর্ম্যাট করা ডেটা গৃহীত হয়, আপনার সিস্টেমে প্রবেশ করা থেকে বিকৃত বা দূষিত ইনপুট প্রতিরোধ করে৷

২. স্যানিটাইজ API প্রতিক্রিয়া

বাহ্যিক তথ্য বিশ্বাস করবেন না. API প্রতিক্রিয়াগুলি ব্যবহার করার আগে সর্বদা যাচাই করুন এবং স্যানিটাইজ করুন:

if let userAge = apiResponse["age"] as? Int,
 userAge >= 0 && userAge <= 150 {
 // Safe to use
 user.age = userAge
} else {
 // Handle invalid data appropriately
 throw ValidationError.invalidAge
}

3. প্যারামিটারাইজড কোয়েরি ব্যবহার করুন (সবচেয়ে জটিল)

সবচেয়ে বিপজ্জনক ভুল হল স্ট্রিং কনক্যাটেনেশনের মাধ্যমে ডাটাবেস প্রশ্ন তৈরি করা। এই দুর্বল কোড বিবেচনা করুন:

// ❌ NEVER DO THIS - Vulnerable to SQL Injection
let username = userInput // Could be: "admin' OR '1'='1"
let query = "SELECT * FROM users WHERE username = '\(username)'"
database.execute(query)

যদি কোনো দূষিত ব্যবহারকারী তাদের ব্যবহারকারীর নাম হিসাবে অ্যাডমিন' বা '1'='1 প্রবেশ করে, প্রশ্নটি হয়ে যায়:

SELECT * FROM users WHERE username = 'admin' OR '1'='1'

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

// ✅ SAFE - Using parameterized queries
let query = "SELECT * FROM users WHERE username = ?"
database.execute(query, withArgumentsIn: [username])

এই পদ্ধতিতে, ? একটি স্থানধারক যা ডাটাবেস একটি প্যারামিটার হিসাবে বিবেচনা করে, SQL কমান্ডের অংশ হিসাবে নয়। ব্যবহারকারীর নামের মান withArgumentsIn-এ আলাদাভাবে পাস করা হয়েছে অ্যারে।

এর মানে হল যে কোনও ব্যবহারকারী যদি admin' OR '1'='1 এর মত SQL কোড ইনজেক্ট করার চেষ্টা করে , ডাটাবেস সার্চ করার জন্য পুরো স্ট্রিংটিকে একটি আক্ষরিক ব্যবহারকারীর নাম হিসাবে বিবেচনা করবে - এক্সিকিউটেবল SQL কোড হিসাবে নয়। ডাটাবেস ইঞ্জিন স্বয়ংক্রিয়ভাবে কোনো বিশেষ অক্ষর এড়িয়ে যায়, SQL ইনজেকশনের ঝুঁকি সম্পূর্ণভাবে দূর করে।

ডেটা থেকে ক্যোয়ারী স্ট্রাকচারকে আলাদা করে, প্যারামিটারাইজড ক্যোয়ারী নিশ্চিত করে যে ব্যবহারকারীর ইনপুট কখনই আপনার SQL স্টেটমেন্টের উদ্দিষ্ট যুক্তিকে পরিবর্তন করতে পারে না।

4. হার্ডকোডিং সিক্রেটস

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

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

সমস্যা – হার্ডকোডেড সিক্রেটস:

// NEVER DO THIS
class APIClient {
 private let apiKey = "1234567890abcdef"
 private let secretToken = "sk_live_51H..."
 func makeRequest() {
 // These secrets are embedded in your binary
 let headers = ["Authorization": "Bearer \(apiKey)"]
 }
}

কিভাবে ঠিক করবেন:

আপনার কোডে সরাসরি সংবেদনশীল শংসাপত্র সংরক্ষণ করবেন না। এখানে নিরাপদ বিকল্প আছে:

সমাধান 1:রানটাইমে ব্যাকএন্ড থেকে সিক্রেট আনুন

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

class APIClient {
 private var sessionToken: String?
 // User logs in and receives a temporary session token
 func authenticateUser(email: String, password: String) async throws {
 let response = try await backend.login(email: email, password: password)
 // Store only a temporary, user-specific session token
 self.sessionToken = response.sessionToken
 }
 // Backend handles the actual API calls with the real API key
 func fetchUserData() async throws -> UserData {
 guard let token = sessionToken else {
 throw AuthError.notAuthenticated
 }
 // Your backend receives this request, validates the session token,
 // then uses its own API keys to fetch data from third-party services
 return try await backend.getUserData(sessionToken: token)
 }
}

এটি কীভাবে কাজ করে:

আপনার অ্যাপ কখনই প্রকৃত API কী জানে না। যখন একজন ব্যবহারকারীর ডেটার প্রয়োজন হয়, আপনার অ্যাপটি একটি সেশন টোকেন সহ আপনার নিজস্ব ব্যাকএন্ড সার্ভারে একটি অনুরোধ পাঠায়। আপনার ব্যাকএন্ড টোকেনকে যাচাই করে, তারপর প্রকৃত তৃতীয় পক্ষের API কল করতে নিজস্ব নিরাপদে সঞ্চিত API কী ব্যবহার করে। এইভাবে, আসল রহস্যগুলি কখনই আপনার সার্ভার ছেড়ে যায় না।

সমাধান 2:এনভায়রনমেন্ট ভেরিয়েবল বা কনফিগ ফাইল (কেবল ডেভেলপমেন্ট)

ডেভেলপমেন্ট এনভায়রনমেন্টের জন্য, .xcconfig ফাইলগুলি ব্যবহার করুন যেগুলি সংস্করণ নিয়ন্ত্রণ থেকে বাদ দেওয়া হয়েছে:

// Secrets.xcconfig (add to .gitignore!)
API_KEY = your_dev_api_key_here
API_SECRET = your_dev_secret_here
// Access in your code through Info.plist
class Config {
 static let apiKey: String = {
 guard let key = Bundle.main.object(forInfoDictionaryKey: "API_KEY") as? String else {
 fatalError("API_KEY not found in configuration")
 }
 return key
 }()
}

গুরুত্বপূর্ণ :এই পদ্ধতি শুধুমাত্র অ-উৎপাদন পরিবেশের জন্য উপযুক্ত! আপনার অ্যাপের সাথে প্রোডাকশন API কী পাঠাবেন না, এমনকি কনফিগার ফাইলেও৷

5. অপর্যাপ্ত প্রমাণীকরণ এবং অনুমোদন

ক্লায়েন্ট-সাইড প্রমাণীকরণ এবং অনুমোদন চেকের উপর নির্ভর করা ঝুঁকিপূর্ণ। আক্রমণকারীরা এই চেকগুলিকে বাইপাস করতে এবং অ্যাপ/রানটাইমের সাথে জবরদস্তি করে বা টেম্পারিং করে অননুমোদিত উপায়ে অ্যাক্সেস করতে পারে৷

কিভাবে ঠিক করবেন:

  • ক্লায়েন্ট-সাইডের পরিবর্তে সার্ভার সাইডে প্রমাণীকরণ এবং অনুমোদন করুন।

  • প্রমাণীকৃত ব্যবহারকারী লগইনের জন্য JWT (JSON ওয়েব টোকেন) বা OAuth 2.0 ব্যবহার করুন।

  • টোকেন চুরির সম্ভাবনা কমানোর জন্য টোকেনের মেয়াদ শেষ হওয়া এবং রিফ্রেশ যুক্তি প্রয়োগ করা প্রয়োজন৷

উদাহরণ:নিরাপদে JWT পাঠানো:

let request = URLRequest(url: apiURL)
request.setValue("Bearer \(jwtToken)", forHTTPHeaderField: "Authorization")

6. অনিরাপদ লগিং এবং ত্রুটি হ্যান্ডলিং

ব্যাপক এবং অনিরাপদ লগিং অনুশীলন, সেইসাথে অজানা ব্যতিক্রম, ব্যবহারকারীর নাম, পাসওয়ার্ড এবং API কী সহ সংবেদনশীল তথ্য প্রকাশের দিকে নিয়ে যেতে পারে৷

কিভাবে ঠিক করবেন:

  • সংবেদনশীল তথ্য সাবধানে লগ করুন।

  • নিয়ন্ত্রিত ত্রুটি ব্যবস্থাপনা প্রয়োগ করুন এবং ব্যবহারকারী-উপস্থাপিত বার্তাগুলিতে ন্যূনতম পরিমাণ তথ্য প্রদান করুন৷

  • নিরাপদ লগিং লাইব্রেরিগুলি প্রয়োগ করুন যা ব্যক্তিগত ডেটা মাস্ক বা এনক্রিপ্ট করে৷

do {
 try someRiskyOperation()
} catch {
 // Log error securely
 Logger.log("Operation failed: \(error.localizedDescription)")
}

7. উপেক্ষা করা কোড অস্পষ্টতা এবং বিপরীত ইঞ্জিনিয়ারিং

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

এর মানে হল যে আপনি যখন একটি সুইফ্ট অ্যাপ কম্পাইল করেন, ফলে বাইনারিতে থাকে:

  • ক্লাসের নাম এবং পদ্ধতি স্বাক্ষর

  • স্ট্রিং লিটারেল (ইউআরএল, ত্রুটি বার্তা, কী)

  • আপনার কোড লজিকের গঠন

  • অ্যালগরিদম বাস্তবায়ন

একজন আক্রমণকারী এই তথ্যটি বের করতে পারে এবং আপনার অ্যাপের প্রমাণীকরণ প্রবাহ বুঝতে এবং এটিকে বাইপাস করতে, আপনার মালিকানাধীন অ্যালগরিদমগুলি অনুলিপি করতে, হার্ডকোডেড API এন্ডপয়েন্ট বা কীগুলি খুঁজে পেতে যা আপনি "লুকানো" বলে মনে করেছিলেন, অর্থ প্রদান ছাড়াই আনলক করার জন্য প্রিমিয়াম বৈশিষ্ট্যগুলি আবিষ্কার করতে পারেন এবং আরও অনেক কিছু করতে পারেন৷

এটি কেন খারাপ – বাস্তব উদাহরণ:

কল্পনা করুন যে আপনার অ্যাপে একটি প্রিমিয়াম বৈশিষ্ট্য চেক আছে:

class FeatureManager {
 func isPremiumUser() -> Bool {
 // Check if user has premium access
 let hasSubscription = UserDefaults.standard.bool(forKey: "premium_unlocked")
 return hasSubscription
 }
 func unlockPremiumFeature() {
 guard isPremiumUser() else {
 showPaywall()
 return
 }
 // Show premium content
 showPremiumContent()
 }
}

একজন আক্রমণকারী আপনার অ্যাপটিকে রিভার্স-ইঞ্জিনিয়ার করতে পারে এবং isPremiumUser() পদ্ধতিটি আবিষ্কার করতে পারে অ্যাক্সেস নিয়ন্ত্রণ করে, এবং এটি কেবল একটি UserDefaults চেক করে premium_unlocked নামক কী . তখন তারা জানবে যে তারা আপনার পেওয়ালকে সম্পূর্ণভাবে বাইপাস করে এই মানটিকে সত্যে সেট করতে রানটাইম ম্যানিপুলেশন টুল ব্যবহার করতে পারে।

কিভাবে ঠিক করবেন:

1. সুইফট কম্পাইলার অপ্টিমাইজেশান ব্যবহার করুন

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

// In your build settings:
// - Set "Optimization Level" to "-O" (or -Osize) for release builds
// - Enable "Strip Debug Symbols During Copy" = YES
// - Set "Strip Style" to "All Symbols"

এটি ফাংশনের নামগুলি সরিয়ে দেয় এবং কম্পাইল করা কোডকে কম পঠনযোগ্য করে তোলে - যদিও ক্লাস/পদ্ধতির নামগুলি আংশিকভাবে দৃশ্যমান থাকে৷

২. প্রতীক অস্পষ্টকরণ সরঞ্জামগুলি ব্যবহার করুন

SwiftShield-এর মতো টুলগুলি আপনার ক্লাস, পদ্ধতি এবং বৈশিষ্ট্যগুলিকে অর্থহীন নামে নামকরণ করতে পারে:

// Before obfuscation (readable to attackers):
class FeatureManager {
 func isPremiumUser() -> Bool { ... }
}
// After obfuscation (harder to understand):
class a7f3b2 {
 func x9k2m() -> Bool { ... }
}

যদিও এটি বিপরীত প্রকৌশল রোধ করে না, এটি আক্রমণকারীদের জন্য কোডটি কী করে তা বোঝা কঠিন করে তোলে৷

3. সংবেদনশীল যুক্তিকে সার্ভারে সরান (সেরা অনুশীলন)

স্থানীয়ভাবে প্রিমিয়াম স্থিতি পরীক্ষা করার পরিবর্তে, এটি সার্ভার-সাইড যাচাই করুন:

// ✅ Secure approach - Server validates everything
class FeatureManager {
 func unlockPremiumFeature() async {
 do {
 // Server checks if user truly has premium access
 let hasAccess = try await backend.verifyPremiumAccess(userId: currentUserId)
 if hasAccess {
 showPremiumContent()
 } else {
 showPaywall()
 }
 } catch {
 // Handle error
 showPaywall()
 }
 }
}

এটি কীভাবে কাজ করে:

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

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

8. অনিরাপদ থার্ড-পার্টি লাইব্রেরি

থার্ড-পার্টি লাইব্রেরিগুলি হ্যাক বা পুরানো হলে ঝুঁকিতে থাকে। ডেভেলপাররা অসাবধানতাবশত নির্ভরতা থেকে সম্ভাব্য নিরাপত্তা ঝুঁকির তুলনায় অ্যাপ কার্যকারিতাকে অগ্রাধিকার দিতে পারে, এবং ETL সরঞ্জামগুলি আরও দক্ষতার সাথে দুর্বলতা সনাক্ত করতে নির্ভরতা-সম্পর্কিত ডেটা পর্যবেক্ষণ এবং প্রক্রিয়াকরণকে স্ট্রিমলাইন করে সাহায্য করতে পারে৷

একটি বিস্তৃত পরিসরে, শক্তিশালী ডেটা সেন্টার নিরাপত্তা অনুশীলনগুলি নিশ্চিত করে যে তৃতীয় পক্ষের উপাদানগুলি ঝুঁকির পরিচয় দিলেও, অন্তর্নিহিত অবকাঠামো আক্রমণের বিরুদ্ধে স্থিতিস্থাপক থাকে৷

কিভাবে ঠিক করবেন:

  • শুধুমাত্র উচ্চ-মানের, ভালভাবে রক্ষণাবেক্ষণ করা লাইব্রেরি ব্যবহার করুন।

  • নির্ভরতা আপডেট করুন এবং সিভিই (সাধারণ দুর্বলতা এবং এক্সপোজার) নিরীক্ষণ করুন।

  • অডিট লাইব্রেরি কোড যদি এটি সংবেদনশীল ডেটা পরিচালনা করে।

9. অপর্যাপ্ত বায়োমেট্রিক এবং মাল্টি-ফ্যাক্টর প্রমাণীকরণ

বেশিরভাগ অ্যাপ্লিকেশন একা পাসওয়ার্ডের উপর নির্ভর করে, যা হ্যাক হওয়ার ঝুঁকিপূর্ণ। ফেস আইডি বা টাচ আইডির মতো বায়োমেট্রিক্স সক্ষম করা ব্যবহারকারীদের নিরাপত্তা বাড়ায়৷

কিভাবে ঠিক করবেন:

  • বায়োমেট্রিক প্রমাণীকরণের জন্য স্থানীয় প্রমাণীকরণ কাঠামো বাঁধুন।

  • মাল্টিফ্যাক্টর অথেন্টিকেশন (MFA) এর জন্য সার্ভার-ভিত্তিক প্রমাণীকরণের সাথে বায়োমেট্রিক্স একত্রিত করুন।

import LocalAuthentication
let context = LAContext()
var error: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
 context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,
 localizedReason: "Access your account") { success, authError in
 DispatchQueue.main.async {
 if success {
 // Proceed securely
 } else {
 // Handle failure (authError may contain the reason)
 print("Authentication failed: \(authError?.localizedDescription ?? "Unknown error")")
 }
 }
}
} else {
// Biometrics not available, check error for details
 print("Biometrics unavailable: \(error?.localizedDescription ?? "Unknown error")")
}

10. পর্যায়ক্রমিক নিরাপত্তা পরীক্ষাকে উপেক্ষা করা

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

অ্যাক্সেসযোগ্য সরঞ্জাম এবং অনুশীলনগুলি ব্যবহার করে নিরাপত্তা পরীক্ষা একাধিক পর্যায়ে হওয়া উচিত:

  1. স্বয়ংক্রিয় নিরাপত্তা স্ক্যান: সাধারণ সমস্যাগুলি ধরতে প্রতিটি বিল্ডের সাথে স্বয়ংক্রিয়ভাবে চালান৷

  2. স্ব-পরিচালিত কোড অডিট: প্রতিষ্ঠিত নির্দেশিকা ব্যবহার করে আপনার নিজের কোডের নিয়মিত নিরাপত্তা-কেন্দ্রিক পর্যালোচনা।

  3. ভালনারেবিলিটি স্ক্যানিং টুলস: নিরাপত্তা ত্রুটির জন্য আপনার অ্যাপ বিশ্লেষণ করতে MobSF এর মতো বিনামূল্যের টুল ব্যবহার করুন।

  4. নির্ভরতা নিরীক্ষা: পরিচিত নিরাপত্তা দুর্বলতার জন্য তৃতীয় পক্ষের লাইব্রেরি পরীক্ষা করা হচ্ছে।

কিভাবে ঠিক করবেন:

1. CI/CDতে স্বয়ংক্রিয় নিরাপত্তা স্ক্যান প্রয়োগ করুন

আপনার ক্রমাগত ইন্টিগ্রেশন পাইপলাইনে সুরক্ষা স্ক্যানিং সরঞ্জামগুলিকে একীভূত করুন যাতে প্রতিটি কোড পরিবর্তন স্বয়ংক্রিয়ভাবে চেক করা হয়:

# Example: GitHub Actions workflow for automated security scanning
name: Security Scan
on: [push, pull_request]
jobs:
 security-scan:
 runs-on: macos-latest
 steps:
 - name: Checkout code
 uses: actions/checkout@v3
 - name: Run MobSF Security Scan
 run: |
 # Mobile Security Framework - scans for common vulnerabilities
 docker run -v $(pwd):/app opensecurity/mobile-security-framework-mobsf
 - name: Dependency Vulnerability Check
 run: |
 # Check CocoaPods/SPM dependencies for known CVEs
 brew install dependency-check
 dependency-check --scan ./Podfile.lock --format JSON
 - name: Secret Detection
 run: |
 # Detect accidentally committed secrets
 brew install truffleHog
 truffleHog filesystem . --json
 - name: Fail build on critical issues
 run: |
 if grep -q "CRITICAL" security-report.json; then
 echo "Critical security issues found!"
 exit 1
 fi

স্বয়ংক্রিয় স্ক্যানগুলি পরীক্ষা করুন:

  • হার্ডকোডেড API কী, টোকেন বা পাসওয়ার্ড

  • অনিরাপদ নেটওয়ার্ক কনফিগারেশন (HTTPS এর পরিবর্তে HTTP-কে অনুমতি দেওয়া)

  • দুর্বল ক্রিপ্টোগ্রাফিক অ্যালগরিদম

  • তৃতীয় পক্ষের লাইব্রেরিতে পরিচিত দুর্বলতাগুলি

  • অনুপযুক্ত SSL/TLS শংসাপত্রের বৈধতা

  • অনিরাপদ ডেটা স্টোরেজ (ইউজারডিফল্টে সংবেদনশীল ডেটা সংরক্ষণ করা)

  • অত্যধিক অ্যাপ অনুমতি

একটি স্বয়ংক্রিয় স্ক্যান থেকে উদাহরণ আউটপুট:

Security Scan Results:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[CRITICAL] Hardcoded API Key Found
 File: APIClient.swift:15
 Issue: API key "sk_live_abc123..." detected in source code
[HIGH] Insecure HTTP Connection
 File: NetworkManager.swift:42
 Issue: App allows cleartext HTTP traffic to api.example.com
 Fix: Enforce HTTPS or add exception to Info.plist if required
[MEDIUM] Weak Encryption Algorithm
 File: DataEncryption.swift:28
 Issue: Using MD5 for hashing (cryptographically broken)
 Fix: Use SHA-256 or better
[LOW] Outdated Dependency
 Library: Alamofire 4.2.0
 Issue: Known vulnerability CVE-2021-12345
 Fix: Update to version 5.6.0 or later
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Build Failed: 2 critical issues must be fixed before deployment

২. দুর্বলতা বিশ্লেষণের জন্য MobSF (মোবাইল নিরাপত্তা ফ্রেমওয়ার্ক) ব্যবহার করুন

MobSF হল একটি বিনামূল্যের, স্বয়ংক্রিয় টুল যা নিরাপত্তা সংক্রান্ত সমস্যার জন্য আপনার iOS অ্যাপ বিশ্লেষণ করে:

# Install and run MobSF locally
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf
# Upload your .ipa file through the web interface at localhost:8000
# MobSF will analyze and provide a detailed security report

MobSF কি চেক করে:

  • হার্ডকোড গোপনীয়তার জন্য বাইনারি বিশ্লেষণ

  • অনিরাপদ ডেটা স্টোরেজ প্যাটার্ন

  • দুর্বল ক্রিপ্টোগ্রাফিক বাস্তবায়ন

  • অনিরাপদ নেটওয়ার্ক সংযোগ

  • কোডের গুণমান এবং নিরাপত্তার সর্বোত্তম অনুশীলন

  • নিরাপত্তা মান সঙ্গে সম্মতি

3. OWASP MSTG ব্যবহার করে নিয়মিত কোড অডিট পরিচালনা করুন

আপনার নিজের কোড অডিট করার জন্য একটি চেকলিস্ট হিসাবে OWASP মোবাইল সিকিউরিটি টেস্টিং গাইড ব্যবহার করুন:

// Example: Following OWASP MSTG recommendations for secure storage
class SecureStorage {
 // ❌ Insecure - UserDefaults is not encrypted
 func saveTokenInsecurely(_ token: String) {
 UserDefaults.standard.set(token, forKey: "authToken")
 }
 // ✅ Secure - Using Keychain as OWASP recommends
 func saveTokenSecurely(_ token: String) throws {
 let data = token.data(using: .utf8)!
 let query: [String: Any] = [
 kSecClass as String: kSecClassGenericPassword,
 kSecAttrAccount as String: "authToken",
 kSecValueData as String: data,
 kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly
 ]
 SecItemDelete(query as CFDictionary)
 let status = SecItemAdd(query as CFDictionary, nil)
 guard status == errSecSuccess else {
 throw StorageError.saveFailed
 }
 }
}

স্ব-অডিটের জন্য OWASP MSTG চেকলিস্ট:

  • [ ] সমস্ত সংবেদনশীল ডেটা কি বিশ্রামে এনক্রিপ্ট করা হয়?

  • [ ] সমস্ত নেটওয়ার্ক কলের জন্য কি HTTPS প্রয়োগ করা হয়?

  • [ ] সার্টিফিকেট কি সঠিকভাবে যাচাই করা হয়েছে?

  • [ ] সংবেদনশীল ডেটা কি লগ থেকে বাদ দেওয়া হয়?

  • [ ] API কী এবং গোপনীয়তা কি হার্ডকোড করা হয় না?

  • [ ] ব্যবহারকারীর ইনপুট কি বৈধ এবং স্যানিটাইজড?

  • [ ] প্রমাণীকরণ টোকেন কি কিচেইনে নিরাপদে সংরক্ষণ করা হয়?

4. স্বয়ংক্রিয় নির্ভরতা স্ক্যানিং

নতুন আবিষ্কৃত দুর্বলতার জন্য ক্রমাগত আপনার নির্ভরতা নিরীক্ষণ করুন:

# For CocoaPods projects
gem install cocoapods-audit
pod audit
# For Swift Package Manager
# Use GitHub Dependabot (free for public repos) or
brew install swift-outdated
swift-outdated

এবং এই সরঞ্জামগুলির সাথে স্বয়ংক্রিয় সতর্কতা সেট আপ করুন:

  • GitHub ডিপেন্ডাবট: স্বয়ংক্রিয়ভাবে পিআর তৈরি করে যখন দুর্বল নির্ভরতা সনাক্ত করা হয় (বিনামূল্যে)

  • Snyk :ওপেন সোর্স প্রকল্পের জন্য বিনামূল্যের স্তর উপলব্ধ

  • OWASP নির্ভরতা-চেক: ফ্রি কমান্ড-লাইন টুল

উপসংহার

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

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

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

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

বিনামূল্যে কোড শিখুন. freeCodeCamp-এর ওপেন সোর্স পাঠ্যক্রম 40,000-এরও বেশি লোককে ডেভেলপার হিসেবে চাকরি পেতে সাহায্য করেছে। শুরু করুন


  1. ইউএসবি এবং ওয়্যারলেস:কীভাবে আপনার আইফোনটিকে একটি উইন্ডোজ ল্যাপটপের সাথে সংযুক্ত করবেন

  2. আইওএসে সরানোর জন্য 5টি প্রমাণিত সমাধান 'অক্ষম স্থানান্তরিত করতে' ত্রুটি৷

  3. Google Pixel Buds বনাম Apple AirPods:কে জিতেছে রেস

  4. 5টি সেরা iPhone হেলথ অ্যাপস যা আপনাকে Apple Health এর সাথে সংযুক্ত করা উচিত