Post

JavaScript Client side 코드 사용자가 절대 디버깅 하지 못하게 하기

사용자가 개발자 도구로 디버깅하기 어려운 JS 코드 만들기


우리 플랫폼이 개발자 커뮤니티다 보니까 간혹 프론트 엔드 개발자분들이 있어서 우리 Q&A플랫폼을 디버깅 하는 경우를 몇 차례 목격한적이 있다.

그렇게 되면 api문서가 없이도 알 수 있게 되기도 하고 비즈니스 로직을 알게 될 수도 있으며 취약점이 노출이 될 수도 있다.

물론 이런 중요한 로직은 서버단에서 실행하려고 많이 노력중이지만 그럼에도 불구하고 가려지지 않는 친구들이 간혹 있는데 그럴때 사용할 수 있는것이 JS 난독화이다!

우리의 경우엔 플랫폼에 간단한 게임이 있는데 그 게임을 해서 점수를 서버로 보내고 랭킹에 반영을 한다. 그런데 간단하게 개발자 도구에서 그냥 점수를 높게 조작하여 보내면 랭킹에 바로 등록이 되는 문제가 있어서 해당 해결 방법으로 해결해보고자 하였다.

JavaScript Obfuscator Tool


https://obfuscator.io

위의 사이트를 이용하면 js를 굉장히 어렵게 난독화 할 수 있다. 설정을 조금만 수정하면 정말 절대 절대 디버깅 할 수 없다. (물론 끈기가 있다면 할수 있을거 같다!)

다만 이렇게 해도 네트워크를 보는 것은 변함이 없기 때문에 우리 플랫폼에서는 sym key를 이용한 암호화를 더하면 조금 더 보안을 지켜 낼 수 있을것 같다고 생각했다.

따라서 이렇게 구조를 변경해 보았다.

1
사용자 게임 페이지 접근 -> 서버에서 sym key 받아옴 (하루한번 갱신) -> 게임 종료시 점수를 sym key로 암호화하여 서버에 전송 -> 서버에서 복호화후 랭킹 반영

이렇게 하게되면 사용자가 디버깅을 열심히 하지 않는 이상 점수을 살짝 조작해서 랭킹을 올리는 것은 불가능할 것 이라 생각한다!

진짜 해결 방법은 뭘까..?


사실 그런데 완벽하게 해결 된것이 아니라서 계속 찜찜하다.. 난독화했다고 하긴 하지만 사실 코드는 코드이기에 분명 파훼법이 존재할 것이라고 생각한다. 앞으로도 계속 고민해봐야할것같다…

This post is licensed under CC BY 4.0 by the author.

© 병욱. Some rights reserved.