TypeScript अनुप्रयोगों की सुरक्षा: शुरुआती लोगों के लिए शीर्ष 10 कमजोरियाँ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: पहले दिन से TypeScript अनुप्रयोगों की सुरक्षा क्यों महत्वपूर्ण है

TypeScript — JavaScript के ऊपर एक अतिरिक्त परत है, जो स्थिर टाइपिंग जोड़ता है। कई नौसिखिए डेवलपर्स गलती से मानते हैं कि टाइपिंग स्वचालित रूप से सभी सुरक्षा समस्याओं को हल कर देती है। वास्तव में, TypeScript सामान्य JavaScript में कंपाइल होता है, और JS में निहित सभी कमजोरियाँ प्रासंगिक बनी रहती हैं। इस लेख में, हम शीर्ष 10 कमजोरियों पर चर्चा करेंगे जिनका सामना शुरुआती लोग करते हैं, और दिखाएंगे कि उनसे कैसे बचा जाए।



1. XSS (क्रॉस-साइट स्क्रिप्टिंग)

XSS — सबसे आम हमलों में से एक है। हमलावर पेज पर एक दुर्भावनापूर्ण स्क्रिप्ट डालता है, जो उपयोगकर्ता के ब्राउज़र में निष्पादित होती है।

कमजोर कोड का उदाहरण:

function renderUserInput(input: string): string {    return `<div>${input}</div>`;}

// हमलावर प्रेषित करता है: <script>alert('XSS')</script>

कैसे ठीक करें:

हमेशा उपयोगकर्ता इनपुट को एस्केप करें। DOMPurify जैसी लाइब्रेरी या बिल्ट-इन एस्केपिंग विधियों का उपयोग करें:

import DOMPurify from 'dompurify';

function safeRender(input: string): string { const clean = DOMPurify.sanitize(input); return `<div>${clean}</div>`;}


2. SQL-इंजेक्शन

यदि आप उपयोगकर्ता इनपुट के साथ स्ट्रिंग्स को जोड़कर SQL क्वेरी बनाते हैं, तो आप SQL-इंजेक्शन के लिए दरवाजा खोल रहे हैं।

कमजोर कोड:

function getUser(username: string): Promise<User> {    const query = `SELECT * FROM users WHERE username = '${username}'`;    return db.execute(query);}

सुरक्षित विकल्प:

function getUserSafe(username: string): Promise<User> {    const query = 'SELECT * FROM users WHERE username = $1';    return db.execute(query, [username]); // पैरामीटरीकृत क्वेरी}


3. पासवर्ड का असुरक्षित भंडारण

पासवर्ड को कभी भी सादे टेक्स्ट में न रखें। हैशिंग के लिए bcrypt या argon2 का उपयोग करें।

import bcrypt from 'bcrypt';

async function hashPassword(password: string): Promise<string> { const saltRounds = 12; return bcrypt.hash(password, saltRounds);}

async function verifyPassword(password: string, hash: string): Promise<boolean> { return bcrypt.compare(password, hash);}


4. असुरक्षित प्रत्यक्ष ऑब्जेक्ट संदर्भ (IDOR)

जब उपयोगकर्ता URL में ID बदलकर दूसरों के डेटा तक पहुँच सकता है।

उदाहरण:

// कमजोर: कोई भी उपयोगकर्ता कोई भी ऑर्डर प्राप्त कर सकता हैapp.get('/api/order/:id', (req, res) => {    const order = getOrderById(req.params.id);    res.json(order);});

// सुरक्षित: स्वामित्व की जाँच करेंapp.get('/api/order/:id', (req, res) => { const order = getOrderById(req.params.id); if (order.userId !== req.user.id) { return res.status(403).json({ error: 'Forbidden' }); } res.json(order);});


5. पुरानी निर्भरताओं का उपयोग

TypeScript प्रोजेक्ट अक्सर npm पैकेज का उपयोग करते हैं। पुराने संस्करणों में ज्ञात कमजोरियाँ हो सकती हैं।

  • नियमित रूप से npm audit चलाएँ
  • पैकेज अपडेट करने के लिए npm update का उपयोग करें
  • CI/CD में स्वचालित जाँच सेट करें


6. इनपुट डेटा का अपर्याप्त सत्यापन

TypeScript प्रकार रनटाइम पर जाँचे नहीं जाते। सर्वर पर हमेशा डेटा को मान्य करें।

interface UserInput {    email: string;    age: number;}

// अपर्याप्त: TypeScript प्रकार रनटाइम पर सुरक्षा नहीं देतेfunction processUser(input: UserInput) { // ...}

// सही: सत्यापन के लिए Zod या Joi का उपयोग करेंimport { z } from 'zod';

const UserSchema = z.object({ email: z.string().email(), age: z.number().min(18).max(120)});

function processUserSafe(input: unknown) { const validate

ब्लॉग

पुस्तक अनुशंसाएँ