NoSQL 인젝션

NoSQL Injection

설명

NoSQL 인젝션은 NoSQL 데이터베이스에 대한 쿼리에 사용자 입력을 직접 포함시킬 때 발생하는 취약성입니다. 이는 공격자가 악의적으로 조작된 입력을 통해 데이터베이스 명령을 실행하거나 민감한 데이터를 탈취할 수 있게 합니다.

잠재적 영향

  • 데이터 유출: 공격자가 민감한 데이터를 조회하거나 유출할 수 있습니다.

  • 데이터 변조: 공격자가 데이터를 조작하거나 삭제할 수 있습니다.

  • 서비스 중단: 악의적인 쿼리로 인해 데이터베이스 성능이 저하되거나 서비스가 중단될 수 있습니다.

해결 방법

  • 입력값 검증: 사용자 입력을 철저히 검증하여 악의적인 패턴을 차단합니다.

  • 보안 라이브러리 사용: NoSQL 인젝션 방지를 위한 보안 라이브러리를 사용합니다.

취약한 코드 및 안전한 코드 예시

Unsafe NoSQL query in Flask & Safe NoSQL query in Flask

취약한 코드

# Unsafe NoSQL query in Flask
from flask import Flask, request
from pymongo import MongoClient

app = Flask(__name__)
client = MongoClient('mongodb://localhost:27017/')
db = client.mydatabase

@app.route('/user')
def get_user():
    username = request.args.get('username')
    query = json.loads(username)
    return db.users.find_one(query)

안전한 코드

설명:

  • 취약한 코드: 사용자 입력을 검증하지 않고 쿼리에 직접 포함시켜 NoSQL 인젝션 공격에 취약합니다.

  • 안전한 코드: 사용자 입력을 mongosanitizer를 사용하여 검증하여 사용하도록 합니다.

참조

Last updated