1. Home
  2. Web Application Security
  3. 4.SQL Injection প্রতিরোধের জন্য ম্যানুয়াল SQL কোয়েরি এবং TypeORM ব্যবহার

4.SQL Injection প্রতিরোধের জন্য ম্যানুয়াল SQL কোয়েরি এবং TypeORM ব্যবহার

SQL Injection প্রতিরোধের জন্য ম্যানুয়াল SQL কোয়েরি এবং TypeORM ব্যবহার করার মধ্যে পার্থক্য তুলে ধরতে আমি দুটি উদাহরণ দেব: একটিতে SQL Injection আক্রমণের সুযোগ রয়েছে এবং অন্যটিতে TypeORM এর সেফ SQL কোয়েরি ব্যবহার করে কিভাবে আক্রমণ থেকে নিরাপদ থাকা যায়।

১. ম্যানুয়াল SQL কোয়েরি এবং SQL Injection

উদাহরণ: ম্যানুয়াল SQL কোয়েরি

const mysql = require('mysql');
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'testdb'
});

const username = req.body.username;
const password = req.body.password;

// SQL কোয়েরি তৈরি
const sql = `SELECT * FROM users WHERE username = '${username}' AND password = '${password}'`;

connection.query(sql, (error, results) => {
    if (error) {
        return res.status(500).json({ message: 'Database query failed', error });
    }
    res.status(200).json({ results });
});

ব্যাখ্যা:

  • SQL Injection: যদি ব্যবহারকারী ইনপুটে কিছু বিশেষ ক্যারেক্টার যেমন ' OR '1'='1 প্রদান করে, তাহলে কোয়েরি পরিবর্তিত হবে এবং আক্রমণকারী সফলভাবে সমস্ত ইউজারদের তথ্য দেখতে সক্ষম হতে পারে।
    • উদাহরণ ইনপুট: username = 'admin' AND 1=1 -- এবং password = ''

২. TypeORM দিয়ে সেফ SQL কোয়েরি

উদাহরণ: TypeORM এর সেফ কোয়েরি

const { getRepository } = require('typeorm');
const User = require('./User');

const getUser = async (req, res) => {
    try {
        const { username, password } = req.body;

        // TypeORM দ্বারা সেফ কোয়েরি
        const userRepository = getRepository(User);
        const user = await userRepository.findOne({
            where: {
                username: username,
                password: password
            }
        });

        if (!user) {
            return res.status(404).json({ message: 'User not found' });
        }

        res.status(200).json({ user });
    } catch (error) {
        res.status(500).json({ message: 'Database query failed', error });
    }
};

ব্যাখ্যা:

  • Parameterized Queries: TypeORM স্বয়ংক্রিয়ভাবে parameterized queries ব্যবহার করে, যা SQL Injection আক্রমণের বিপরীতে সুরক্ষা নিশ্চিত করে। TypeORM এ ইনপুট প্যারামিটার সঠিকভাবে স্যানিটাইজ করা হয় এবং কোয়েরি তৈরির সময় SQL Injection থেকে বাঁচানো যায়।
  • Query Builder: TypeORM এর Query Builder ব্যবহার করে ডায়নামিক কোয়েরি তৈরি করতে পারেন যা SQL Injection থেকে সুরক্ষা নিশ্চিত করে।

SQL Injection আক্রমণ:

ম্যানুয়াল কোয়েরি আক্রমণ উদাহরণ:

  • ব্যবহারকারী ইনপুট: username = 'admin' AND 1=1 -- এবং password = ''
  • কোয়েরি পরিবর্তিত হয়: SELECT * FROM users WHERE username = 'admin' AND 1=1 --' AND password = ''
  • এই কোয়েরি সব রেকর্ডকে ফিরিয়ে দেবে কারণ 1=1 শর্ত সবসময় সত্য।

TypeORM সেফ কোয়েরি:

  • TypeORM স্বয়ংক্রিয়ভাবে প্যারামিটারাইজড কোয়েরি তৈরি করে। ফলে, ইনপুট ইনজেকশন শঙ্কা কমে যায়।
  • ব্যবহারকারী ইনপুট: username = 'admin' AND 1=1 -- এবং password = ''
  • কোয়েরি নিরাপদভাবে username এবং password এর সাথে তুলনা করবে এবং ইনজেকশন হতে পারবে না।

সংক্ষেপে:

  • ম্যানুয়াল কোয়েরি: ইনপুট স্যানিটাইজেশন ছাড়া সরাসরি SQL কোয়েরি তৈরি করা SQL Injection আক্রমণের সুযোগ সৃষ্টি করে।
  • TypeORM: প্যারামিটারাইজড কোয়েরি ব্যবহার করে SQL Injection থেকে সুরক্ষা নিশ্চিত করে। TypeORM এর API ব্যবহার করে কোয়েরি তৈরির মাধ্যমে আপনার অ্যাপ্লিকেশনকে SQL Injection থেকে রক্ষা করা সহজ হয়।

How can we help?