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

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

আপনি যখন একটি বটনেট চালান, আরও বেশি বট সমান অর্থের সমান। সুতরাং আপনি একটি শোষণ প্যাক কিনুন, একটি পুরানো ব্রাউজার যখন পেলোডে আঘাত করে তখন আপনার ম্যালওয়্যার ইনস্টল করার জন্য এটি সেট আপ করুন এবং তারপরে অনেক ব্যবহারকারীর কাছে পেলোড সরবরাহ করার জন্য কিছু বৈধ সাইট হ্যাক করুন৷
বিদেশী সরকার আপনাকে পেতে প্রস্তুত
এটি একটি কৌতুকের মতো শোনাচ্ছে, কিন্তু চীনা সরকারের হাজার হাজার লোক বাণিজ্য গোপনীয়তা, সরকারি গোয়েন্দা তথ্য এবং এমনকি রাজনৈতিক শত্রুদের সম্পর্কে তথ্যের সন্ধানে সিস্টেম হ্যাক করছে৷
এটা কি খুব মজার কাজ বলে মনে হচ্ছে না?
চীন বিশ্বজুড়ে হ্যাকিং সংস্থান পরিচালনাকারী একমাত্র জাতি-রাষ্ট্র নয়। সারা বিশ্বের সরকার অংশগ্রহণ করে, তাই মনে করবেন না যে আপনার আবেদনটি নিরাপত্তার বিষয়গুলিকে গুরুত্ব সহকারে নেওয়ার জন্য যথেষ্ট গুরুত্বপূর্ণ নয়৷
হ্যাকটিভিস্টরা ছায়ায় লুকিয়ে আছে
আপনি কি প্রতিরক্ষা বিভাগের কাছে ক্ষয়প্রাপ্ত ইউরেনিয়াম স্লাগ বিক্রি করেন? তারপরে, আপনার কাছে এমন কাউকে নিয়োগের জন্য যথেষ্ট অর্থ থাকা উচিত যিনি জানেন যে তারা কী করছে। হ্যাকটিভিস্টরা নিয়মিত ওয়েবসাইটগুলিকে টার্গেট করে যেগুলি তাদের অ্যাক্টিভিজমের লক্ষ্যগুলির সাথে সামঞ্জস্যপূর্ণ৷
৷প্রয়োজনীয় পড়া
এই অপর্যাপ্ত গাইড. আপনি কি এটি ব্যাপক হতে আশা করেছিলেন? ন্যূনতম আপনাকেও পড়তে হবে:
- রেল নিরাপত্তা নির্দেশিকা
- অফিসিয়াল রুবি নিরাপত্তা পৃষ্ঠা
আটটি রুবি নিরাপত্তা দুর্বলতা (বা p0wn'd পাওয়ার আটটি সহজ উপায়)
এখন যেহেতু আমরা একই পৃষ্ঠায় আছি যে নিরাপত্তা কতটা গুরুতর (এমনকি ছোট অ্যাপ্লিকেশানগুলির জন্যও), আপনি সম্ভবত ভাবছেন কীভাবে আপনার রুবি অ্যাপটি সুরক্ষিত হয় তা নিশ্চিত করবেন৷
আমরা আট শ্রেণীর দুর্বলতা কভার করতে যাচ্ছি যা ওয়েব ডেভেলপারদের বোঝার জন্য অত্যন্ত গুরুত্বপূর্ণ।
- অ-প্রযুক্তিগত
- ক্রস-সাইট স্ক্রিপ্টিং (XSS)
- ক্রস-সাইট অনুরোধ জালিয়াতি (CSRF, XSRF)
- Man in the Middle (MITM)
- SQL ইনজেকশন (SQLI)
- ম্যাস অ্যাসাইনমেন্ট এবং প্যারামিটার ইনজেকশন
- পরিষেবার অস্বীকার (DOS, DDOS)
- প্ল্যাটফর্ম আক্রমণ (আপনার অ্যাপ্লিকেশন চালানো হোস্টকে শোষণ করা)
অ-প্রযুক্তিগত নিরাপত্তা শোষণ যা রুবি অন রেল নিরাপত্তাকে প্রভাবিত করতে পারে
কখনও কখনও, সুস্পষ্ট সমস্যাগুলি দেখা সবচেয়ে কঠিন। আপনি একটি চেকলিস্টে এই ভুলগুলি দেখতে পাবেন না, তবে কিছু সাধারণ জ্ঞান ব্যবহার করে এটি মূল্যবান৷
আপনি করতে পারেন এমন বোকা জিনিসের সংখ্যা এবং বৈচিত্র্য অন্তহীন, তাই আমরা কয়েকটি উল্লেখ করব।
করবেন না:
- ইমেলের মাধ্যমে প্লেইনটেক্সট পাসওয়ার্ড পাঠান
- সব জায়গায় একই পাসওয়ার্ড ব্যবহার করুন
- আপনার অফিসে যারা কুকি নিয়ে হাজির হয় তাদের বিশ্বাস করুন
- আপনার ল্যাপটপে সংবেদনশীল ডেটা বহন করুন
ক্রস-সাইট স্ক্রিপ্টিং
এক ধরনের দুর্বলতা রয়েছে যা একজন দূষিত অভিনেতাকে আপনার ব্যবহারকারীদের সুবিধা নিতে দেয় যখন তারা আপনার অ্যাপ্লিকেশন ব্যবহার করে।
যদি আমি একজন খারাপ অভিনেতা হই, আমি আপনার পৃষ্ঠায় আমার কিছু জাভাস্ক্রিপ্ট সন্নিবেশ করার উপায়ে বেশ আগ্রহী হতে পারি।
একবার আমি এটি করে ফেললে, আমি সক্রিয় সেশন কুকিজ চুরি করতে পারি, DOM-এ একটি এক্সপ্লয়েট কিট বুটস্ট্র্যাপ করতে পারি, বা এমনকি পৃষ্ঠাগুলিকে অস্বস্তিকর জিনিস বলতে পারি। এটি ভয়ানকভাবে ক্ষতিকারক নাও শোনাতে পারে, কিন্তু এমনকি দূষিত বিষয়বস্তু ইনজেক্ট করা সুনাম ক্ষতির কারণ হতে পারে।

ক্রস-সাইট স্ক্রিপ্টিংয়ের বিরুদ্ধে রক্ষা করার একটি সহজ উপায় আছে
ক্রস-সাইট স্ক্রিপ্টিংয়ের সুবিধা নিতে চাইছেন এমন আক্রমণকারীদের ব্যর্থ করতে, আপনাকে ব্যবহারকারীর ইনপুট থেকে যেকোনো পাঠ্য এড়িয়ে যেতে হবে, যাতে জাভাস্ক্রিপ্ট ক্ষতিকারক পাঠ্যে পরিণত হয়।
আপনি এটি চান।
<script>alert('I am stealing your cookies! Ha!');</script>
আপনি এটি চান না:
<script>alert('I am stealing your cookies! Ha!');</script>
কখনও কখনও ক্রস-সাইট স্ক্রিপ্টিংয়ের বিরুদ্ধে রক্ষা করা এত সহজ নয়
এখানে জিনিস. আপনার যদি একটি পুরানো রেল অ্যাপ্লিকেশন থাকে যা নিরাপত্তা প্যাচ ছাড়াই চলছে, তাহলে সম্ভবত আপনার XSS দুর্বলতা রয়েছে। রেলের খুব প্রাথমিক সংস্করণে, আপনাকে h() ব্যবহার করে ম্যানুয়ালি অবিশ্বস্ত ইনপুট এড়িয়ে যেতে হয়েছিল পদ্ধতি।
আধুনিক রেল অ্যাপগুলি ডিফল্টরূপে এইচটিএমএল আউটপুট এড়িয়ে যায়, যা বাক্সের বাইরে বেশিরভাগ XSS দুর্বলতা প্রতিরোধ করে। কিন্তু এটি এখনও আশ্চর্যজনকভাবে স্লিপ করা সহজ, বিশেষ করে যখন লিগ্যাসি কোড, থার্ড-পার্টি লাইব্রেরি বা ডায়নামিক এইচটিএমএল রেন্ডারিং নিয়ে কাজ করা হয়।
এমনকি রেলের আধুনিক সংস্করণেও, আপনি নিজেকে পায়ে গুলি করতে পারেন। html_safe কল করা হচ্ছে ব্যবহারকারীর ইনপুট সম্পূর্ণরূপে এস্কেপিংকে বাইপাস করবে, তাই আপনি যদি HTML-এ ব্যবহারকারীর ইনপুটকে ইন্টারপোলেট করছেন এবং এটিকে নিরাপদ চিহ্নিত করছেন, আপনি মূলত রেলের অন্তর্নির্মিত সুরক্ষা বন্ধ করে দিচ্ছেন এবং আপনার অ্যাপ্লিকেশনে XSS-কে আমন্ত্রণ জানাচ্ছেন।
রেল দল ক্রস-সাইট স্ক্রিপ্টিংকে একটি বিশেষভাবে প্রচলিত এবং ক্ষতিকারক শোষণ হিসাবে স্বীকার করে, তাই এই ঝুঁকি কমানোর জন্য আমাদের যা প্রয়োজন তা নিশ্চিত করার জন্য তারা নিরাপত্তা ডকুমেন্টেশনের একটি অংশ উৎসর্গ করেছে। এটি পড়ার যোগ্য, এমনকি যদি আপনি মনে করেন আপনার আবেদন নিরাপদ৷
৷ক্রস-সাইট অনুরোধ জালিয়াতি
রেল অ্যাপ্লিকেশনের আরেকটি সাধারণ নিরাপত্তা দুর্বলতাকে ক্রস-সাইট অনুরোধ জালিয়াতি বলা হয়। আসুন একটি উদাহরণ দেখি।
যদি একজন ব্যবহারকারী তাদের পাসওয়ার্ড পরিবর্তন করতে চায়, তারা ব্যাকএন্ডে একটি ফর্ম পোস্ট করে, তাই না? তাহলে, ফর্মটি আপনার ওয়েবসাইটে না থাকলে কী হবে?
অনুরোধ এখনও মাধ্যমে যায়. আক্রমণকারীরা সতর্কতার সাথে এই সত্যের সুযোগ নিতে পারে।
একটি CSRF আক্রমণের শারীরস্থান
ধরা যাক যে আমি একজন আক্রমণকারী CSRF এর মাধ্যমে আপনার আবেদন কাজে লাগাতে আগ্রহী। যদি আমি জানতে পারি যে আপনি একজন প্রশাসক হিসাবে আপনার অ্যাপে লগ ইন করেছেন, আমি অন্য কিছুর ছদ্মবেশে একটি "পাসওয়ার্ড পরিবর্তন করুন" ফর্ম তৈরি করতে পারি৷ আপনি ফর্মটি না বুঝেই জমা দেবেন এবং আপনার পাসওয়ার্ড পরিবর্তন করবেন।
এবং এটি আরও খারাপ যদি আপনার অ্যাপ POST অনুরোধের পরিবর্তে GET অনুরোধ ব্যবহার করে।
আমি এমনকি আপনি চালাকি করতে হবে না. আপনি সম্প্রতি পরিদর্শন করা একটি পৃষ্ঠায় একটি চিত্র ট্যাগ যোগ করার মাধ্যমে আমি একটি প্রমাণীকৃত অনুরোধ ঘটতে পারি৷
সৌভাগ্যবশত, রুবি অন রেল বেশিরভাগই অন্তর্নির্মিত CSRF সুরক্ষা প্রদান করে এই শ্রেণীর আক্রমণকে পাশ কাটিয়ে যায়। আপনি হয়ত এটাকে "সেই অদ্ভুত টেক্সট হিসেবে জানেন যেটা কোনো কারণে আমার সব ফর্মে রাখা হয়।"
<input type="hidden" name="authenticity_token" value="kM3jN8vBx2QzE-7wRtFpL6aYsI9uZcXmD4oHgK1rVnWe5qA0bUiJlSfTyP3hG2oC8xZ7mBvNkL4wQrEtYuI6pA" autocomplete="off" />
দুর্বোধ্য পাঠ্যটি একটি গোপন কী যা ব্যবহারকারীর সেশন ডেটাতে সংরক্ষণ করা হয়। যদি ব্যবহারকারী একটি CSRF টোকেন জমা দেয় যা সেশনের সাথে মেলে না, আপনার অ্যাপটি একটি ব্যতিক্রম ছুড়ে দেয়। সৌভাগ্যবশত, Honeybadger আপনাকে এই ব্যতিক্রমগুলি খুঁজে পেতে এবং ঠিক করতে সাহায্য করতে পারে!
কিন্তু আপনি এখনও এটি স্ক্রু করতে পারেন
অবশ্যই, আপনি একটি কন্ট্রোলারে কোডের একটি আপাতদৃষ্টিতে নির্দোষ লাইন দিয়ে CSRF চেকিং অক্ষম করতে পারেন:
skip_before_action :verify_authenticity_token
POST রুট হওয়া উচিত এমন জিনিসগুলির জন্য GET রুট ব্যবহার করে আপনি নিজের সমস্যাও তৈরি করতে পারেন:
MyApp::Application.routes.draw do
match "/launch_all_the_missiles", to: "missiles#launch_all"
end
কিন্তু তুমি তা করবে না, তাই না? তবুও, CSRF সম্পর্কে ভীতিকর অংশ হল যে এটি আপনার অ্যাপ হতে হবে না যাতে সমস্যাটি রয়েছে। একজন ব্যবহারকারী একটি CSRF শোষণ এমবেড করা সহ অন্য সাইট পরিদর্শন করতে পারে, আপনার অ্যাপে একটি অনুরোধ ট্রিগার করে। রেলের পাল্টা ব্যবস্থার উপর ঝুঁকে থাকা আপনাকে এই ধরণের জিনিস থেকে রক্ষা করতে সাহায্য করতে পারে।
মানুষ-ইন-দ্য-মিডল আক্রমণ এবং প্যাকেট স্নিফিং
ম্যান-ইন-দ্য-মিডল আক্রমণগুলি একটি উপমা দিয়ে সবচেয়ে ভাল ব্যাখ্যা করা হয়। ধরা যাক আপনার পচা, ভালো কাজিন ভিনিকে কিছু নগদ পাঠাতে হবে। আপনি নগদ নিতে পারেন, এটি একটি খামে রাখতে পারেন, সেই জারজের ঠিকানা লিখতে পারেন, একটি স্ট্যাম্প যোগ করতে পারেন এবং খামটি মেইল ক্যারিয়ারের হাতে তুলে দিতে পারেন৷
এক সপ্তাহ পরে, খামটি ভিনির বাড়িতে আসে যার ভিতরে নগদ নেই। কি হয়েছে? কেউ আপনার এবং উদ্দেশ্যপ্রণোদিত প্রাপকের মধ্যে খামের বিষয়বস্তুর সাথে কারসাজি করেছে৷ এটি একটি সাধারণ ম্যান-ইন-দ্য-মিডল অ্যাটাক।
অ্যাপ্লিকেশন কুকি ম্যান-ইন-দ্য-মিডল আক্রমণের জন্য ঝুঁকিপূর্ণ
উপরের গল্পটি একটু মূর্খ মনে হতে পারে, কিন্তু একই জিনিস আপনার ব্যবহারকারীদের কুকির সাথে ঘটতে পারে।
কুকি সাধারণত প্রতিটি ওয়েব অনুরোধের সাথে পাঠানো হয়। যদি সেগুলিকে একটি পাবলিক (ওয়াইফাই) নেটওয়ার্কের মাধ্যমে পরিষ্কার পাঠে পাঠানো হয়, তাহলে খেলা শেষ৷
৷ফায়ারশিপের মতো কিছু চালাতে থাকা একজন দুষ্ট ব্যক্তি সহজেই ব্যবহারকারীর কুকির কপি পেতে পারে এবং তাদের অ্যাকাউন্টে আপস করতে পারে।
উদ্ধারে SSL
সহজ উত্তর হল সবকিছুর জন্য HTTPS ব্যবহার করা এবং কঠোর পরিবহন নিরাপত্তা অনুসরণ করা। ক্যাফেতে থাকা লোকেরা এখনও ব্যবহারকারীর ট্র্যাফিক দেখতে পারে, তবে এটি এনক্রিপ্ট করা হয়েছে৷ একটি-অত-সহজ-কিন্তু-সম্ভবত-কিছু-পরিস্থিতি-উত্তর হল Rails-এর নিরাপদ কুকিজ ব্যবহার করা।
নিরাপদ কুকিগুলি শুধুমাত্র একটি HTTPS সংযোগের মাধ্যমে ব্রাউজারে পাঠানো হবে, যা Rails 3 থেকে ডিফল্ট।
আপনি যদি এর চেয়ে পুরানো রেলগুলির একটি সংস্করণ চালানোর পক্ষে যথেষ্ট দুর্ভাগ্যবান হন, তবে নিরাপদ কুকিগুলি সরল পাঠ্যের মাধ্যমে পাঠানো যেতে পারে। তাই নিরাপদ নয়, তাই না?
SQL ইনজেকশন
ইন্টারনেটের বেশিরভাগ ওয়েবসাইটই এসকিউএল নামক একটি ভাষায় ছোট ছোট প্রোগ্রাম তৈরি করার জন্য পাঠ্যের টুকরোগুলোকে একত্রিত করে কাজ করে।
শুধু যে সম্পর্কে চিন্তা. আপনার কি কোন ধারণা আছে এটা কতটা পাগল?
কিন্তু, এটা পছন্দ বা না, এই উপায় জিনিস কাজ. এবং ইন্টারনেটের অস্তিত্বের উপর ভিত্তি করে, এটি অবশ্যই যুক্তিসঙ্গতভাবে কাজ করবে।
ইন্টারনেটে এসকিউএলকে ঢেলে সাজানোর একটি পার্শ্বপ্রতিক্রিয়া হল যে হ্যাকার যদি ছোট এসকিউএল প্রোগ্রামে তাদের নিজস্ব বিট টেক্সট যোগ করতে পারে, তাহলে আপনার ডেটা সমস্যার সম্মুখীন হতে পারে।

এসকিউএল ইনজেকশনের একটি উদাহরণ
কল্পনা করুন যে আপনার ঠিকাদার আপনাকে এমন কিছু কোড পাঠায় যা দেখতে এইরকম।
Building.where("st_intersects(st_setsrid(st_makebox2d(st_point(#{params[:northeast][:lng]}, #{params[:northeast][:lat]}), st_point(#{params[:southwest][:lng]}, %{params[:southwest][:lat]})), 4326), buildings.location)")
এটি একটি বিশাল ভুল যা আপনাকে একটি এসকিউএল ইনজেকশনে খুলতে পারে। একটি SQL ক্যোয়ারীতে সরাসরি প্যারামগুলি অ্যাক্সেস করা ক্লায়েন্টকে তাদের নিজস্ব এসকিউএল চালানোর জন্য বাধ্য করার বিকল্প দেয়। একজন চতুর আক্রমণকারী params[:southwest][:lat] তৈরি করতে পারে এইরকম কিছু দূষিত SQL কোড থাকে:
")), 4326), buildings.location); UPDATE users SET admin=1 WHERE id=666;--"
এবং এখন আমার ব্যবহারকারী আইডি অ্যাডমিন বিশেষাধিকার আছে. এসকিউএল ইনজেকশনগুলি সাধারণ এবং সহজ কাজে লাগে, তাই যে কেউ তাদের সাইটের ট্রাফিক দীর্ঘক্ষণ দেখেন তারা শেষ পর্যন্ত এসকিউএল ইনজেকশনের কিছু প্রচেষ্টা দেখতে পাবেন।
রেলস প্রায় স্বয়ংক্রিয়ভাবে এসকিউএল ইনজেকশন থেকে আমাদের রক্ষা করে
রেল অনেক ক্ষেত্রে এসকিউএল ইনজেকশন থেকে রক্ষা করে, যতক্ষণ আপনি এটি করতে দেন। যদি আমরা where ব্যবহার করতাম সঠিকভাবে, পরামিতিগুলি এস্কেপ হয়ে যেত, এবং SQL ইনজেকশন প্রচেষ্টা ব্যর্থ হত৷
where("st_intersects(st_setsrid(st_makebox2d(st_point(?, ?), st_point(?, ?)), 4326), #{table_name}.location)", box[:northeast][:lng], box[:northeast][:lat], box[:southwest][:lng], box[:southwest][:lat]).
রেল সবসময় SQL ইনজেকশন থেকে রক্ষা করে না
কিন্তু এমন অনেক জায়গা আছে যেখানে রেল কাঁচা SQL ব্যবহার করে। স্থানগুলি আপনি সহজেই উপেক্ষা করতে পারেন৷
৷
উদাহরণস্বরূপ, আপনি কি এটি SomeModel.sum("amount")-এ জানেন , "অ্যামাউন্ট" স্ট্রিংটি এস্কেপড না হয়েই ক্যোয়ারীতে যোগ করা হয়েছে?
তাই যদি আপনার কাছে একটি প্রতিবেদন থাকে যেখানে আপনি কল করুন sum params["col"] এর সরাসরি অ্যাক্সেস সহ পদ্ধতি , আপনি সমস্যায় আছেন।
এখানে একটি উদাহরণ IRB সেশন রয়েছে, যা সমষ্টি পদ্ধতিতে অবিশ্বস্ত ইনপুট পাস করার ফলাফল দেখাচ্ছে:
pry(main)> User.sum(%[id) AS sum_id FROM users; update users set
admin='t' where id=224;--])
(22.4ms) SELECT SUM(id) AS sum_id FROM users; update users set
admin='t' where id=224;--) AS sum_id FROM "users"
=> "0"
#pluck এর ক্ষেত্রেও একই কথা , সেইসাথে অন্যান্য পদ্ধতির হোস্ট।
ম্যাস অ্যাসাইনমেন্ট আক্রমণ
4 মার্চ, 2012, রাশিয়ান হ্যাকার এগর হোমাকভ একটি গণ অ্যাসাইনমেন্টের দুর্বলতা প্রকাশ করেছেন যা একজন আক্রমণকারীকে যেকোন গিটহাব ব্যবহারকারী হিসাবে মাস্করেড করতে দিতে পারে। আপনি কল্পনা করতে পারেন, এটি অসাধারণভাবে সমস্যাযুক্ত ছিল।
কিভাবে GitHub হ্যাক হয়েছিল
আমি বাজি ধরে বলতে পারি আপনি এইরকম কয়েকশ বার কোড লিখেছেন:
User.create(params[:user])
রুবি কোডের পঠনযোগ্যতার জন্য ধন্যবাদ, এটা বলা বেশ সহজ যে এই কোডটি প্রদত্ত প্যারামিটার সহ একজন ব্যবহারকারী তৈরি করে৷
Rails 3.2.3-এর আগে, এর মানে হল যে যে কোনও প্যারামিটার যেটি ইনপুট ছিল মডেলে বরাদ্দ করা হবে যদি না আপনি স্পষ্টভাবে অন্যথায় উল্লেখ করেন।
এটি যে সমস্যাটি চালু করেছিল তা ছিল ভুলে যাওয়া সহজ। এবং তাই আপনি নিজেকে এমন একটি জগতে খুঁজে পান যেখানে একজন আক্রমণকারীকে এটি ঘটানোর জন্য সঠিক POST অনুরোধ পাঠাতে হবে:
User.create({admin: true, ...})
অথবা গিটহাবের ক্ষেত্রে, এরকম কিছু:
PublicKey.update({user_id: "123"})
মাস অ্যাসাইনমেন্ট একটি সহজ সমাধান
আধুনিক Rails অ্যাপে ব্যাপক নিয়োগের দুর্বলতাগুলির পছন্দের সমাধান হল শক্তিশালী প্যারামিটার ব্যবহার করা, যা এই নিবন্ধের আগে থেকেই আপনার পরিচিত হওয়া উচিত৷
পুরো params অন্ধভাবে পাস করার পরিবর্তে হ্যাশ থেকে User.create , আপনি স্পষ্টভাবে ঘোষণা করেন যে কোন বৈশিষ্ট্যগুলি অনুমোদিত:
def user_params
params.require(:user).permit(:name, :email)
end
User.create(user_params)
আপনি যে ক্ষেত্রগুলি আপডেট করতে চান তা তালিকাভুক্ত করার মাধ্যমে এই সহজ পছন্দটি আপনার মডেলগুলিকে সুরক্ষিত করে৷ এটি Rails 4 এবং তার পরেও ডিফল্ট সুরক্ষা। আপনি যদি সত্যিই একটি পুরানো অ্যাপ (যেমন Rails 4 বা তার বেশি) বজায় রাখেন, তবে এটি আপগ্রেড করা মূল্যবান৷
পরিষেবা আক্রমণ অস্বীকার
আপনি আজ কত লোককে বিরক্ত করেছেন? গত মাসের কি?
ডিনায়াল অফ সার্ভিস অ্যাটাক (DOS) এবং ডিস্ট্রিবিউটেড ডিনায়েল অফ সার্ভিস অ্যাটাক (DDOS) হল একটি রাগ কমিকের ইনফোসেক সম্প্রদায়ের সংস্করণ। এই আক্রমণগুলি আপনার ডেটা চুরি করতে বা ম্যালওয়্যার ছড়াতে যাচ্ছে না। তারা শুধু আপনাকে বন্ধ করতে চায়। এটি এখনও আপনার কোম্পানির ব্যাপক আর্থিক বা সুনাম ক্ষতির কারণ হতে পারে।
DDOS একটি অশোধিত কিন্তু কার্যকর আক্রমণ
পরিষেবা আক্রমণের একটি বিতরণ অস্বীকার মাউন্ট করতে, শুধুমাত্র আপনার নিকটতম 500 জন বন্ধুকে কল করুন, তাদের অ্যামনেস্টি ইন্টারন্যাশনালের ওয়েবসাইটে যেতে বলুন এবং এক ঘন্টার জন্য রিফ্রেশ টিপে রাখুন৷ বন্ধুদের জন্য বট প্রতিস্থাপিত হতে পারে
আপনার যদি এই ধরনের সমস্যা থাকে, তাহলে অনেকগুলো সমাধান আছে। রেলগুলি এই ধরণের আক্রমণের উপর খুব বেশি ফোকাস করে না, তবে বেশ কয়েকটি রত্ন রয়েছে যা আপনাকে দ্রুত হার সীমিত করতে সহায়তা করতে পারে। রেলগুলিতে থ্রটলিং মিডলওয়্যারও রয়েছে যা আপনি ব্যবহার করতে পারেন। আপনি আপনার ISP-এর সাথে কথা বলার এবং Cloudflare-এর মতো একটি প্রক্সি ব্যবহার করার কথাও বিবেচনা করতে পারেন, যা দৃঢ় হার-সীমাবদ্ধ বৈশিষ্ট্যগুলি অফার করে। এগুলি বেশ বিরক্তিকর কিন্তু সুপরিচিত সমস্যা৷
৷অ্যালগরিদমিক জটিলতা আক্রমণ
এটা শুধু অদ্ভুত সুন্দর শোনাচ্ছে, তাই না?
এই আক্রমণগুলি আপনার অপারেটিং সিস্টেম, অ্যাপ্লিকেশন স্ট্যাক ইত্যাদির একটি বিশেষ দুর্বলতার সুযোগ নেয়, যা অ্যাপ্লিকেশন হোস্টে সমস্যা সৃষ্টি করে। এগুলি আপনার সার্ভারের মেমরি পূরণ করতে, আপনার CPU ব্যবহার বাড়াতে বা এমনকি ডিস্কের স্থান পূরণ করতে ব্যবহার করা যেতে পারে৷
উদাহরণস্বরূপ, ক্লাসিক SYN বন্যা আক্রমণ একটি সার্ভারে SYN অনুরোধ পাঠিয়ে কাজ করে। সার্ভারটি এক টন সংযোগ খোলে যা বন্ধ হয় না। পর্যাপ্ত খোলা সংযোগের সাথে, অপারেটিং সিস্টেমটি দ্রুত মেমরি ফুরিয়ে যাবে এবং অ্যাপ্লিকেশনটি নিজেই ক্র্যাশ হয়ে যাবে। এটি একটি অ্যালগরিদমিক বাস্তবতাকে কাজে লাগিয়ে একটি অর্থপূর্ণ সমস্যা সৃষ্টি করে যা একটি অ্যাপ্লিকেশনকে সম্পূর্ণভাবে বাতিল করতে পারে।
ভাল পুরানো ধাঁচের সার্ভার শোষণ
আমরা যখন হ্যাকারদের কথা ভাবি তখন এই সত্যিই কি আমরা ভাবি, তাই না? শ্যাডি লোকেরা বাফার ওভারফ্লো ব্যবহার করে অ্যাপাচিকে রুট ব্যবহারকারী হিসাবে স্বেচ্ছাচারী কোড চালাতে?
কিন্তু অনেক বিরক্তিকর কাজের মতো, এটিও স্বয়ংক্রিয় হয়েছে। আপনি যদি এখনই আপনার সিস্টেম লগগুলি দেখেন, আমি বাজি ধরে বলতে পারি আপনি দেখতে পাবেন যে বটগুলি একটি SSH লগইনকে জোরপূর্বক করার চেষ্টা করছে৷
স্বয়ংক্রিয় আক্রমণ সনাক্তকরণ
আপনি fail2ban এর মতো একটি জনপ্রিয় টুল ব্যবহার করতে পারেন যাতে আপনার বিরুদ্ধে পরিচিত আক্রমণের চেষ্টা করা হোস্টের আইপি ঠিকানাগুলি স্বয়ংক্রিয়ভাবে ব্লক করা যায়।
আপনি যে কাজগুলি করতে জানেন তা করুন৷
৷আপনার অপারেটিং সিস্টেম প্যাচ রাখুন. আপনার প্রয়োজন নেই এমন পরিষেবাগুলি চালাবেন না। SSH-এর জন্য পাসওয়ার্ড প্রমাণীকরণের অনুমতি দেবেন না। তালিকা চলতে থাকে। আপনি যদি একটি প্ল্যাটফর্ম ব্যবহার করেন, তবে এর বেশিরভাগই আপনার জন্য পরিচালনা করা হয়।
এটি আপনার রেল নিরাপত্তা সমতল করার সময়
প্রথমত, আতঙ্কিত হবেন না! আপনি এটি পছন্দ করুন বা না করুন রেল নিরাপত্তা আপনার কাজের অংশ. এখন যেহেতু আপনি এটিকে গুরুত্ব সহকারে নিচ্ছেন, আপনি দুর্বলতা প্রশমনে দ্রুত অগ্রগতি করবেন। একটি আন্ডাররেটেড কিন্তু কার্যকর জয় হল নিশ্চিত করা যে আপনি রেলের একটি সংস্করণ ব্যবহার করছেন যা এখনও নিরাপত্তা আপডেট পাচ্ছে। বিশ্বের সমস্ত SQL পালানো আপনাকে রক্ষা করতে পারে না যদি ফ্রেমওয়ার্কটি এমন একটি সংস্করণে চলছে যা বর্তমানে সমালোচনামূলক দুর্বলতা প্রকাশ করেছে। আপনার রত্ন নির্ভরতার ক্ষেত্রেও একই কথা।
একবার ফ্রেমওয়ার্ক সমর্থিত হলে, আপনার অ্যাপের পৃষ্ঠের ক্ষেত্রফলের ঝুঁকি কমাতে এই নির্দেশিকা (এবং রেল নিরাপত্তা নির্দেশিকা!) ব্যবহার করুন। শক্তিশালী পরামিতি ব্যবহার করুন। একটি রেট লিমিটার এবং সম্ভবত একটি প্রক্সি কনফিগার করুন। পদ্ধতির জন্য HTTP কনভেনশন অনুসরণ করুন এবং ট্রাফিককে SSL হতে বাধ্য করুন। এই সমস্ত জিনিসগুলি আপনার নিরাপত্তা সমস্যায় একটু একটু করে ভোগার সম্ভাবনা কমিয়ে দেবে।
সম্পাদকের নোট:এই পোস্টটি মূলত মার্চ 2013 এ প্রকাশিত হয়েছিল এবং সঠিকতার জন্য আপডেট করা হয়েছে৷