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

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

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

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

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

\n\n

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

\n\n

1. गलत इनपुट प्रोसेसिंग के माध्यम से क्रॉस-साइट स्क्रिप्टिंग (XSS)

\n\n

XSS अभी भी सबसे खतरनाक कमजोरियों में से एक है। TypeScript स्वचालित रूप से आउटपुट को एस्केप नहीं करता है। यदि आप सैनिटाइज़ेशन के बिना HTML टेम्पलेट में उपयोगकर्ता डेटा डालते हैं, तो आप हमलों के लिए दरवाजा खोल देते हैं।

\n\n

असुरक्षित कोड

\n
function renderComment(comment: string): string {\n  return `<div>${comment}</div>`;\n}\n\n// हमलावर प्रेषित करता है: <script>alert('XSS')</script>\n
\n\n

सही किया गया कोड

\n
import { escape } from 'lodash';\n\nfunction renderComment(comment: string): string {\n  const safeComment = escape(comment);\n  return `<div>${safeComment}</div>`;\n}\n
\n\n

सिफारिश: एस्केपिंग के लिए हमेशा लाइब्रेरी (DOMPurify, lodash.escape) या ऑटो-एस्केपिंग वाले टेम्पलेट इंजन (React JSX, Handlebars) का उपयोग करें।

\n\n

2. स्ट्रिंग टेम्पलेट्स के माध्यम से SQL-इंजेक्शन

\n\n

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

\n\n

असुरक्षित कोड

\n
async function getUser(id: string): Promise<User | null> {\n  const query = `SELECT * FROM users WHERE id = '${id}'`;\n  const result = await db.query(query);\n  return result.rows[0];\n}\n
\n\n

सही किया गया कोड

\n
async function getUser(id: string): Promise<User | null> {\n  const query = 'SELECT * FROM users WHERE id = $1';\n  const result = await db.query(query, [id]);\n  return result.rows[0];\n}\n
\n\n

सिफारिश: पैरामीटराइज़्ड क्वेरी या ORM (TypeORM, Prisma, Sequelize) का उपयोग करें। SQL के लिए कभी भी स्ट्रिंग्स को कॉन्केटनेट न करें।

\n\n

3. असुरक्षित पासवर्ड तुलना

\n\n

पासवर्ड तुलना के कार्यान्वयन में त्रुटि टाइमिंग हमलों का कारण बन सकती है। TypeScript डेवलपर्स अक्सर हैश की तुलना करने के लिए === ऑपरेटर का उपयोग करते हैं, जो असुरक्षित है।

\n\n

असुरक्षित कोड

\n
async function verifyPassword(\n  inputPassword: string, \n  storedHash: string\n): Promise<boolean> {\n  const inputHash = await bcrypt.hash(inputPassword, 10);\n  return inputHash === storedHash; // कमजोरी: timing attack\n}\n
\n\n

सही किया गया कोड

\n
import bcrypt from 'bcrypt';\n\nasync function verifyPassword(\n  inputPassword: string, \n  storedHash: string\n): Promise<boolean> {\n  return bcrypt.compare(inputPassword, storedHash);\n}\n
\n\n

सिफारिश: हैशिंग लाइब्रेरी (bcrypt.compare, argon2.verify) से अंतर्निहित तुलना फ़ंक्शन का उपयोग करें। वे टाइमिंग हमलों से सुरक्षित हैं।

\n\n

4. रिकर्सिव ऑब्जेक्ट मर्जिंग के माध्यम से प्रोटोटाइप प्रदूषण

\n\n

TypeScript अनुप्रयोग अक्सर डीप कॉपी या ऑब्जेक्ट मर्जिंग फ़ंक्शन का उपयोग करते हैं। यदि कुंजियों को नियंत्रित नहीं किया जाता है, तो हमलावर Object.prototype को दूषित कर सकता है।

\n\n

असुरक्षित कोड

\n
function merge(target: Record<string, any>, source: Record<string, any>) {\n  for (const key in source) {\n    if (typeof source[key] === 'object') {\n      target[key] = merge(target[key] || {}, source[key]);\n    } else {\n      target[key] = source[key];\n    }\n  }\n  return target;\n}\n\n// हमलावर प्रेषित करता है                

ब्लॉग

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