[nodejs] Node.js 취약점 유형

Node.js는 서버 측 JavaScript 실행 환경으로, 다양한 보안 취약점이 발견될 수 있습니다. 이 글에서는 Node.js 애플리케이션에서 주로 발견되는 취약점 유형에 대해 알아보겠습니다.

목차

  1. SQL 삽입 공격
  2. 크로스 사이트 스크립팅 (XSS)
  3. 보안 HTTP 헤더 설정 부재
  4. 파일 업로드 취약점

1. SQL 삽입 공격

SQL 삽입 공격은 사용자 입력을 통해 SQL 쿼리를 조작하여 데이터베이스를 비정상적으로 조작하는 공격입니다. Node.js 애플리케이션에서는 SQL 쿼리를 직접 작성하거나 ORM (Object-Relational Mapping) 라이브러리를 사용할 때 주로 발생합니다.

예시:

// 취약점이 있는 코드
const userId = req.body.userId;
const query = `SELECT * FROM users WHERE userId = '${userId}'`;

// 취약점을 보완한 코드
const userId = req.body.userId;
const query = 'SELECT * FROM users WHERE userId = ?';
connection.query(query, [userId], (error, results) => {
  // 처리 로직
});

2. 크로스 사이트 스크립팅 (XSS)

XSS 공격은 사용자가 제공한 데이터를 신뢰하지 않고 출력할 때 발생할 수 있습니다. Node.js 애플리케이션에서는 사용자가 입력한 데이터를 그대로 HTML에 출력할 때 이러한 취약점이 발생할 수 있습니다.

예시:

// 취약점이 있는 코드
const userInput = req.body.input;
res.send(`<p>${userInput}</p>`);

// 취약점을 보완한 코드
const userInput = req.body.input;
const safeInput = sanitizeHtml(userInput); // HTML 태그 제거
res.send(`<p>${safeInput}</p>`);

3. 보안 HTTP 헤더 설정 부재

Node.js 애플리케이션에서 적절한 HTTP 보안 헤더를 설정하지 않으면, 다양한 공격에 노출될 수 있습니다. helmet 라이브러리 등을 사용하여 적절한 HTTP 헤더를 설정할 수 있습니다.

예시:

// HTTP 헤더 설정
const helmet = require('helmet');
app.use(helmet());

4. 파일 업로드 취약점

파일 업로드 기능을 제공하는 Node.js 애플리케이션에서는 업로드된 파일을 적절히 필터링하고, 안전하게 저장해야 합니다. 악의적인 파일 업로드를 방지하기 위해 파일 확장자나 MIME 유형을 검증하는 로직이 필요합니다.

예시:

// 파일 업로드 필터링
const multer = require('multer');
const upload = multer({ 
  // 파일 필터링 로직 설정
});

위에서 소개한 취약점 유형들을 주의 깊게 검토하고 보안 조치를 취함으로써 Node.js 기반 애플리케이션의 안전성을 보다 강화할 수 있습니다.

참고 자료


이상으로 Node.js 취약점 유형에 대해 알아보았습니다. 안전한 애플리케이션을 만들기 위해 보안 취약점에 대한 이해와 예방이 매우 중요합니다.