프로젝트 배포시 민감정보는 어떻게 관리하시나요?

제목 그대로 c# 윈폼으로 개발한 프로그램을 배포해볼 생각인데
c#이 디컴파일하면 소스코드가 그대로 노출이 된다는 사실을 알았습니다…
그래서 내부적으로 계산이 필요한데 노출시키고 싶지 않은 로직은 C++ dll을 만들어서 사용하고자 했는데
찾아보니까 C#이든 C++이든 결국엔 작정하고 까려면 못까는게 없다고 하는데

그렇다면 외부로 노출하고 싶지 않은 정보나 로직같은것이 있으면 어떻게 처리해야하는지 궁금합니다.
예를들면 DB Connection String이 있을 수 있겠네요…

3개의 좋아요

보안에는 절대라는 것은 없습니다.
암호화 하고 주기적으로 변경 되게 하는 것이 최선입니다.

방법으로는 모든 설정정보를 Web Server에서 받아오는 것도 하나의 방법이지만,
그 서버에서 받아오는 중요 정보 조차도 암호화 되어야 하고 암호화 된 데이터가 절대적으로 안전을 보장해 주지는 않습니다.

5개의 좋아요

민감 정보를 안전하게 관리하려면 반드시 서버에서 데이터를 관리하게 하고, 연결을 주고 받을 때에는 암호화된 통신을 사용하도록 해야 합니다. 그렇지 않으면, 짐작하시는대로 경제성과 효율성의 차이일 뿐 가치가 있다고 판단되면 어떤 형태로든 정보가 노출될 수 밖에 없습니다.

그리고 클라이언트이든 서버이든 코드에 직접 연결 문자열을 하드코딩해서 넣는 것은 절대로 피해야 하는 안티패턴입니다. DB 연결 문자열을 하드코딩하고 계시다면, 최소한 별도의 설정 파일에서 읽어오도록 코드를 다시 개발하시는 것이 좋습니다.

덧붙여서, 말씀하신대로 “작정하고 까려면 못까는 것은 없습니다.” 그런데, 일반적으로 소프트웨어의 취약점을 파고드는 해커는 그 "작정함"의 "가성비"를 따집니다.

가성비가 낮아도, 가치가 높은 정보 (예: 바로 활용할 수 있는 주민등록번호나 여권 번호, 비밀 번호 따위)를 탈취할 수 있을 것이 확실하다면, 수단과 방법을 가리지 않고 총 공세를 할 것이고, 가치가 낮은 정보라면 아무리 공략이 쉬워도 거들떠보지 않을 겁니다. 모든 것을 암호화하고 보안 처리를 하는 것이 또한 능사는 아니기 때문에, 어떻게 애플리케이션에 보안을 적용할 것인지는 요구 사항 일치 여부와 맞춰서 꼼꼼하게 따져보셔야 하겠습니다.

6개의 좋아요

답글 감사드립니다.
그렇다면 DB연결 문자열같은것은 서버에서 관리한다쳐도,
단순히 계산이 들어가는 로직이지만 특별히 외부에 노출하고 싶지않을때는 C++ dll보다 차라리 서버에서 데이터를 처리하고 결과값만 받아서 사용하는것이 좋을까요?

2개의 좋아요

넵. 대부분 그러합니다. 허나, 케바케입니다.

3개의 좋아요