clean code, 코드 취약점을 분석해주는 sparrow solution을 사용해보았다
엄청난 취약점이 발견되었다 backend에서..
try- catch
를 잘 안썼거나, contextmanager 데코레이터로 db.session을 사전에 부모 모듈에서 설정해놓고 안 써서 중복 코드로 취약점히 잡힘
그 외에도 .sh 등 shell 파일을 직접 프로덕션 환경 등에서 쓰면 취약점으로 인해 함수 변조등 해킹 가능성이 높다고 팀장님이 말해주심
아니 그걸 왜 이제 말해줌..?
그 외에
# Exception: 모든 내장 예외의 기본 클래스
except Exception as e:
print(e)
위 방식으로 에러 핸들링을 처리했는데 이 코드 또한 취약점 발생이 다수 발견하는 것을 목격함
NullPoint / EOF
등 여러 내장 예외 클래스가 있던데|Java || Python|
NullPointerException TypeError/AttributeError
ArrayIndexOutOfBoundsException IndexError
IllegalArgumentException ValueError
NoSuchElementException KeyError
FileNotFoundException FileNotFoundError
IOException IOError
ClassNotFoundException ImportError
기본 예외들: (내장 예외 클래스)
TypeError: 타입 불일치
ValueError: 부적절한 값
IndexError: 리스트 인덱스 범위 초과
KeyError: 딕셔너리 키가 없음
IOError: 입출력 작업 실패시
FileNotFoundError: 파일 없음
ZeroDivisionError: 0으로 나누기
AttributeError: 존재하지 않는 속성 접근
ImportError: 모듈 임포트 실패
NameError: 정의되지 않은 변수 사용
특수 예외들:
StopIteration: 이터레이터 종료
AssertionError: assert 문 실패
RuntimeError: 일반적인 런타임 에러
PermissionError: 권한 관련 에러
TimeoutError: 시간 초과
ConnectionError: 네트워크 연결 관련 에러
class DataValidationError(Exception):
""" 데이터 검증 예외처리 후 """
pass
def demonstrate_common_exceptions():
# 1. TypeError - 타입 불일치
try:
result = "123" + 456
except TypeError as e:
print(f"TypeError 발생: {e}") # can only concatenate str (not "int") to str
# 2. ValueError - 부적절한 값
try:
number = int("abc")
except ValueError as e:
print(f"ValueError 발생: {e}") # invalid literal for int() with base 10: 'abc'
# 3. IndexError - 리스트 인덱스 범위 초과
try:
my_list = [1, 2, 3]
value = my_list[10]
except IndexError as e:
print(f"IndexError 발생: {e}") # list index out of range
# 4. KeyError - 딕셔너리 키가 없음
try:
my_dict = {"name": "John"}
value = my_dict["age"]
except KeyError as e:
print(f"KeyError 발생: {e}") # 'age'
# 5. FileNotFoundError - 파일 없음
try:
with open("존재하지_않는_파일.txt", "r") as f:
content = f.read()
except FileNotFoundError as e:
print(f"FileNotFoundError 발생: {e}") # [Errno 2] No such file or directory
# 6. ZeroDivisionError - 0으로 나누기
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"ZeroDivisionError 발생: {e}") # division by zero
- Validation Error