NoSQL 오퍼레이션은 인젝션 공격에 취약하지 않아야 합니다.

 

URL 매개변수 및 POST 메서드의 body-content와 같은 사용자 제공 데이터는 항상 신뢰할 수 없고 오염된 것으로 간주해야 합니다.

오염된 데이터를 기반으로 NoSQL 작업을 수행하는 응용 프로그램은 일반 SQL 인젝션 버그와 유사하게 이용될 수 있습니다. 코드에 따라 SQL 인젝션과 동일한 위험이 존재합니다: 공격자는 중요한 정보에 액세스하거나 데이터 무결성을 손상시키는 것을 목표로 합니다. 공격에는 쿼리 연산자, JavaScript 코드 또는 문자열 작업이 포함될 수 있습니다.

이 문제는 ODM(Object Document Mapper) 라이브러리를 사용하거나 데이터 사이즈 또는 허용된 문자를 기반으로 사용자 제공 데이터의 유효성을 검사하여 공격 가능성을 줄일 수 있습니다.

규칙을 어긴 코드

DynamoDB의 경우 FilterExpression, ProjectionExpression 또는 KeyConditionExpression 파라미터가 사용자 입력한 값의 영향을 받는 경우 예기치 않은 NoSQL 작업이 실행될 수 있습니다.

DYNAMO_CLIENT = boto3.client('dynamodb', config=config)

DYNAMO_CLIENT.scan(
    FilterExpression= username + " = :u AND password = :p", # username은 사용자 입력값
    ExpressionAttributeValues={
        ":u": { 'S': username },
        ":p": { 'S': password }
     },
    ProjectionExpression="username, password",
    TableName="users"
) # 규칙을 어긴 코드

규칙을 준수한 해결책

DynamoDB의 경우 FilterExpression, ProjectionExpression 및 KeyConditionExpression 파라미터는 사용자 입력한 값의 영향을 받지 않아야 합니다.

DYNAMO_CLIENT = boto3.client('dynamodb', config=config)

DYNAMO_CLIENT.scan(
    FilterExpression= "username = :u AND password = :p",
    ExpressionAttributeValues={
        ":u": { 'S': username },
        ":p": { 'S': password }
     },
    ProjectionExpression="username, password",
    TableName="users"
)

같이보면 좋은 자료

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project