1. Home
  2. Web Application Security
  3. 2.Cross-Site Scripting (X...
  4. সুরক্ষিত ও অসুরক্ষিত অ্যাপ্লিকেশনের উদাহরণ

সুরক্ষিত ও অসুরক্ষিত অ্যাপ্লিকেশনের উদাহরণ

অসুরক্ষিত Node.js Express অ্যাপ্লিকেশনের উদাহরণ

// app.js
const express = require('express');
const app = express();
const port = 3000;

app.use(express.urlencoded({ extended: true }));

// হোম পেজে একটি ফর্ম প্রদর্শন
app.get('/', (req, res) => {
    res.send(`
        <h1>স্বাগতম!</h1>
        <form method="POST" action="/greet">
            <label>আপনার নাম লিখুন:</label>
            <input type="text" name="name" />
            <button type="submit">জমা দিন</button>
        </form>
    `);
});

// ফর্ম সাবমিশন হ্যান্ডেল করা
app.post('/greet', (req, res) => {
    const name = req.body.name;
    res.send(`<h2>হ্যালো, ${name}!</h2>`);
});

app.listen(port, () => {
    console.log(`অ্যাপটি চলছে http://localhost:${port}`);
});

এই অ্যাপ্লিকেশনে সমস্যা কোথায়:

  • ব্যবহারকারীর ইনপুট name কোনো স্যানিটাইজেশন ছাড়াই সরাসরি HTML-এ রেন্ডার হচ্ছে।
  • আক্রমণকারী ইনপুট ফিল্ডে ম্যালিশিয়াস কোড ইনজেক্ট করতে পারে।

XSS আক্রমণের উদাহরণ:

  • আক্রমণকারী name ফিল্ডে নিচের মতো কোড ইনপুট করতে পারে:
<script>alert('আপনি হ্যাকড হয়েছেন!');</script>
  • এর ফলে, যখন পেজটি রেন্ডার হবে, এই স্ক্রিপ্টটি ব্যবহারকারীর ব্রাউজারে চলবে এবং একটি পপ-আপ মেসেজ প্রদর্শন করবে।
  • আরও খারাপ, আক্রমণকারী জটিল স্ক্রিপ্ট ব্যবহার করে ব্যবহারকারীর কুকি বা অন্যান্য তথ্য চুরি করতে পারে।

ডেমো:

  1. অ্যাপটি চালু করুন: node app.js
  2. ব্রাউজারে http://localhost:3000 ভিজিট করুন।
  3. নামের জায়গায় <script>alert('আপনি হ্যাকড হয়েছেন!');</script> ইনপুট দিন এবং সাবমিট করুন।
  4. দেখবেন যে একটি পপ-আপ মেসেজ প্রদর্শিত হচ্ছে, যা প্রমাণ করে যে স্ক্রিপ্টটি চলেছে।

কিভাবে XSS আক্রমণ প্রতিরোধ করা যায়

সমাধান: ব্যবহারকারীর ইনপুট স্যানিটাইজ করা এবং বিশেষ ক্যারেক্টারগুলো এস্কেপ করা যাতে তারা HTML বা জাভাস্ক্রিপ্ট হিসেবে ব্যাখ্যা না হয়।

নিরাপদ কোডের উদাহরণ:

// app.js
const express = require('express');
const app = express();
const port = 3000;
const escape = require('escape-html'); // ইনপুট এস্কেপ করার জন্য প্যাকেজ

app.use(express.urlencoded({ extended: true }));

// হোম পেজে একটি ফর্ম প্রদর্শন
app.get('/', (req, res) => {
    res.send(`
        <h1>স্বাগতম!</h1>
        <form method="POST" action="/greet">
            <label>আপনার নাম লিখুন:</label>
            <input type="text" name="name" />
            <button type="submit">জমা দিন</button>
        </form>
    `);
});

// ফর্ম সাবমিশন হ্যান্ডেল করা
app.post('/greet', (req, res) => {
    const name = req.body.name;
    const safeName = escape(name); // ইনপুট এস্কেপ করা
    res.send(`<h2>হ্যালো, ${safeName}!</h2>`);
});

app.listen(port, () => {
    console.log(`অ্যাপটি চলছে http://localhost:${port}`);
});

নিরাপদ কোডে কি করা হয়েছে:

  • escape-html প্যাকেজ ব্যবহার: এই প্যাকেজটি ইনপুটে থাকা বিশেষ ক্যারেক্টারগুলোকে এস্কেপ করে, যাতে তারা HTML ট্যাগ হিসেবে ব্যাখ্যা না হয়।
  • ইনপুট স্যানিটাইজেশন: escape(name) ব্যবহার করে ইনপুটকে সুরক্ষিত করা হয়েছে।

কিভাবে কাজ করে:

  1. যখন ব্যবহারকারী ইনপুটে ম্যালিশিয়াস কোড দেয়, যেমন <script>alert('আপনি হ্যাকড হয়েছেন!');</script>, তখন escape ফাংশন এটি এস্কেপ করে এমনভাবে যে এটি সাধারণ টেক্সট হিসেবে রেন্ডার হয়।
  2. ফলে, স্ক্রিপ্টটি আর এক্সিকিউট হয় না এবং XSS আক্রমণ প্রতিরোধ হয়।

ডেমো:

  1. অ্যাপটি চালু করুন: node app.js
  2. ব্রাউজারে http://localhost:3000 ভিজিট করুন।
  3. নামের জায়গায় <script>alert('আপনি হ্যাকড হয়েছেন!');</script> ইনপুট দিন এবং সাবমিট করুন।
  4. এবার দেখবেন যে স্ক্রিপ্টটি সাধারণ টেক্সট হিসেবে প্রদর্শিত হচ্ছে, কোনো পপ-আপ মেসেজ আসছে না।

XSS আক্রমণ প্রতিরোধের কিছু সাধারণ পদ্ধতি:

  • ইনপুট ভ্যালিডেশন ও স্যানিটাইজেশন: ব্যবহারকারীর ইনপুট সর্বদা যাচাই এবং স্যানিটাইজ করুন।
  • আউটপুট এস্কেপিং: আউটপুটে ইনপুট ডেটা ব্যবহারের আগে তা এস্কেপ করুন।
  • কন্টেন্ট সিকিউরিটি পলিসি (CSP) ব্যবহার: এটি নির্ধারণ করে কোন উৎস থেকে স্ক্রিপ্ট চলতে পারবে।
  • HTTP-Only কুকি ব্যবহার: যাতে জাভাস্ক্রিপ্টের মাধ্যমে কুকি অ্যাক্সেস করা না যায়।

How can we help?