Node.js ડેવલપર્સ પ્રોડક્શનમાં શિપ કરતા સુરક્ષા બગ્સ
મેં ગયા વર્ષે એક સ્ટાર્ટઅપ માટે કોડ રિવ્યુ કર્યો હતો. કોડ ચોખ્ખો દેખાતો હતો. ટેસ્ટ પાસ થયા હતા.
પછી મેં આ લાઇન જોઈ:
const query = SELECT * FROM users WHERE email = '${req.body.email}'``
આ એક SQL injection બગ છે. આ સ્ટાર્ટઅપ આને 8 મહિના સુધી પ્રોડક્શનમાં ચલાવતું રહ્યું. કોઈ ડેવલપર કે CTO તેને પકડી શક્યા નહીં.
આ બગ્સ અદ્રશ્ય હોય છે કારણ કે કોડ કામ કરે છે. જ્યાં સુધી કોઈ યુઝર ઇનપુટ ફીલ્ડમાં કોઈ હાનિકારક (malicious) કમાન્ડ ટાઇપ ન કરે ત્યાં સુધી તે બરાબર કામ કરતું રહે છે.
આ 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 માં સિક્રેટ્સ લીક કરવા ડેવલપર્સ ઘણીવાર રિપોઝીટરીઝમાં .env ફાઇલો કમિટ કરે છે. આનાથી તમારા ડેટાબેઝ URL અને API કી એક્સપોઝ થાય છે. હંમેશા તમારી .gitignore ફાઇલમાં .env ઉમેરો.
jwt.verify ને બદલે jwt.decode નો ઉપયોગ કરવો jwt.decode ફક્ત ટોકન વાંચે છે. તે ટોકન સાચું છે કે નહીં તે તપાસતું નથી. કોઈપણ વ્યક્તિ ડિકોડ કરેલા ટોકનને બનાવ (forge) કરી શકે છે.
- ખરાબ:
const user = jwt.decode(token) - સારું: હંમેશા સિગ્નેચર વેરિફાય કરો.
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 }) - સારું: એરરને આંતરિક રીતે લોગ કરો. યુઝરને એક સામાન્ય (generic) મેસેજ મોકલો.
res.status(500).json({ error: 'Something went wrong' })
કોઈપણ એન્ડપોઇન્ટ શિપ કરતા પહેલા, એક પ્રશ્ન પૂછો: જો યુઝર અણધાર્યો (unexpected) ડેટા મોકલે તો શું થશે?
સુરક્ષા બગ્સ ભાગ્યે જ જટિલ હોય છે. તેઓ ત્યારે થાય છે જ્યારે તમે ખરાબ ઈરાદાવાળા લોકો (bad actors) વિશે વિચારવાનું ભૂલી જાઓ છો.
તમે પ્રોડક્શનમાં કયો સુરક્ષા બગ શોધી કાઢ્યો છે?
સ્ત્રોત: https://dev.to/manolito99/the-security-bug-every-nodejs-developer-ships-to-production-49e6
