ਉਹ ਸੁਰੱਖਿਆ ਬੱਗ (Security Bugs) ਜੋ Node.js ਡਿਵੈਲਪਰ ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ ਭੇਜ ਦਿੰਦੇ ਹਨ

ਮੈਂ ਪਿਛਲੇ ਸਾਲ ਇੱਕ ਸਟਾਰਟਅੱਪ ਲਈ ਕੋਡ ਦੀ ਸਮੀਖਿਆ ਕੀਤੀ ਸੀ। ਕੋਡ ਸਾਫ਼ ਦਿਖਾਈ ਦੇ ਰਿਹਾ ਸੀ। ਟੈਸਟ ਪਾਸ ਹੋ ਗਏ ਸਨ।

ਫਿਰ ਮੈਂ ਇਹ ਲਾਈਨ ਦੇਖੀ: const query = SELECT * FROM users WHERE email = '${req.body.email}'``

ਇਹ ਇੱਕ SQL injection ਬੱਗ ਹੈ। ਸਟਾਰਟਅੱਪ ਨੇ ਇਸਨੂੰ 8 ਮਹੀਨਿਆਂ ਤੱਕ ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ ਚਲਾਇਆ। ਕਿਸੇ ਵੀ ਡਿਵੈਲਪਰ ਜਾਂ CTO ਨੇ ਇਸਨੂੰ ਨਹੀਂ ਫੜਿਆ।

ਇਹ ਬੱਗ ਅਦਿੱਖ ਹੁੰਦੇ ਹਨ ਕਿਉਂਕਿ ਕੋਡ ਕੰਮ ਕਰਦਾ ਹੈ। ਇਹ ਉਦੋਂ ਤੱਕ ਕੰਮ ਕਰਦਾ ਹੈ ਜਦੋਂ ਤੱਕ ਕੋਈ ਯੂਜ਼ਰ ਇਨਪੁਟ ਫੀਲਡ ਵਿੱਚ ਕੋਈ ਹਾਨੀਕਾਰਕ (malicious) ਕਮਾਂਡ ਨਹੀਂ ਟਾਈਪ ਕਰਦਾ।

ਇਹਨਾਂ 5 ਆਮ ਗਲਤੀਆਂ ਨੂੰ ਰੋਕੋ:

  1. ਯੂਜ਼ਰ ਇਨਪੁਟ ਦੇ ਨਾਲ Raw SQL ਕੁਐਰੀਆਂ (queries) ਲਈ template literals ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ। ਇਹ ਹਮਲਾਵਰਾਂ ਨੂੰ ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।
  • ਮਾੜਾ: const query = SELECT * FROM users WHERE email = '${email}'``
  • ਚੰਗਾ: Parameterized queries ਦੀ ਵਰਤੋਂ ਕਰੋ। const query = 'SELECT * FROM users WHERE email = $1' db.query(query, [email])
  1. Git ਵਿੱਚ secrets ਲੀਕ ਕਰਨਾ ਡਿਵੈਲਪਰ ਅਕਸਰ ਰਿਪੋਜ਼ਟਰੀਆਂ ਵਿੱਚ .env ਫਾਈਲਾਂ ਕਮਿਟ ਕਰ ਦਿੰਦੇ ਹਨ। ਇਹ ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ URL ਅਤੇ API keys ਨੂੰ ਉਜਾਗਰ ਕਰਦਾ ਹੈ। ਹਮੇਸ਼ਾ ਆਪਣੀ .gitignore ਫਾਈਲ ਵਿੱਚ .env ਨੂੰ ਸ਼ਾਮਲ ਕਰੋ।

  2. jwt.verify ਦੀ ਬਜਾਏ jwt.decode ਦੀ ਵਰਤੋਂ ਕਰਨਾ jwt.decode ਸਿਰਫ਼ ਟੋਕਨ ਨੂੰ ਪੜ੍ਹਦਾ ਹੈ। ਇਹ ਚੈੱਕ ਨਹੀਂ ਕਰਦਾ ਕਿ ਟੋਕਨ ਅਸਲੀ ਹੈ ਜਾਂ ਨਹੀਂ। ਕੋਈ ਵੀ ਡੀਕੋਡ ਕੀਤੇ ਟੋਕਨ ਦੀ ਜਾਲਸਾਜ਼ੀ ਕਰ ਸਕਦਾ ਹੈ।

  • ਮਾੜਾ: const user = jwt.decode(token)
  • ਚੰਗਾ: ਹਮੇਸ਼ਾ signature ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ। const user = jwt.verify(token, process.env.JWT_SECRET)
  1. Auth endpoints 'ਤੇ rate limiting ਦੀ ਘਾਟ Rate limiting ਤੋਂ ਬਿਨਾਂ, ਹਮਲਾਵਰ brute force ਰਾਹੀਂ ਲੱਖਾਂ ਪਾਸਵਰਡ ਅਜ਼ਮਾ ਸਕਦੇ ਹਨ। ਲੌਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਨੂੰ ਸੀਮਤ ਕਰਨ ਲਈ ਇੱਕ ਲਾਇਬ੍ਰੇਰੀ ਦੀ ਵਰਤੋਂ ਕਰੋ।
  • ਚੰਗਾ: ਹਰ 15 ਮਿੰਟਾਂ ਵਿੱਚ 10 ਕੋਸ਼ਿਸ਼ਾਂ ਦੀ ਸੀਮਾ ਜੋੜੋ।
  1. ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਵਾਲੇ (Verbose) error messages ਕਲਾਇੰਟ ਨੂੰ raw error messages ਭੇਜਣ ਨਾਲ ਹਮਲਾਵਰਾਂ ਨੂੰ ਤੁਹਾਡੇ ਸਿਸਟਮ ਨੂੰ ਸਮਝਣ ਵਿੱਚ ਮਦਦ ਮਿਲਦੀ ਹੈ। ਉਹ ਤੁਹਾਡੇ ਟੇਬਲ ਦੇ ਨਾਮ ਅਤੇ ਡੇਟਾਬੇਸ ਦੀਆਂ ਕਿਸਮਾਂ ਦੇਖ ਸਕਦੇ ਹਨ।
  • ਮਾੜਾ: res.status(500).json({ error: error.message })
  • ਚੰਗਾ: ਗਲਤੀ (error) ਨੂੰ ਅੰਦਰੂਨੀ ਤੌਰ 'ਤੇ log ਕਰੋ। ਯੂਜ਼ਰ ਨੂੰ ਇੱਕ ਆਮ (generic) ਸੁਨੇਹਾ ਭੇਜੋ। res.status(500).json({ error: 'Something went wrong' })

ਕਿਸੇ endpoint ਨੂੰ ship ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਇੱਕ ਸਵਾਲ ਪੁੱਛੋ: ਕੀ ਹੁੰਦਾ ਹੈ ਜੇਕਰ ਕੋਈ ਯੂਜ਼ਰ ਅਣਕਿਆਸੇ (unexpected) ਡੇਟਾ ਭੇਜਦਾ ਹੈ?

ਸੁਰੱਖਿਆ ਬੱਗ (Security bugs) ਸ਼ਾਇਦ ਹੀ ਕਦੇ ਗੁੰਝਲਦਾਰ ਹੁੰਦੇ ਹਨ। ਇਹ ਉਦੋਂ ਹੁੰਦੇ ਹਨ ਜਦੋਂ ਤੁਸੀਂ ਬੁਰੇ ਲੋਕਾਂ (bad actors) ਬਾਰੇ ਸੋਚਣਾ ਭੁੱਲ ਜਾਂਦੇ ਹੋ।

ਤੁਸੀਂ ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ ਕਿਹੜਾ ਸੁਰੱਖਿਆ ਬੱਗ ਲੱਭਿਆ ਹੈ?

ਸਰੋਤ: https://dev.to/manolito99/the-security-bug-every-nodejs-developer-ships-to-production-49e6