Cross-Site Scripting (XSS) এবং Cross-Site Request Forgery (CSRF) হল ওয়েব অ্যাপ্লিকেশনে বেশ সাধারণ এবং গুরুতর সিকিউরিটি ভলনারবিলিটি। এই ধরনের আক্রমণগুলি ব্যবহারকারীর ডেটা চুরি বা অ্যাপ্লিকেশনের নিরাপত্তা হুমকির কারণ হতে পারে। Next.js-এ, কিছু নিরাপত্তা ফিচার এবং সেরা প্র্যাকটিস ব্যবহার করে আপনি এই ধরনের আক্রমণগুলি থেকে সুরক্ষা নিশ্চিত করতে পারেন।
১. Cross-Site Scripting (XSS) কী?
XSS হল একটি আক্রমণ যেখানে আক্রমণকারী ক্ষতিকর স্ক্রিপ্ট (যেমন JavaScript) একটি ওয়েব পেজে ইঞ্জেক্ট করে, যা অন্যান্য ব্যবহারকারীদের ব্রাউজারে রান হয়। এই আক্রমণের মাধ্যমে আক্রমণকারী ব্যবহারকারীর সেশন কুকি, কুকি বা অন্যান্য সেনসিটিভ ডেটা চুরি করতে পারে।
XSS আক্রমণ প্রতিরোধ করার জন্য কিছু পদ্ধতি:
এস্কেপিং বা স্যানিটাইজেশন: ব্যবহারকারীর ইনপুট এবং ডেটা যেমন HTML বা JavaScript কোডের অংশ হতে পারে, সেগুলো স্যানিটাইজ বা এস্কেপ করা প্রয়োজন।
Next.js এর React ডিফল্টভাবে JSX (HTML-এ কোড এম্বেড করা) ব্যবহার করার কারণে এটি স্বয়ংক্রিয়ভাবে XSS আক্রমণ থেকে সুরক্ষা প্রদান করে, কারণ React উপাদানগুলিতে সরাসরি innerHTML ব্যবহার করার অনুমতি দেয় না।
উদাহরণ:
// Secure rendering using React's default escape mechanism
const UserProfile = ({ userData }) => {
return <div>{userData.name}</div> // React automatically escapes user input
}
এখানে, userData.name যদি কোনো ক্ষতিকর স্ক্রিপ্ট থাকে, React এটি সঠিকভাবে এস্কেপ করবে এবং স্ক্রিপ্টটি রান হতে দিবে না।
- Content Security Policy (CSP): CSP একটি নিরাপত্তা ফিচার যা ব্রাউজারকে নির্দেশনা দেয় কী ধরনের স্ক্রিপ্ট বা কনটেন্ট লোড করা যাবে। Next.js-এ আপনি CSP হেডার কনফিগার করে XSS আক্রমণ থেকে সুরক্ষা বৃদ্ধি করতে পারেন।
উদাহরণ:
// next.config.js
module.exports = {
async headers() {
return [
{
source: '/:path*',
headers: [
{
key: 'Content-Security-Policy',
value: "default-src 'self'; script-src 'self'; object-src 'none';"
}
]
}
]
}
}
এখানে, শুধুমাত্র নিজস্ব ডোমেইন থেকে স্ক্রিপ্ট লোড করতে অনুমতি দেয়া হচ্ছে, ফলে বাইরের স্ক্রিপ্ট লোড হতে পারবে না।
২. Cross-Site Request Forgery (CSRF) কী?
CSRF আক্রমণে, আক্রমণকারী একজন ব্যবহারকারীর নাম ব্যবহার করে একটি অনধিকারিত রিকোয়েস্ট পাঠায়। এটি সাধারণত তখন ঘটে যখন ব্যবহারকারী ইতিমধ্যে কোনো ওয়েবসাইটে লগইন থাকে এবং আক্রমণকারী একটি ম্যালিশিয়াস রিকোয়েস্ট পাঠায়। আক্রমণকারীর উদ্দেশ্য হল, সেই রিকোয়েস্টের মাধ্যমে ব্যবহারকারীর অথরাইজড অ্যাকশনগুলো চালানো।
CSRF আক্রমণ প্রতিরোধের পদ্ধতি:
- CSRF টোকেন: একটি CSRF টোকেন হল একটি র্যান্ডম স্ট্রিং যা সার্ভার দ্বারা প্রতি রিকোয়েস্টে পাঠানো হয়। ব্যবহারকারী যেকোনো রিকোয়েস্ট পাঠানোর আগে এই টোকেনের সঠিকতা যাচাই করতে হবে।
Next.js এ, CSRF token সুরক্ষিতভাবে ব্যবহার করতে হলে আপনি একটি CSRF লাইব্রেরি ব্যবহার করতে পারেন (যেমন csrf লাইব্রেরি) অথবা নিজস্ব টোকেন সিস্টেম তৈরি করতে পারেন।
উদাহরণ:
// pages/api/submit.js
import csrf from 'csrf'
const csrfProtection = csrf({ cookie: true })
export default async function handler(req, res) {
if (req.method === 'POST') {
const token = req.body.csrfToken
if (!csrfProtection.verify(req.cookies.csrfToken, token)) {
return res.status(403).json({ message: 'CSRF token is invalid' })
}
// Process the form submission
res.status(200).json({ message: 'Form submitted successfully' })
} else {
res.status(405).json({ message: 'Method Not Allowed' })
}
}
এখানে, CSRF token চেক করা হচ্ছে এবং নিশ্চিত করা হচ্ছে যে সার্ভারকে পাঠানো টোকেনটি বৈধ। এভাবে, CSRF আক্রমণ প্রতিরোধ করা যাবে।
- SameSite Cookies: SameSite কুকি অ্যাট্রিবিউট সেট করলে, আপনার কুকি শুধুমাত্র একই সাইটে থাকা অবস্থায় পাঠানো হবে। এটা CSRF আক্রমণকে প্রতিরোধ করতে সাহায্য করে।
উদাহরণ:
// next.config.js
module.exports = {
async cookies() {
return [
{
key: 'csrfToken',
value: 'your_csrf_token',
options: {
sameSite: 'Strict' // This will prevent the cookie from being sent cross-origin
}
}
]
}
}
এখানে, SameSite: 'Strict' ব্যবহার করা হয়েছে, যাতে কুকি শুধু একই সাইটের রিকোয়েস্টে পাঠানো হয়।
৩. Next.js-এ XSS এবং CSRF থেকে সুরক্ষা সংক্রান্ত সেরা প্র্যাকটিস
- XSS প্রতিরোধ:
- React-এর default escaping ব্যবহার করুন।
- CSP (Content Security Policy) কনফিগার করুন।
- সরাসরি
innerHTMLব্যবহার করবেন না, পরিবর্তে React-এর JSX ব্যবহার করুন।
- CSRF প্রতিরোধ:
- CSRF tokens ব্যবহার করুন।
- SameSite Cookies ব্যবহার করুন যাতে কুকি শুধুমাত্র সঠিক ডোমেইনে পাঠানো হয়।
- নিরাপদ এবং উন্নত HTTP headers কনফিগার করুন।
সারাংশ
Next.js-এ XSS এবং CSRF আক্রমণ প্রতিরোধের জন্য কিছু সহজ এবং কার্যকর সুরক্ষা পদ্ধতি রয়েছে। XSS থেকে সুরক্ষিত থাকার জন্য React স্বয়ংক্রিয়ভাবে ইউজার ইনপুট স্যানিটাইজ করে, CSP হেডার ব্যবহার করা যায়। CSRF প্রতিরোধের জন্য CSRF টোকেন এবং SameSite কুকি ব্যবহার করা যেতে পারে। সঠিক সিকিউরিটি প্র্যাকটিস মেনে চললে, আপনার Next.js অ্যাপ্লিকেশন নিরাপদ এবং আক্রমণ থেকে সুরক্ষিত থাকবে।
Read more