버그 해결을 위한 모든 질문을 던져
0 votes
174 views
베포된 앱의 소스 코드에 연결 문자열 정보가 있으면 해킹당할 위험이 있기 때문에

App.config 파일을 사용해야 한다고 알고 있습니다.

하지만 빌드 한 앱의 App.config 파일은 비주얼스튜디오로도 열람할 수 있었습니다.

그렇다면 보안에 전혀 도움이 되지 않는 것 아닌가요?

보안에 도움이 되지 않는다면 왜 App.config를 사용해야 할까요?

아니면 별도의 암호화 절차가 필요한 것인가요?

고수님들의 답변을 기다립니다...
asked (27 point) , 174 views

1 답변

+1 vote
우수 답변
보안측면에서 어차피 해커가 내 서버의 실행파일과 App.config를 확인할 수 있다는 측면에서 이미 망한거니까 논할게 아니라고 생각합니다. 그보다 저는 '빌드하지 않고 환경을 바꿀 수 있다'를 장점으로 생각하는데요.

제가 App.config에 주로 담는 정보는
* 원격지 주소 (도메인 혹은 Ip)
* 남겨야 할 로그레벨

입니다.

만약 위와 같은 정보들이 코드에 박혀있을경우 코드를 바꾸고 빌드하고 재배포 해야겠죠.
서버가 10대정도라고 할 때 1,2,3번 서버는 DB A / 4,5,6번 서버는 DB B / 7,8,9,10번 서버는 DB C를 본다고 합시다.
서버에서는 아마도 서버의 id에 따라 DB주소가 다르게 들어가야 하는 '코드'가 입력되어 있겠죠?
게다가 몇몇 서버의 위치가 바뀌었을때는 실수가 없도록 코드를 수정해서 빌드하고 재배포 해야 할 것입니다. 실수 없도록요.

그런데 6번과 10번 서버에서 DB 접속에 실패했다고 칩시다.
그런데 릴리즈 빌드라서 상새한 트레이스 정보를 볼 수 없습니다.
그럼 프로그래머는 선택을 해야합니다. 6번과 10번만 상세 로그를 추가해서 다시 빌드해서 배포하던가, 모든 서버를 재 배포하던가.
일부만 배포해서 로그만 보면 될것같아 급히 수정하고 커밋한 뒤 빌드를 걸고 배포를 했는데 아뿔싸..
옆자리 프로그래머가 작업중이던 코드가 딸려갔습니다.
지금 서버는 6번과 10번만 다른 동작을 하고있게 됩니다.

음.. 써놓고보니 엉망징창에 헬이지만 충분히 있을법한 일입니다.
만약 App.config에 접속정보와 로깅정보가 쓰여있기만 해도 바이너리 수정 없이 restart만 해줘도 충분했을것을...
유저들은 '하루 종일 점검하냐'며 성화고, 사업부에서는 '지금 수천만원이 날아갔다!'며 재촉합니다.

아 App.config 좋지않습니까? ㅎ_ㅎ)>;;
answered (210 point)
선택됨
저도 사실 '아 난 코드만 볼거라고.. App.config'는 대체 뭐야? 라고 생각했습니다.
어디는 json, 어디는 xml인 점도 참 마음에 안들었죠. 특히 구글링 해봐도 '그래서 이 단락을 어디에 삽입해야 해?' 싶기도 하고 ㅎ
그치만 위와 같은 상황을 겪고싶진 않네요 ㅇ<-<

아, 그리고 보안의 이점을 얻고싶다면 App.config보다는 내부망에서 app을 통해서만 접근이 가능한 DB에서 정보를 가져오도록 구성하는것이 나을것 같습니다.
아하! 보안을 위해서 사용하는 것이 아니었군요.

친절한 답변 감사드립니다. 많은 도움이 되었습니다.

혹시 실례가 안된다면 몇가지만 더 질문을 드려도 괜찮을까요?

 

1. 일반적으로 app.Config 파일은 '빌드 이후에' 수정해서 배포를 하는 건가요?

2. 말씀하신 '상세한 트레이스 정보'는 어떤 정보를 뜻하는 건가요?

3. '상세 로그를 추가한다'는 게 무슨 뜻인지 궁금합니다. 코드를 수정한다는 말씀이신가요?

4. 코드를 수정하지 않고 app.Config 파일만 수정해서 '상세한 트레이스 정보'를 확인할 수 있나요?

시간이 괜찮으시다면 답변 부탁드립니다...!

 

다시 한번 답변 감사드립니다.
1. app.Config가 빌드 후에 수정하여 배포하는가?

app.Config는 런타임때 읽어와서 값을 사용하도록 되어있기 때문에 빌드전에 만든걸 계속 쓰셔도 되고, 빌드 후에 필요에 따라 값을 바꿔서 사용해도 됩니다.

2. 3. 4. 상세한 트레이스 정보와 로그 추가에 대해서

NLog라던가 대부분 로그라이브러리는 로그레벨이 있고 어느 레벨부터 출력할지를 지정할 수 있습니다.
예를들어 Debug 빌드에서는 Trace부터 출력하지만 Release 빌드에서는 Error만 찍게 할 수 있죠.
배포된거면 릴리즈일텐데 서비스하다보면 릴리즈빌드에서도 Trace나 Info에 해당하는 로그들도 출력해 보고싶을때가 있을거고, 이러한 설정이 app.Config에 있다면 다시 빌드하여 배포하지 않고도 변경 가능합니다.

충분한 대답이 되셨나요? 아직 경험이 부족하신 경우 잘 이해되지 않는 내용도 있으실수 있지만 그냥 '이런게 있구나'정도로 넘어가셔도 좋습니다. 꾸준히 배우시고 경험하다보면 '아 그때 이런게 있었지?'하며 떠오를거고 그때 더 잘 찾아보고 자신에게 적용하면 되니까요 ㅎ
네 충분한 대답이 되었습니다ㅎㅎ! 조언 감사드립니다.

귀중한 지식을 나누어 주셔서 감사합니다!

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

424 질문
564 answers
572 댓글
38,419 users