#연구/#Python

[파이썬/Python] 파이썬 assert문 사용 시 주의 #파이썬 assert문 사용시 주의할 점 #파이썬 assert 사용법 #파이썬 assert enable/disable #assert enable #assert disable #assert문 보안에 취약할 수 있는 경우

every7hing 2020. 8. 21. 19:18
반응형

 

파이썬 assert문 사용 시 주의

#파이썬 assert문 사용시 주의할 점

#파이썬 assert 사용법

#파이썬 assert enable/disable

#assert enable

#assert disable

#assert문 보안에 취약할 수 있는 경우

 

파이썬에서 assert는 어떻게 사용될까?

사실 이런 물음보다는 assert는 왜 쓰는걸까? 라는 물음이 더 알맞을 수도 있겠다.

 

어떠한 조건을 확인한다는 의미에서는 assert나 if등의 조건문은 다를바가 없을 수도 있다. 하지만, assert는 해당 조건이 참이 아닐 때 에러를 유발 시킨다.

그러므로, Debugging시 많은 이점이 있다.

 

예상치 못한 값이나, 의도하지 않은 상황에 대한 인지를 위해 사용하거나 특정 조건이 잘 실행되었는지, 또는 그렇지 못했는지에 대한 판단도 할 수 있다.

 

물론, assert가 잘 실행되려면 assert가 enable 상태여야 한다.

간단한 예를 들면, 기본적으로 assert가 enable인 상태에서 아래 명령을 실행하면, assert문이 잘 실행된다.

python test.py

 

하지만, 아래와 같이 실행하면 assert 문의 operation은 null로 인식되어 assert문이 실행될 상황이 와도 실행되지 않고 넘어간다.

python -O test.py

 

따라서, assert가 enable인 상태이냐, disable 상태이냐에 따라서도 assert문이 인식되는 것 자체가 달라지므로 사용에 주의를 해야한다.

 

한가지 예를 들면, 관리자만이 실행할 수 있는 기능이 있다고 하자.

그래서 아래와 같이 assert문을 작성했다고 하자.

def do_privEscalation(user):
  assert user.is_admin(), 'Must be admin'
  # something do it with admin auth

 

위와 같은 함수가 있다고 했을 때, 만약 assert가 disable인 상태였다고 하면 어떻게 될까?

프로그래머가 의도한 admin 사용자 뿐만 아니라, 일반 사용자들도 admin권한으로만 할 수 있는 일들을 수행 할 수 있게 된다.

 

따라서, assert문을 사용한 주요 기능이나 권한 체크 등을 수행하는 것은 좋은 습관이 아니다.

그래서 데이터의 유효함을 검증할 때에는 아래와 같이 if와 같은 조건문을 통해 정확하게 해당 조건을 검증하는 것이 필요하다.

def do_privEscalation(user):
  if not user.is_admin():
    raise AuthError('You are not admin!')
  # something do it with admin auth

Python assert 주요 사항 정리

  • Python의 assert 문은 프로그램에서 내부 자체 검사로 조건을 테스트하는 디버깅 도구이다.
  • assert는 개발자가 버그를 식별하는 데 도움이되는 용도로만 사용해야한다.
  • assert는 인터프리터 설정으로 전역적으로 활성화/비활성화 할 수 있다.

 

 

반응형