ession Fixation হলো একটি আক্রমণ যেখানে একজন হ্যাকার একটি ব্যবহারকারীকে একটি পূর্বনির্ধারিত সেশন আইডি (session ID) ব্যবহার করতে প্ররোচিত করে, যার মাধ্যমে হ্যাকার ঐ ব্যবহারকারীর সেশনে প্রবেশাধিকার অর্জন করতে পারে।
প্রাকটিক্যাল উদাহরণ
আমরা দুইটি ডেমো ওয়েবসাইট ব্যবহার করব:
- example.com (অসুরক্ষিত ওয়েবসাইট)
- hackersite.com (হ্যাকার এর ওয়েবসাইট)
1. অসুরক্ষিত Node.js অ্যাপ্লিকেশন (example.com)
app.js
const express = require('express');
const session = require('express-session');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Set up session middleware
app.use(session({
secret: 'secret_key',
resave: false,
saveUninitialized: true
}));
// Login route
app.post('/login', (req, res) => {
const { username } = req.body;
// Set a session variable on successful login
req.session.user = username;
res.send('Logged in');
});
// Protected route
app.get('/profile', (req, res) => {
if (req.session.user) {
res.send(`Hello ${req.session.user}`);
} else {
res.status(401).send('Not authenticated');
}
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
ব্যাখ্যা:
- এখানে,
/loginরুটে ব্যবহারকারী লগইন করলে একটি সেশন তৈরি হয়। হ্যাকার এই সেশন আইডি ব্যবহার করে/profileরুটে প্রবেশ করতে পারে যদি ব্যবহারকারী সেই সেশন আইডি ব্যবহার করে লগইন করে।
2. হ্যাকার এর ওয়েবসাইট (hackersite.com)
malicious.js
<!DOCTYPE html>
<html>
<head>
<title>Malicious Site</title>
</head>
<body>
<script>
// When user visits hackersite.com, this script sets the session ID
fetch('http://example.com/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cookie': 'connect.sid=malicious_session_id' // Example of session fixation
},
body: JSON.stringify({ username: 'attacker' })
});
</script>
</body>
</html>
ব্যাখ্যা:
- হ্যাকার ব্যবহারকারীকে
hackersite.comএ ক্লিক করাতে পারে, যা ব্যবহারকারীর ব্রাউজারে একটি সেশন আইডি সেট করে। ব্যবহারকারীexample.comএ লগইন করলে, হ্যাকার এই সেশন আইডি ব্যবহার করে তাদের অ্যাকাউন্টে প্রবেশ করতে পারে।
Session Fixation থেকে সুরক্ষা
সুরক্ষিত Node.js অ্যাপ্লিকেশন
app.js
const express = require('express');
const session = require('express-session');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Set up session middleware
app.use(session({
secret: 'secret_key',
resave: false,
saveUninitialized: true,
cookie: { secure: true, httpOnly: true } // Secure and HTTP-Only cookies
}));
// Middleware to regenerate session on login
app.use((req, res, next) => {
if (req.session.user && req.path === '/login') {
req.session.regenerate((err) => {
if (err) {
return next(err);
}
next();
});
} else {
next();
}
});
// Login route
app.post('/login', (req, res) => {
const { username } = req.body;
// Regenerate session ID after login
req.session.regenerate((err) => {
if (err) {
return res.status(500).send('Error regenerating session');
}
req.session.user = username;
res.send('Logged in');
});
});
// Protected route
app.get('/profile', (req, res) => {
if (req.session.user) {
res.send(`Hello ${req.session.user}`);
} else {
res.status(401).send('Not authenticated');
}
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
ব্যাখ্যা:
- Session Regeneration: লগইনের পর সেশন আইডি পরিবর্তন করা হয়, যা সেশন ফিক্সেশন আক্রমণ প্রতিরোধ করে।
- Secure and HTTP-Only Cookies: সেশন কুকি গুলি
secureএবংhttpOnlyফ্ল্যাগ দিয়ে সুরক্ষিত থাকে, যাতে ব্রাউজার সাইড স্ক্রিপ্ট সেশন আইডি অ্যাক্সেস করতে না পারে।
অন্যান্য টিপস:
- Always Use Secure Cookies: সেশন কুকিগুলি HTTPS কনেকশন দ্বারা ট্রান্সমিট করুন।
- Validate and Sanitize Input: ইউজার ইনপুট নিশ্চিত করুন এবং সঠিকভাবে স্যানিটাইজ করুন।
এইভাবে, সেশন ফিক্সেশন আক্রমণ প্রতিরোধ করা সম্ভব এবং আপনার অ্যাপ্লিকেশন সুরক্ষিত রাখা যায়।