وہ سیکیورٹی بگ جو Node.js ڈویلپرز پروڈکشن میں بھیج دیتے ہیں
میں نے گزشتہ سال ایک اسٹارٹ اپ کے کوڈ کا جائزہ لیا۔ کوڈ صاف ستھرا لگ رہا تھا۔ ٹیسٹ پاس ہو گئے تھے۔
پھر میں نے یہ لائن دیکھی:
const query = SELECT * FROM users WHERE email = '${req.body.email}'``
یہ ایک SQL injection بگ ہے۔ اسٹارٹ اپ نے اسے 8 ماہ تک پروڈکشن میں چلایا۔ کسی بھی ڈویلپر یا CTO نے اسے نہیں پکڑا۔
یہ بگ نظر نہیں آتے کیونکہ کوڈ کام کرتا ہے۔ یہ تب تک کام کرتا ہے جب تک کوئی صارف ان پٹ فیلڈ میں کوئی نقصان دہ کمانڈ ٹائپ نہیں کرتا۔
ان 5 عام غلطیوں سے بچیں:
- یوزر ان پٹ کے ساتھ Raw SQL کوئریز کے لیے template literals استعمال نہ کریں۔ یہ حملہ آوروں کو آپ کے ڈیٹا بیس تک رسائی فراہم کرتا ہے۔
- برا:
const query =SELECT * FROM users WHERE email = '${email}'`` - بہتر: parameterized queries استعمال کریں۔
const query = 'SELECT * FROM users WHERE email = $1'db.query(query, [email])
Git میں راز (secrets) کا افشا ہونا ڈویلپرز اکثر ریپوزٹریز میں .env فائلیں کمٹ کر دیتے ہیں۔ اس سے آپ کے ڈیٹا بیس URLs اور API keys ظاہر ہو جاتے ہیں۔ ہمیشہ اپنی .gitignore فائل میں .env شامل کریں۔
jwt.verify کے بجائے jwt.decode کا استعمال jwt.decode صرف ٹوکن کو پڑھتا ہے۔ یہ چیک نہیں کرتا کہ ٹوکن اصلی ہے یا نہیں۔ کوئی بھی جعلی (forge) ڈیکوڈڈ ٹوکن بنا سکتا ہے۔
- برا:
const user = jwt.decode(token) - بہتر: ہمیشہ سگنیچر (signature) کی تصدیق کریں۔
const user = jwt.verify(token, process.env.JWT_SECRET)
- auth endpoints پر rate limiting کا نہ ہونا rate limiting کے بغیر، حملہ آور brute force کے ذریعے لاکھوں پاس ورڈز آزما سکتے ہیں۔ لاگ ان کی کوششوں کو محدود کرنے کے لیے ایک لائبریری استعمال کریں۔
- بہتر: ہر 15 منٹ میں 10 کوششوں کی حد مقرر کریں۔
- تفصیلی (Verbose) ایرر میسجز کلائنٹ کو خام (raw) ایرر میسجز بھیجنے سے حملہ آوروں کو آپ کے سسٹم کا نقشہ سمجھنے میں مدد ملتی ہے۔ وہ آپ کے ٹیبل کے نام اور ڈیٹا بیس کی اقسام دیکھ سکتے ہیں۔
- برا:
res.status(500).json({ error: error.message }) - بہتر: ایرر کو اندرونی طور پر لاگ (log) کریں۔ صارف کو ایک عام (generic) پیغام بھیجیں۔
res.status(500).json({ error: 'Something went wrong' })
کسی بھی اینڈ پوائنٹ کو شپ کرنے سے پہلے، ایک سوال پوچھیں: اگر کوئی صارف غیر متوقع ڈیٹا بھیجے تو کیا ہوگا؟
سیکیورٹی بگ شاذ و نادر ہی پیچیدہ ہوتے ہیں۔ یہ اس وقت ہوتے ہیں جب آپ برے عناصر (bad actors) کے بارے میں سوچنا بھول جاتے ہیں۔
آپ نے پروڈکشن میں کون سا سیکیورٹی بگ پایا ہے؟
ماخذ: https://dev.to/manolito99/the-security-bug-every-nodejs-developer-ships-to-production-49e6
