এটি ইন্টারনেট গেমস এবং প্রতিযোগিতাগুলির সাথে একটি ক্লাসিক সমস্যা। আপনার ফ্ল্যাশ কোড একটি গেমের স্কোর স্থির করতে ব্যবহারকারীদের সাথে কাজ করে। তবে ব্যবহারকারীরা বিশ্বাসযোগ্য নয় এবং ফ্ল্যাশ কোডটি ব্যবহারকারীর কম্পিউটারে চলে। আপনি SOL। আক্রমণকারীকে উচ্চ স্কোর জাল করা থেকে বিরত রাখতে আপনি কিছুই করতে পারবেন না:
বাইশকোডগুলি ভাল ডকুমেন্টেড এবং একটি উচ্চ-স্তরের ভাষা (অ্যাকশনস্রিপ্ট) বর্ণনা করে --- আপনি যখন কোনও ফ্ল্যাশ গেম প্রকাশ করেন তখন আপনি আপনার উত্স কোডটি প্রকাশ করছেন, আপনি যদি মনে করেন তবে এটিকে প্রত্যাশিত ইঞ্জিনিয়ারের তুলনায় ফ্ল্যাশ করা আরও সহজ Flash এটা না জানি।
আক্রমণকারীরা ফ্ল্যাশ ইন্টারপ্রেটারের রানটাইম মেমরিটিকে নিয়ন্ত্রণ করে, যাতে যে কেউ প্রোগ্রামযোগ্য ডিবাগারটি ব্যবহার করতে জানেন তিনি যে কোনও সময়ে যে কোনও চলক (বর্তমান স্কোর সহ) পরিবর্তন করতে পারেন বা প্রোগ্রামটি নিজেই পরিবর্তন করতে পারেন।
আপনার সিস্টেমের বিরুদ্ধে সবচেয়ে সহজতম আক্রমণ হ'ল একটি প্রক্সি মাধ্যমে গেমের জন্য এইচটিটিপি ট্র্যাফিক চালানো, উচ্চ-স্কোর সেভকে ধরা এবং এটি একটি উচ্চতর স্কোর দিয়ে পুনরায় খেলুন।
আপনি প্রতিটি উচ্চ স্কোরকে গেমের একক দফায় বাঁচিয়ে এই আক্রমণটি আটকে দেওয়ার চেষ্টা করতে পারেন, উদাহরণস্বরূপ, গেম শুরু করার সময় ক্লায়েন্টকে একটি এনক্রিপ্ট করা টোকন প্রেরণ করে, যা দেখতে দেখতে পারে:
hex-encoding( AES(secret-key-stored-only-on-server, timestamp, user-id, random-number))
(আপনি একই প্রভাবের জন্য একটি সেশন কুকি ব্যবহার করতে পারেন)।
গেম কোডটি উচ্চ-স্কোর সংরক্ষণের সাথে এই টোকনটি সার্ভারে ফিরে আসে। তবে কোনও আক্রমণকারী এখনও গেমটি আবার চালু করতে পারে, একটি টোকেন পেতে এবং তারপরে তাত্ক্ষণিকভাবে সেই টোকনটিকে পুনরায় খেলানো উচ্চ-স্কোর সেভের মধ্যে আটকে দিতে পারে।
সুতরাং এর পরে আপনি কেবল একটি টোকেন বা সেশন কুকিই খাবেন না, তবে একটি উচ্চ-স্কোর-এনক্রিপ্টিং সেশন কীও। এটি একটি 128 বিট এইএস কী হবে যা নিজেই ফ্ল্যাশ গেমটিতে হার্ডকোডযুক্ত একটি কী দিয়ে এনক্রিপ্ট করা হবে:
hex-encoding( AES(key-hardcoded-in-flash-game, random-128-bit-key))
গেমটি উচ্চ স্কোর পোস্ট করার আগে এটি উচ্চ স্কোর-এনক্রিপ্টিং-সেশন কীটি ডিক্রিপ্ট করে যা এটি করতে পারে কারণ আপনি ফ্ল্যাশ বাইনারিতে উচ্চ-স্কোর-এনক্রিপ্টিং-সেশন-কী-ডিক্রিপ্টিং-কে হার্ডকড করেছেন। আপনি উচ্চ স্কোরের এসএএএ 1 হ্যাশ সহ এই ডিক্রিপ্টড কী দিয়ে উচ্চ স্কোরটি এনক্রিপ্ট করেছেন:
hex-encoding( AES(random-128-bit-key-from-above, high-score, SHA1(high-score)))
সার্ভারের পিএইচপি কোডটি অনুরোধটি কোনও বৈধ গেমসের উদাহরণ থেকে এসেছে কিনা তা নিশ্চিত করতে টোকনটি পরীক্ষা করে, তারপরে এনক্রিপ্টড উচ্চ স্কোরটি ডিক্রিপ্ট করে, উচ্চ স্কোরের উচ্চতর স্কোরের এসএএএএ 1 এর সাথে মেলে কিনা তা নিশ্চিত করার জন্য পরীক্ষা করে (যদি আপনি এই পদক্ষেপটি এড়িয়ে যান) , ডিক্রিপশন সহজেই এলোমেলোভাবে তৈরি করবে, সম্ভবত খুব উচ্চ, উচ্চ স্কোর)।
সুতরাং এখন আক্রমণকারী আপনার ফ্ল্যাশ কোডটি বিভক্ত করেছে এবং দ্রুত এইএস কোডটি সন্ধান করে, যা একটি ঘা থাম্বের মতো দাঁড়িয়ে আছে, যদিও এটি মেমরির অনুসন্ধান এবং একটি ট্রেসারের সাহায্যে 15 মিনিটের মধ্যে সন্ধান করা হবে না ("আমি জানি এই গেমটির জন্য আমার স্কোর 6 666, সুতরাং আসুন আমরা স্মৃতিতে 6 666 সন্ধান করি, তারপরে যে মানটি স্পর্শ করে এমন কোনও অপারেশন ধরুন --- ওহে দেখুন, উচ্চ স্কোরের এনক্রিপশন কোড! ")। সেশন কী সহ, আক্রমণকারীকে এমনকি ফ্ল্যাশ কোড চালাতে হবে না; তিনি একটি গেম লঞ্চ টোকেন এবং একটি সেশন কী ধরে এবং একটি স্বেচ্ছাসেবী উচ্চ স্কোর ফিরে পাঠাতে পারেন।
আপনি এখন সেই মুহূর্তে রয়েছেন যেখানে বেশিরভাগ বিকাশকারীরা হাল ছেড়ে দেয় --- আক্রমণকারীদের সাথে কয়েক মাস গণ্ডগোলের মাধ্যমে দিন বা নিন:
এক্সওর ক্রিয়াকলাপ সহ এইএস কীগুলি স্ক্র্যাম্বলিং
কী গণনা করে এমন ফাংশনগুলির সাথে কী বাইট অ্যারেগুলি প্রতিস্থাপন করা
বাইনারি জুড়ে জাল কী এনক্রিপশন এবং উচ্চ স্কোর পোস্টিং ছড়িয়ে দেওয়া।
এটি বেশিরভাগ সময় ব্যর্থতা। এটি বলার অপেক্ষা রাখে না, এসএসএল আপনাকেও সহায়তা করবে না; যখন দুটি এসএসএল শেষ পয়েন্টের মধ্যে একটি খারাপ হয় তখন এসএসএল আপনাকে রক্ষা করতে পারে না।
এখানে এমন কিছু জিনিস রয়েছে যা আসলে উচ্চ স্কোর জালিয়াতি হ্রাস করতে পারে:
গেমটি খেলতে লগইন প্রয়োজন, লগইনটিতে একটি সেশন কুকি তৈরি করা উচিত এবং একই সেশনে একাধিক অসামান্য গেমের প্রবর্তন বা একই ব্যবহারকারীর জন্য একাধিক সমকালীন সেশনের অনুমতি দেবেন না।
গেম সেশনগুলি থেকে সর্বোচ্চ স্কোরগুলি প্রত্যাখ্যান করুন যা সর্বকালের খ্রিস্টতম সংক্ষিপ্ত বাস্তব গেমগুলির চেয়ে কম স্থায়ী হয় (আরও পরিশীলিত পদ্ধতির জন্য, গেম সেশনের জন্য "আলাদা করা" উচ্চতর স্কোরগুলি চেষ্টা করুন যা গড় গেমের সময়কালের চেয়ে কম 2 স্ট্যান্ডার্ড বিচ্যুতি স্থায়ী করে)। আপনি গেমের সময়সীমার সার্ভারসাইড ট্র্যাক করছেন তা নিশ্চিত করুন।
লগইনগুলি যা কেবল একবার বা দু'বার কেবল গেমটি খেলেছে সেগুলি থেকে প্রত্যাখাত বা কোয়ারানটাইন উচ্চ স্কোর, যাতে আক্রমণকারীরা তাদের তৈরি প্রতিটি লগইনের জন্য যুক্তিসঙ্গত চেহারা গেম খেলার একটি "পেপার ট্রেইল" তৈরি করতে হয়।
গেম প্লে চলাকালীন "হার্টবিট" স্কোরগুলি, যাতে আপনার সার্ভারটি একটি গেম খেলার জীবনকালে স্কোর বৃদ্ধি দেখে। উচ্চতর স্কোরগুলি প্রত্যাখ্যান করুন যা যুক্তিসঙ্গত স্কোর বক্ররেখার অনুসরণ করে না (উদাহরণস্বরূপ, 0 থেকে 999999 এ ঝাঁপিয়ে পড়া)।
গেম প্লে চলাকালীন "স্ন্যাপশট" গেমের অবস্থা (উদাহরণস্বরূপ, গোলাবারুদের পরিমাণ, স্তরে অবস্থান ইত্যাদি), যা আপনি পরে রেকর্ডকৃত অন্তর্বর্তী স্কোরগুলির বিরুদ্ধে পুনর্মিলন করতে পারেন। এমনকি শুরু করার জন্য আপনার এই ডেটাতে অসঙ্গতিগুলি সনাক্ত করার উপায়ও নেই; আপনাকে কেবল এটি সংগ্রহ করতে হবে, এবং তারপরে আপনি জিনিস ফিরে দেখতে দেখতে বিশ্লেষণ করতে পারেন।
আপনার সুরক্ষা চেকগুলির মধ্যে যে কোনও একটি ব্যর্থ হয়েছে এমন কোনও ব্যবহারকারীর অ্যাকাউন্টটি অক্ষম করুন (উদাহরণস্বরূপ, কোনও এনক্রিপ্ট করা উচ্চ স্কোর যা বৈধকরণে ব্যর্থ হয় তা জমা দিয়ে)।
মনে রাখবেন যে আপনি এখানে কেবল উচ্চ স্কোর জালিয়াতির প্রতিরোধ করছেন। আছে কিছুই যদি আপনি প্রতিরোধ করতে পারবেন না। যদি আপনার গেমটিতে লাইনটিতে অর্থ রয়েছে তবে কেউ আপনার সাথে আসা যে কোনও সিস্টেমকে পরাস্ত করবে। উদ্দেশ্য এই আক্রমণ থামানো নয় ; এটি খেলায় সত্যই ভাল হওয়া এবং এটাকে মারার চেয়ে আক্রমণটিকে আরও ব্যয়বহুল করে তোলা।