본문 바로가기

카테고리 없음

시큐어코딩

대선배 개발자분과의 대화를 정리해봤습니다 😀 초보자인 제 생각을 정리한 글입니다

 

시큐어 코딩?
 소프트 웨어를 개발하는 데에 있어서 개발자의 실수, 논리적 오류 등으로 인해서 SW에 내포될 수 있는 보안 취약점을 배제하기 위한 코딩 기법을 뜻한다.

시큐어코딩을 지키기 위한 가이드도 물론 존재한다. KISA에서 제공해주는 기술 안내서 가이드에 보면 JAVA, C 시큐어 코딩 가이드라인이 있다. 참고 : https://www.kisa.or.kr/public/laws/laws3.jsp (언어가 두개밖에 없네,,?)

KISA의 시큐어 코딩 가이드는 보안적인 내용과 함께 안전한 소프트웨어를 만들기 위한 가이드라인을 제시한다. 사실 시큐어 코딩이라고 하면 처음엔 보안을 지키기 위한 코딩인가? 라고만 생각했었다. 시큐어 코딩 가이드를 보면서, 그리고 선배님의 말씀을 들으면서 '시큐어 코딩' 이라는 것은 보안보다 한단계 더 높은 레벨이구나 라는 것을 느꼈다. 보안적인 부분을 모두 포괄하는 큰 개념이라고 해야하나? 시큐어 코딩을 통해 소프트웨어가 동작하면서 언젠가 죽을수도 있는 안전하지 않은 코드 작성을 피하는 것이다. 시큐어 코딩을 위해서는 정적 분석을 해야하며 시큐어 코딩 = 정적 분석이라 생각해도 된다고 하셨다.

정적 분석?
 정적 분석이란 코드를 실행하지 않고 소스코드에 대해서 분석하는 것을 말한다. 실행하지 않은 상태에서 코드를 살펴보며 동적 테스트로 잡아내지 못하는 버그들을 찾아내는 것이다.

정적 분석을 통해 여러가지 문제점들을 찾아낼 수 있다. (변수 선언 해놓고 초기화하지 않는 것, 도달하지 않는 if문 등) 이러한 정적 분석을 도와주는 도구들이 있으며 시큐어 코드를 위해서는 정적분석도구를 사용하는 습관을 들여야한다고 하셨다. 정적 분석 도구에는 SonarQube, eslint 그리고 pylint (파이썬의 정적분석 도구!) 등이 있다. eslint는 웹팩 공부하면서 어느정도 써봤는데 나머지는 이름조차 처음 들어본다.. 자바의 경우에는 요즘 인텔리제이를 사용하는데 인텔리제이에는 이미 정적 분석도구가 내장되어있다고 한다. 하지만 그 기능이 어느정도로 지원되는지는 잘 모르겠다. 다음에 프로젝트를 진행하게 되면 SonarQube를 도입해서 진행해봐야겠다. 그래서 오늘은 파이썬의 정적 분석 도구를 한번 체험해봤다.

파이썬의 정적 분석도구
파이썬 정적분석 도구는 pylint 말고도 flake8 이란 것도 있었다.

지금보니 경로에 한글 들어간거 되게 거슬린다.. 어쨌든 pip install로 설치!!

1) pylint

아~주 옛날에 백준문제 풀었던 걸로 한번 사용해봤다.

이렇게 짧은 코드에도 문제가 다섯개나 있다며 알려준다. (권고 사항이니 꼭 지키지는 않아도 된다.)

C0304 Final new line missing  : 맨끝에 엔터를 쳐주지 않아서 나는 에러. 왜지?? 하며 찾아봤다. 이유는 가끔 C로 작성된 다른 도구과 함께 사용시 에러가 날 수 있기때문에 마지막에 엔터를 쳐주는 것이 좋다고 한다.

C0144 : 파일이름이 한글이라서 ㅎ..

C0114 : docstring 을 달아줘야 한다.   참고로 docstring은  """ 간단한 설명 """

W0622 : 변수 이름을 built-in 함수인 sum과 똑같이 지어서 발생한 경고. 적당히 다른 이름으로 바꿔서 해결했다.

C0103 : num은 상수라면서 모두 대문자로 써야한다고 알려주는 경고메세지이다. 딱히 바꿀 필요성은 못느꼈지만 바꿔주니 해결되었다.

 

2) flake8

flake8은 경고가 3개밖에 뜨지 않았다. 에러가 모두 코드에서 노랗게 밑줄쳐진 부분들에 대한 내용들이었다.

잘보면 노란색 밑줄이 처져있는 부분들에 대한 메세지이다. (pylint와는 많이 다르다..!)

메세지대로 수정해주니 flake8은 코드에 문제가 없을 경우 아무런 메시지도 출력하지 않는다고 한다.

 

flake8, pylint 결론

둘 다 사용해본 결론은 flake8의 기능은 파이참에서 어느정도 제공해주고 있으니 파이참 러버인 나는 pylint만 쓰게 될 듯 하다..!

 

어째 마무리는 파이썬의 정적 분석 도구들 리뷰로 가는거 같다 ㅋㅋㅋㅋ 어쨌든 eslint도 다시 공부해보고 .. 시큐어 코딩을 위해 앞으로는 정적 분석도구에 좀 더 익숙해지고 사용하는 습관을 들여가야겠다.