본문 바로가기
Today I learned

[JavaScript] 보안을 위해 console 로그 막기.

by soheemon 2019. 9. 9.
운영레벨에서 보안을 위해서 console로그 출력을 막아보자.

개발시점 console로그는 디버깅에 도움을 주지만, 운영시점에서는 불필요한 정보를 제공하는 취약점이 될 수도 있다.

 

코드를 먼저 보자.

//전역변수로 선언
console = {};
console.log = function(){};
console.warn = function(){};
console.error = function(){};

코드를 설명하자면, 우리가 console 객체를 사용 할 수 있는 이유는 내부에 미리 객체가 선언되어 있기 때문이다.

console에는 메서드들이 선언이 되어있다.

 

위의 코드는 내장객체인 console을 {}로 덮는다. 

그렇게되면 너무나 당연하게 console내부에 선언 된 메서드들도 사라진다.

이글을 쓰며, 개발자도구를 열어 console = {}를 테스트 했는데 잘되던 이미지 붙여넣기가 안된다!  아마 이미지붙여넣기 기능 내부에 console로 찍어야 하는 무언가가 있나보다. 

 

 

왜냐하면 내부에서 잘 사용하던 함수를 초기화 해버렸으니 그렇다. 브라우저는 그래서 재미있는 프로그램이다. 실시간으로 돌아가고있는 코드를 변경할 수 있어. 늘 새로워! 짜릿해!

 

이러한 이유로 기존의 console 내부 메서드들에 function(){}처럼 껍데기 하나 입혀준다.

JAVA라면 String 인자를 안받는 log메서드는 없다고 오류 삑삑 뱉을텐데 JS는 그냥 실행을 안하고 넘어가주나? 그래서 에러가 안나나? 아무튼 이부분은 연구가 필요하다.

 

console 객체 초기화 전후를 비교해보자.

 

초기화 전엔 잘 찍히던 로그들이 이후에는 찍히지 않는것을 확인 할 수 있다.

댓글