Bird
Raised Fist0
Node.jsframework~5 mins

Common Node.js security vulnerabilities in Node.js - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is Cross-Site Scripting (XSS) in Node.js applications?
XSS is a security flaw where attackers inject malicious scripts into web pages viewed by other users. In Node.js apps, this often happens when user input is not properly sanitized before rendering in the browser.
Click to reveal answer
beginner
How can SQL Injection affect a Node.js app?
SQL Injection happens when untrusted user input is directly used in database queries. Attackers can manipulate queries to access or change data they shouldn't. Using parameterized queries or ORM libraries helps prevent this.
Click to reveal answer
beginner
What is the risk of using outdated npm packages in Node.js?
Outdated packages may have known security flaws. Attackers can exploit these to harm your app or steal data. Regularly updating packages and checking for vulnerabilities keeps your app safer.
Click to reveal answer
intermediate
Explain the concept of 'Insecure Deserialization' in Node.js.
Insecure deserialization occurs when untrusted data is converted back into objects without proper checks. Attackers can craft data to execute harmful code or change app behavior. Always validate and sanitize data before deserializing.
Click to reveal answer
beginner
Why is improper error handling a security concern in Node.js?
If error messages reveal too much info (like stack traces or database details), attackers can learn about your app's internals and find weaknesses. Use generic error messages for users and log detailed errors securely.
Click to reveal answer
Which practice helps prevent SQL Injection in Node.js?
AUsing parameterized queries
BIgnoring user input
CStoring passwords in plain text
DDisabling HTTPS
What does XSS allow an attacker to do?
ACrash the Node.js server
BAccess server file system directly
CInject malicious scripts into web pages
DBypass user login without credentials
Why should you keep npm packages updated?
ATo fix known security vulnerabilities
BTo get new features only
CTo increase app size
DTo slow down the app
What is a sign of improper error handling in Node.js apps?
ADisplaying generic error messages
BShowing detailed stack traces to users
CUsing try-catch blocks
DLogging errors securely
Insecure deserialization can lead to:
ABetter user experience
BFaster app performance
CAutomatic updates
DExecution of malicious code
Describe three common security vulnerabilities in Node.js and how to prevent them.
Think about how attackers exploit user input and dependencies.
You got /3 concepts.
    Explain why proper error handling is important for Node.js security.
    Consider what attackers can learn from error details.
    You got /3 concepts.

      Practice

      (1/5)
      1. Which of the following is a common security vulnerability in Node.js applications?
      easy
      A. Memory Leak
      B. SQL Injection
      C. Slow Network
      D. Syntax Error

      Solution

      1. Step 1: Understand common vulnerabilities

        SQL Injection is a well-known security risk where attackers inject malicious SQL code.
      2. Step 2: Identify relevant options

        Memory leaks and slow networks are performance issues, syntax errors are coding mistakes, not security vulnerabilities.
      3. Final Answer:

        SQL Injection -> Option B
      4. Quick Check:

        Common Node.js security risk = SQL Injection [OK]
      Hint: Security risks often involve data injection or unauthorized access [OK]
      Common Mistakes:
      • Confusing performance issues with security vulnerabilities
      • Thinking syntax errors are security problems
      • Ignoring injection attacks
      2. Which syntax correctly prevents Cross-Site Scripting (XSS) in a Node.js Express app when rendering user input in a template?
      easy
      A. res.send(`
      ${escape(userInput)}
      `);
      B. res.render('page', { data: userInput });
      C. res.send(`
      ${userInput}
      `);
      D. res.send(userInput);

      Solution

      1. Step 1: Identify safe rendering method

        Escaping user input before inserting into HTML prevents XSS attacks.
      2. Step 2: Compare options

        Only res.send(`
        ${escape(userInput)}`); uses an escape function to sanitize input before sending.
      3. Final Answer:

        res.send(`
        ${escape(userInput)}
        `);
        -> Option A
      4. Quick Check:

        Escape user input to prevent XSS = res.send(`
        ${escape(userInput)}
        `); [OK]
      Hint: Always escape user input before rendering in HTML [OK]
      Common Mistakes:
      • Sending raw user input directly in HTML
      • Assuming template rendering auto-escapes input
      • Not using escape functions
      3. What will be the output of this Node.js code snippet vulnerable to prototype pollution?
      const obj = {};
      const payload = JSON.parse('{"__proto__": {"polluted": "yes"}}');
      Object.assign(obj, payload);
      console.log({}.polluted);
      medium
      A. Throws an error
      B. undefined
      C. null
      D. "yes"

      Solution

      1. Step 1: Understand prototype pollution

        Assigning __proto__ property modifies the prototype of all objects.
      2. Step 2: Analyze code behavior

        Object.assign merges payload into obj, changing Object prototype to include polluted property.
      3. Step 3: Check console.log output

        Accessing {}.polluted reads from prototype, outputs "yes".
      4. Final Answer:

        "yes" -> Option D
      5. Quick Check:

        Prototype pollution sets property globally = "yes" [OK]
      Hint: Prototype pollution changes all objects' properties unexpectedly [OK]
      Common Mistakes:
      • Expecting undefined instead of polluted value
      • Not recognizing __proto__ effect
      • Assuming error thrown on prototype pollution
      4. Identify the security flaw in this Express middleware code:
      app.use((req, res, next) => {
        const token = req.headers['authorization'];
        if (token) {
          req.user = jwt.verify(token, 'secret');
        }
        next();
      });
      medium
      A. Not checking token expiration
      B. Using synchronous jwt.verify instead of async
      C. Missing error handling for invalid token
      D. Not sanitizing user input

      Solution

      1. Step 1: Review token verification

        jwt.verify can throw if token is invalid, but no try-catch is used.
      2. Step 2: Identify missing error handling

        Without try-catch, invalid tokens cause app crash or unhandled exceptions.
      3. Final Answer:

        Missing error handling for invalid token -> Option C
      4. Quick Check:

        Always catch errors from jwt.verify [OK]
      Hint: Wrap jwt.verify in try-catch to handle invalid tokens [OK]
      Common Mistakes:
      • Ignoring exceptions from jwt.verify
      • Assuming synchronous call is insecure
      • Confusing input sanitization with token validation
      5. You want to secure a Node.js app against outdated package vulnerabilities. Which approach is best to keep dependencies safe?
      hard
      A. Run 'npm audit' regularly and update vulnerable packages
      B. Ignore warnings and only update major versions yearly
      C. Manually edit package-lock.json to remove vulnerabilities
      D. Use only packages without any dependencies

      Solution

      1. Step 1: Understand package vulnerability management

        npm audit scans for known vulnerabilities in dependencies.
      2. Step 2: Choose best practice

        Regularly running npm audit and updating packages fixes security issues promptly.
      3. Step 3: Evaluate other options

        Ignoring warnings risks attacks, manual edits are error-prone, and avoiding dependencies is impractical.
      4. Final Answer:

        Run 'npm audit' regularly and update vulnerable packages -> Option A
      5. Quick Check:

        Use npm audit and update often = Run 'npm audit' regularly and update vulnerable packages [OK]
      Hint: Use npm audit and update packages regularly [OK]
      Common Mistakes:
      • Ignoring audit warnings
      • Editing lock files manually
      • Avoiding dependencies completely
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard