IT

파이썬(python) 트라이익셉트(try - except) 적용 예시

볼통통알파카 2022. 10. 10. 20:11
반응형

트라이-익셉트(try - except)문 사용 시 주의

파이썬에서 트라이(try)문을 사용할 때, 예외처리를 하지 않을 경우 또는 예외처리를 세부적으로 적용하지 않을 경우 오류를 활용해 공격자가 시스템을 공격할 수 있다.

보통 개발할 때 try 블록에서 오류를 캐치하고 예외조치를 제대로 설정하지 않는 경우가 있는데 그래서 try문을 사용할 땐 항상 예외 처리를 설정하고, 프로그램이 제어되지 않는 방식으로 중지되도록 설정해야 한다.

 

트라이문 활용 코드예시

import os
import binascii
import base64
from Crypto.Cipher import AES
static_keys=[
           {'key' : b'\xb9J\xfd\xa9\xd2\xefD\x0b\x7f\xb2\xbcy\x9c\xf7\x9c',
              'iv' : b'\xf1BZ\x06\x03TP\xd1\x8a\xad"\xdc\xc3\x08\x88\xda'}, 
           {'key' : b'Z\x01$.:\xd4u3~\xb6TS(\x08\xcc\xfc', 
              'iv' : b'\xa1a=:\xba\xfczv]\xca\x83\x9485\x14\x17'},]


def encryption(key_id, plain_text):
   static_key = {'key':b'0000000000000000', 'iv':b'0000000000000000'}

   try:
        static_key = static_keys[key_id]
    except IndexError:
        # key 선택 중 오류 발생 시 랜덤으로 암호화 키를 생성하도록 설정
        static_key = {'key': secrets.token_bytes(16), 'iv': secrets.token_bytes(16)}
        static_keys.append(static_key)

    cipher_aes = AES.new(static_key['key'],AES.MODE_CBC,static_key['iv'])
    encrypted_data = base64.b64encode(cipher_aes.encrypt(plain_text))
    return encrypted_data.decode('ASCII')

익셉트 부분에 해당 키를 설정하지 않고 pass를 하게되면 0000~으로 암호화가 수행되는 상황이 발생된다.

만일 다양한 예외상황이 발생할 수 있는 경우에는 1:1로 예외처리를 하는게 좋다.

반응형