আপনি যদি আমার মতো হন, তবে আপনি এই পেশায় খুব ভালো অ্যাপ্লিকেশন তৈরি করার জন্য এসে থাকেন। যদি আপনি ডেভেলপমেন্টে די lâu থাকেন, তবে সেকিউরিটি-রelated কাজ করতে হয় যা খুব আন্দাজে মজাদার নয়। রেলস ফ্রেমওয়ার্ক অনেক বড় কাজ করে দেয়, তবুও রেলস সিকিউরিটি গভীরভাবে নেওয়া জরুরি।
রেলস সিকিউরিটি কেন গুরুত্বপূর্ণ?
- আপনি সিকিউরিটি সেরা অনুশীলন মেনে চলতে চান কিন্তু সেগুলো বুঝতে পারছেন না?
- XSRF, MITM, এবং XSS আক্রমণ কীভাবে কাজ করে সেটা স্পষ্ট নেই?
- আপনি কি মনে করেন আপনার ছোট বা ইন্টারন্যাল অ্যাপ্লিকেশনগুলো রিস্কে নেই?
উপরের কোনো একটি সত্য হলে, এই গাইড আপনার জন্য। সিকিউরিটি প্রতিটি অ্যাপের জন্য গুরুত্বপূর্ণ, এবং এতে বিনিয়োগ না করা তখন পর্যন্ত ঠিকই যখন পর্যন্ত কোনো সমস্যা হয় না। রেলস ওয়েব অ্যাপ্লিকেশনের সবচেয়ে বড় সিকিউরিটি রিস্কগুলো মিটিয়ে দেওয়ার কাজ অনেক সহজ করে দেয়, তাই এই গ্যাপ বন্ধ না করা বুদ্ধিমানের কাজ নয়।
আপনার অ্যাপ্লিকেশন টার্গেট নয় এমন মনে করছেন?
আপনি সম্ভবত ভুল করছেন। ইন্টারনেটে থাকলে, এটি আক্রমণের আওতায় থাকে। অটোমেটেড সিস্টেম ২৪/৭ জুড়ে বéciaরাজিত ওয়েব অ্যাপের জন্য স্ক্যান করে।
চাহে সংগঠিত অপরাধ হোক বা বট넷, ইন্টারনেটে খারাপ এক্টররা আপনার ব্যবহারকারীদের ডেটা চুরি করতে চায়।
সংগঠিত অপরাধ বাস্তবতা
আপনি কি ডাটাবেসে ক্রেডিট কার্ড বা আনসোল্টেড পাসওয়ার্ড হ্যাশ রাখছেন? আশা করি না! যদি থাকে, তবে আপনি বিপদে পড়েছেন। রেলস এই ধরণের ভুল এড়ানো তুলনামূলকভাবে সহজ করে দেয়।
বটনেট আপনাকে নামাতে পারে

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

ক্রস-সাইট স্ক্রিপ্টিং থেকে প্রতিরক্ষার সহজ উপায়
XSS আক্রমণ থেকে বাঁচতে, ব্যবহারকারীর ইনপুট থেকে যেকোনো টেক্সট এস্কেপ করতে হবে যাতে জাভাস্ক্রিপ্ট হারMLESS টেক্সটে রূপান্তরিত হয়।
আপনি এটি চান:
<script>alert('I am stealing your cookies! Ha!');</script>
এটি চান না:
<script>alert('I am stealing your cookies! Ha!');</script>
কখনও কখনও XSS থেকে প্রতিরক্ষা করা সহজ নয়
ব্যাপারটা হলো, পুরানো রেলস অ্যাপ সিকিউরিটি প্যাচ ছাড়া চলে থাকলে, সম্ভবত XSS ভালনারেবিলিটি আছে। রেলসের খুব পুরানো ভার্সনে, আপনাকে h() মেথড দিয়ে ম্যানুয়ালি অনট্রাস্টেড ইনপুট এস্কেপ করতে হতো।
আধুনিক রেলস অ্যাপ ডিফল্টরূপে HTML আউটপুট এস্কেপ করে, যা বাক্সের বাইরে অধিকাংশ XSS ভালনারেবিলিটি রোধ করে। কিন্তু লিগেসি কোড, থার্ড-পার্টি লাইব্রেরি, বা ডাইনামিক HTML রেন্ডারিং নিয়ে কাজ করার সময় ভুল করা অনেক সহজ।
আধুনিক রেলস ভার্সনে ম গোली খাওয়া যায়। ব্যবহারকারীর ইনপুটে html_safe কল করলে এস্কেপিং সম্পূর্ণরূপে বাইপাস হয়ে যায়, তাই আপনি যদি ইউজার ইনপুট HTML-এ ইন্টারপোলেট করে সেটাকে সেফ ঘোষণা করেন, তবে আপনি মূলত রেলসের বিল্ট-ইন সুরক্ষা বন্ধ করে দিচ্ছেন এবং XSS আপনার অ্যাপ্লিকেশনে আমন্ত্রণ জানাচ্ছেন।
রেলস টিম XSS কে বিশেষভাবে প্রচলিত এবং ক্ষতিকর এক্সপ্লয়েট স্বীকার করেছে, তাই সিকিউরিটি ডকুমেন্টেশনে এর জন্য একটি নিবেদিত সেকশন রেখেছে। এটি পড়া উচিত, আপনি যদি মনে করেন আপনার অ্যাপ্লিকেশন সুরক্ষিত।
ক্রস-সাইট রিকোয়েস্ট ফর্জারি (CSRF)
রেলস অ্যাপ্লিকেশনে অন্য একটি সাধারণ সিকিউরিটি ভালনারেবিলিটি হলো ক্রস-সাইট রিকোয়েস্ট ফর্জারি। একটি উদাহরণ দেখি।
একজন ব্যবহারকারী পাসওয়ার্ড পরিবর্তন করতে চাইলে, তিনি ব্যাকএন্ডে একটি ফর্ম পোস্ট করেন, ঠিক না? তাহলে যদি ফর্মটি আপনার ওয়েবসাইটে না থাকে তবু কী হবে?
রিকোয়েস্টটি যাল্লাবই যাবে। আক্রমণকারী এই সত্যটি সুসজ্জিত এক্সপ্লয়েট দিয়ে সুবিধা নিতে পারে।
CSRF আক্রমণের анатомি
মান লইয়া যাক, আমি একজন আক্রমণকারী যিনি আপনার অ্যাপ্লিকেশন CSRF দিয়ে এক্সপ্লয়েট করতে চান। যদি আমি জানি যে আপনি আপনার অ্যাপে অ্যাডমিন হিসেবে লগইন করা আছে, তবে আমি একটি "পাসওয়ার্ড পরিবর্তন" ফর্ম তৈরি করি যা অন্য কিছুর মত দেখাবে। আপনি সেটি বুঝতে না পারলে সাবমিট করবেন এবং আপনার পাসওয়ার্ড পরিবর্তন হয়ে যাবে।
এটি আরো খারাপ হয় যদি আপনার অ্যাপ POST রিকোয়েস্টের বদলে GET রিকোয়েস্ট ব্যবহার করে।
আমাকে আপনাকে ফাসানোর দরকার নেই। আমি শুধু একটি ইমেজ ট্যাগ একটি পেজে যোগ করে যেটা আপনি gầnে ভিজিট করেছেন, একটি অথেনটিকেটেড রিকোয়েস্ট ট্রিগার করতে পারি।
সৌভাগ্যবশত, রুবি অন রেলস প্রায় বিল্ট-ইন CSRF সুরক্ষা দিয়ে এই শ্রেণির আক্রমণ এড়িয়ে যায়। আপনি এটিকে "আমার সব ফর্মে যেটা র্যান্ডম টেক্সট থাকে সেটা কেন" বলে জানতে পারেন।
<input type="hidden" name="authenticity_token" value="kM3jN8vBx2QzE-7wRtFpL6aYsI9uZcXmD4oHgK1rVnWe5qA0bUiJlSfTyP3hG2oC8xZ7mBvNkL4wQrEtYuI6pA" autocomplete="off" />
এই অস্পষ্ট টেক্সট আসলে একটি সিক্রেট কি যা ব্যবহারকারীর সেশন ডেটায় সংরক্ষিত থাকে। যদি ব্যবহারকারী এমন একটি CSRF টোকেন সাবমিট করেন যা সেশনের সাথে মেলে না, তবে আপনার অ্যাপ এক্সেপশন থ্রো করে। सौভাগ্যবশত, Honeybadger এই এক্সেপশন খুঁজে বের করতে এবং ফিক্স করতে সাহায্য করতে পারে!
তবুও আপনি এটাকে বেরাবের করতে পারেন
নিশ্চয়ই, আপনি একটি কন্ট্রোলারে কেবল এক লাইন কোড দিয়ে CSRF চেকিং বন্ধ করতে পারেন:
skip_before_action :verify_authenticity_token
আপনি GET রুট ব্যবহার করে সমস্যা তৈরি করতে পারেন যেগুলো POST হওয়া উচিত:
MyApp::Application.routes.draw do
match "/launch_all_the_missiles", to: "missiles#launch_all"
end
কিন্তু আপনি এটা করবেন না, ঠিক না? যাই হোক, CSRF-এর ভয়াবহ দিক হলো এটি আপনার অ্যাপে থাকা সমস্যা নয়। একজন ব্যবহারকারী অন্য কোনো সাইটে CSRF এক্সপ্লয়েট এম্বেডেড থাকলে ভিজিট করলে, সেটা আপনার অ্যাপে রিকোয়েস্ট ট্রিগার করতে পারে। রেলসের কাউন্টারমেজার্স ব্যবহার করলে আপনি এই ধরণের সমস্যা থেকে রক্ষা পেতে পারেন।
ম্যান-ইন-দ্য-মিডিল আক্রমণ এবং প্যাকেট স্নিফিং
ম্যান-ইন-দ্য-মিডিল আক্রমণ একটি সাদৃশ্য দিয়ে ভালোভাবে বোঝানো যায়। ধরুন আপনাকে আপনার খারাপ কাজিন ভিন்னিতে কিছু টাকা পাঠাতে হচ্ছে। আপনি টাকাটি একটি লিফাফায় রাখেন, ঠিকানা লিখেন, স্ট্যাম্প লেগিয়ে পোস্টম্যানকে দেন।
এক সপ্তাহ পর লিফাফাটি ভিন্নির বাড়িতে পৌঁছালে টাকা নেই। কী হলো? কেউ আপনি এবং প্রাপকের মাঝপথে লিফাফার বিষয়বস্তু ছেড়খানি করেছে। এটি একটি সহজ ম্যান-ইন-দ্য-মিডিল আক্রমণ।
অ্যাপ্লিকেশন কুকি ম্যান-ইন-দ্য-মিডিল আক্রমণের আওতায়
উপরের গল্পটি একটু হাস্যকর লাগতে পারে, কিন্তু ব্যবহারকারীদের কুকির সাথে একই জিনিস ঘটতে পারে।
কুকি সাধারণত প্রতিটি ওয়েব রিকোয়েস্টের সাথে পাঠানো হয়। যদি এগুলো পাবলিক (Wi-Fi) নেটওয়ার্কে ক্লিয়ারটেক্সটে পাঠানো হয়, তবে গেম 오ভার।
Firesheep এর মত টুল চালানো একজন দুশ্চিন্তা লোক সহজেই ব্যবহারকারীর কুকির কপি পেতে পারে এবং তাদের অ্যাকাউন্ট কংপ্রোমাইজ করতে পারে।
SSL উদ্ধারকারী
সহজ সমাধান হলো সব জায়গায় HTTPS ব্যবহার করা এবং স্ট্রিক্ট ট্রান্সপোর্ট সিকিউরিটি মেনে চলা। ক্যাফেতে লোকরা ট্রাফিক দেখতে পাবে, কিন্তু এনক্রিপ্টেড থাকবে। একটি নন-সহজ কিন্তু কিছু পরিস্থিতিতে আরও ভালো সমাধান হলো রেলসের সিকিউর কুকি ব্যবহার করা।
সিকিউর কুকি শুধুমাত্র HTTPS কানেকশনের মাধ্যমে ব্রাউজারে পাঠানো হবে, যা রেলস ৩ থেকে ডিফল্ট।
আপনি যদি স 그저不幸的是 রেলস ৩-র পুরানো ভার্সন চালাচ্ছেন, তবে সিকিউর কুকি প্লেইন টেক্সটে পাঠানো হতে পারে। সেটা কি সিকিউর?
SQL ইনজেকশন
ইন্টারনেটের অধিকাংশ ওয়েবসাইট টেক্সটের খণ্ডগুলো জোড়া দিয়ে ছোট ছোট SQL প্রোগ্রাম তৈরি করে কাজ করে।
এটা একটু চিন্তা করুন। আপনাকে কি লাগে এটি কতটা পাগলামি? কিন্তু পছন্দ বা নাপছন্দ, এটাই কাজ করার পদ্ধতি। এবং ইন্টারনেট আছে এই সত্যের উপর ভিত্তি করে, এটা যেনে নেওয়া যায় এটি মোটামুটি ভালো কাজ করে।
ইন্টারনেটে SQL নেওয়ার একটি পার্শ্বপ্রতিক্রিয়া হলো, যদি একজন হ্যাকার নিজের টেক্সটের টুকরো SQL প্রোগ্রামে যোগ করতে পারে, তবে আপনার ডেটা সমস্যায় পড়তে পারে।

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 ইনজেকশনের জন্য উন্মুক্ত করতে পারে। SQL কোয়েরিতে সরাসরি params অ্যাক্সেস করা ক্লায়েন্টকে নিজস্ব SQL এক্সিকিউট করার সুযোগ দেয়। একজন চতুর আক্রমণকারী params[:southwest][:lat] কে নিচের মত করে ম্যালিশিয়াস SQL কোড দিয়ে দূষিত করতে পারে:
")), 4326), buildings.location); UPDATE users SET admin=1 WHERE id=666;--"
এখন আমার ইউজার আইডি অ্যাডমিন বিশেষাধিকার পেয়েছে। SQL ইনজেকশন সাধারণ এবং সহজ এক্সপ্লয়েট, তাই যারা সাইটের ট্রাফিক diu দীর্ঘ কাল পর্যবেক্ষণ করে, তারা শেষ পর্যন্ত SQL ইনজেকশন আটেম্প্ট দেখে।
রেলস আমাদের SQL ইনজেকশন থেকে প্রায় স্বয়ংক্রিয়ভাবে রক্ষা করে
রেলস অনেক ক্ষেত্রে SQL ইনজেকশন থেকে রক্ষা করে, যতক্ষণ না আপনি রেলকে কাজ করার দেন। যদি আমরা 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")-এ "amount" স্ট্রিংটি এস্কেপ ছাড়া কোয়েরিতে যোগ হয়? তাই আপনার একটি রিপোর্টে যদি sum মেথডে সরাসরি params["col"] অ্যাক্সেস করেন, তবে আপনি বিপদে পড়েছেন।
নিচে একটি IRB সেশন দেখানো হলো যেখানে অ Coruña ইনপুট sum মেথডে পাস করার ফলাফল:
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 এবং অন্যান্য অনেক মেথডের জন্যও সত্য।
মাস অ্যাসাইনমেন্ট আক্রমণ
৪ মার্চ, ২০১২, রশিয়ান হ্যাকার ইগর হোমাকভ একটি মাস অ্যাসাইনমেন্ট ভালনারেবিলিটি প্রকাশ করেছিলেন যা একজন আক্রমণকারীকে যেকোনো GitHub ব্যবহারকারীর ভেসে আক্রমণ করতে দিত। আপনি কল্পনা করতে পারেন এটি কতটা সমস্যা সৃষ্টি করেছিল।
GitHub কীভাবে হ্যাক হয়েছিল
আমি ধরছি আপনি সেরকম কোড সैंकড়ো বার লিখেছেন:
User.create(params[:user])
রুবি কোডের পঠনীয়তার কারণে, এটি বোঝা সহজ যে এই কোড দিয়ে দিয়ে गये প্যারামিটার্স দিয়ে একটি ইউজার তৈরি হচ্ছে।
রেলস ৩.২.৩ এর আগে, এর অর্থ ছিল যেকোনো প্যারামিটার ইনপুট দেওয়া হলে সেটি মডেলে অ্যাসাইন হবে, যতক্ষণ না আপনি স্পষ্টভাবে অন্যথা নির্দেশ করেন।
এই সমস্যাটি ছিল সহজে ভুলে যাওয়া যায়। এবং ফলে আপনি এমন জগতে পড়েন যেখানে একজন আক্রমণকারী শুধু সঠিক POST রিকোয়েস্ট পাঠিয়ে এটা ঘটাতে পারে:
User.create({admin: true, ...})
বা GitHub-এর ক্ষেত্রে এরকম কিছু:
PublicKey.update({user_id: "123"})
মাস অ্যাসাইনমেন্ট সহজেই ফিক্স হয়
আধুনিক রেলস অ্যাপে মাস অ্যাসাইনমেন্ট ভালনারেবিলিটি সমাধানের পছন্দনীয় উপায় হলো স্ট্রอง প্যারামিটার ব্যবহার করা, যা আপনি এই আর্টিকেলে আগে দেখেছেন।
পুরো params হ্যাশ ব্লাইন্ডলি User.create-এ পাস করার বদলে, আপনি স্পষ্টভাবে ঘোষণা করেন কী অ্যাট্রিবিউটগুলো আপডেট করার অনুমতি:
def user_params
params.require(:user).permit(:name, :email)
end
User.create(user_params)
এই সহজ পছন্দ আপনার মডেলগুলোর রক্ষা করে শুধু আপনার ইচ্ছিত ফিল্ডগুলো আপডেট করার অনুমতি দিয়ে। এটি রেলস ৪ এবং তার পরবর্তী ভার্সনগুলোর ডিফল্ট সুরক্ষা। আপনি যদি খুব পুরানো অ্যাপ মেইনটেইন করেন (রেলস ৪ বা পুরানো), তবে আপগ্রেড করা ভালো।
সার্ভিস অস্বীকৃতি আক্রমণ (DoS/DDoS)
আজকে কতজনকে রাগান্বিত করেছেন? গত মাসে কতজন?
সার্ভিস অস্বীকৃতি আক্রমণ (DoS) এবং বিতরণকৃত সার্ভিস অস্বীকৃতি আক্রমণ (DDoS) হলো ইনফোসেক কমিউনিটির রেজ কমিক্সের ভার্সন। এই আক্রমণগুলো আপনার ডেটা চুরি করে না বা ম্যালওয়্যার ছড়িয়ে দেয় না। এগুলো শুধু আপনাকে বন্ধ করতে চায়। এটি আপনার কোম্পানির জন্য বড় আর্থিক বা রেপুটেশনাল ক্ষতি করতে পারে।
DDoS খারাপ কিন্তু কার্যকর আক্রমণ
DDoS আক্রমণ চালাতে হলে আপনার ৫০০ ঘনিষ্ঠ বন্ধুর ডাক দিন, আমnesty International-এর ওয়েবসাইটে যেতে বলুন, এবং এক ঘণ্টা রিফ্রেশ বাটন চাপতে থাকুন। বট বন্ধুদের প্রতিস্থাপন করতে পারে।
যদি এই ধরনের সমস্যা থাকে, তবে অনেক সমাধান আছে। রেলস এই ধরনের আক্রমণে খুব ফোকাসড নয়, কিন্তু রেট লিমিটিং দ্রুত শুরুর জন্য অনেক জেম আছে। রেলসের থ্রটলিং মিডলওয়্যারও আছে। আপনি আপনার ISP-এর সাথে কথা বলতে পারেন এবং Cloudflare-এর মত প্রক্সি ব্যবহার করতে পারেন, যেটি শক্তিশালী রেট-লিমিটিং ফিচার দেয়। এগুলো বোরিং কিন্তু ভালো পরিচিত সমস্যা।
অ্যালগোরিদমিক কমপ্লেক্সিটি আক্রমণ
এটা শুনতে খুব কুল লাগে, না?
এই আক্রমণগুলো আপনার অপারেটিং সিস্টেম, অ্যাপ্লিকেশন স্ট্যাক ইত্যাদির নির্দিষ্ট দুর্বলতা ব্যবহার করে অ্যাপ্লিকেশন হোস্টে সমস্যা সৃষ্টি করে। এগুলো আপনার সার্ভারের মেমরি পূর্ণ করতে পারে, CPU ইউটিলাইজেশন বাড়াতে পারে, বা ডিস্ক স্পেস পূর্ণ করতে পারে।
উদাহরণস্বরূপ, ক্লাসিক SYN ফ্লাড আক্রমণ সার্ভারে SYN রিকোয়েস্ট পাঠিয়ে কাজ করে। সার্ভার টন কানেকশন খুলে যা বন্ধ হয় না। পর্যাপ্ত ওপেন কানেকশন থাকলে, অপারেটিং সিস্টেম দ্রুত মেমরির অভাব অনুভব করবে এবং অ্যাপ্লিকেশনটি ক্র্যাশ করবে। এটি একটি অ্যালগোরিদমিক বাস্তবতা এক্সপ্লয়েট করে একটি অর্থপূর্ণ সমস্যা সৃষ্টি করে যা পুরো অ্যাপ্লিকেশনকে নামাতে পারে।
পুরানো الطرזের সার্ভার এক্সপ্লয়েট
হ্যাকারের কথা চিন্তা করলে আমরা যেটা ভাবি, সেটাই কি? ছদ্মবেশী লোক বাফার ওভারফ্লো দিয়ে Apache কে রুট ইউজার হিসেবে আর্বিট্রারি কোড চালাতে বাধ্য করে?
কিন্তু অনেক বোরিং কাজের মত, এটিও অটোমেটেড হয়েছে। আপনার সিস্টেম লগ এখনই দেখলে, আমি বাজি লাগাতে পারি আপনি বটদের SSH লগইন ব্রুট-ফোর্স করার চেষ্টা দেখতে পাবেন।
আক্রমণ সনাক্তকরণ অটোমেট করুন
আপনি fail2ban-এর মত জনপ্রিয় টুল ব্যবহার করে আপনার বিরুদ্ধে পরিচিত আক্রমণ চেষ্টা করা হোস্টদের IP ঠিকানা অটোমেটিক্যালি ব্লক করতে পারেন।
যেসব কাজ আপনি জানেন করা উচিত, সেগুলো করুন।
অপারেটিং সিস্টেম প্যাচড রাখুন। যেসerva সার্ভিস লাগে না সেগুলো চালান না। SSH-এর জন্য পাসওয়ার্ড অথেন্টিকেশন অনুমতি দিন না। তালিকা panjang। আপনি যদি কোনো প্ল্যাটফর্ম ব্যবহার করেন, তবে এর অধিকাংশ বিষয় সেটা হ্যান্ডেল করে দেয়।
এখন আপনার রেলস সিকিউরিটি লেভেল আপ করার وقت
প্রথমে, প্যানিক করবেন না! রেলস সিকিউরিটি আপনার কাজের অংশ যেটা আপনি পছন্দ করেন বা না করেন। এখন আপনি এটি সিরিয়াসলি নিচ্ছেন, তাই আপনি ভালনারেবিলিটি মিটিগেট করতে দ্রুত অগ্রগতি করবেন। একটি недоয়োগ করা কিন্তু কার্যকর জিত হলো নিশ্চিত করা যে আপনি রেলসের এমন একটি ভার্সন ব্যবহার করছেন যেটি এখনও সিকিউরিটি আপডেট পাচ্ছে। সকল SQL এস্কেপিং আপনাকে রক্ষা করতে পারবে না যদি ফ্রেমওয়ার্ক এমন একটি ভার্সনে চলে যেন যেটিতে বর্তমানে ক্রিটিক্যাল ভালনারেবিলিটি প্রকাশিত আছে। আপনার জেম ডিপেন্ডেন্সিগুলোর জন্যও একই কথা প্রযোজ্য।
ফ্রেমওয়ার্ক সাপোর্টেড হলে, এই গাইড (এবং রেলস সিকিউরিটি গাইড!) ব্যবহার করে আপনার অ্যাপের রিস্ক সারফেস এরিয়া কমান। স্ট্রং প্যারামিটার ব্যবহার করুন। রেট লিমিটার এবং হয়তো একটি প্রক্সি কনফিগার করুন। HTTP মেথডের জন্য কনভেনশন মেনে চলুন এবং ট্রাফিককে SSL-এ ফোর্স করুন। এই সব কাজ আপনার সিকিউরিটি সমস্যায় ভুগতে হয়ের সম্ভাবনা একটু একটু করে কমিয়ে দেবে।
সম্পাদকের নোট: এই পোস্ট pierwotnie মার্চ ২০১৩-এ প্রকাশিত হয়েছিল এবং সঠিকতার জন্য আপডেট করা হয়েছে।