[시큐어코딩 가이드] 부적절한 인가

 

 

 

■ 보안기능

 

보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현 시 발생할 수 있는 보안약점으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다.

 

 

부적절한 인가

 

■ 개요

 

프로그램이 모든 가능한 실행 경로에 대해서 접근 제어를 검사하지 않거나 불완전하게 검사하는 경우, 공격자는 접근 가능한 실행경로를 통해 정보를 유출할 수 있다.

 

 

■ 안전한 코딩 기법

 

응용프로그램이 제공하는 정보와 기능을 역할에 따라 배분함으로써 공격자에게 노출되는 공격노출 (Attack Surface)을 최소화하고 사용자의 권한에 따른 ACL(Access Control List)을 관리한다.

 

 

코드예제

 

사용자 입력 값에 따라 삭제작업을 수행하고 있으며, 사용자의 권한 확인을 위한 별도의 통제가 적용되지 않고 있다.

 

안전하지 않은 코드의 예
from django.shortcuts import render
from .model import Content

def delete_content(request):
action = request.POST.get('action', '')
content_id = request.POST.get('content_id', '')
#작업 요청을 하는 사용자의 권한 확인 없이 delete를 수행
if action is not None and action == "delete":
Content.objects.filter(id=content_id).delete()
return render(request, '/success.html')
else:
return render(request, '/error.html', {'error':'접근 권한이 없습니다.'})

 

세션에 저장된 사용자 정보를 통해 해당 사용자가 수행할 작업에 대한 권한이 있는지 확인한 뒤 권한이 있는 경우에만 수행하도록 해야 한다.

안전한 코드의 예
from django.shortcuts import render
from .model import Content

@login_required 
# 해당 기능을 수행할 권한이 있는지 확인
@permission_required('content.delete', raise_exception=True)
def delete_content(request):
action = request.POST.get('action', '')
content_id = request.POST.get('content_id', '')
if action is not None and action == "delete":
Content.objects.filter(id=content_id).delete()
return render(request, '/success.html')
else:
return render(request, '/error.html', {'error':'삭제 실패'})

 

 

댓글

Designed by JB FACTORY