ふたりで

크롬 개발자 도구 차단 2, Detect browser developer tools by javascript 2(chrome, firefox, Edge) 본문

javascript

크롬 개발자 도구 차단 2, Detect browser developer tools by javascript 2(chrome, firefox, Edge)

graykang 2022. 10. 25. 18:19
728x90
반응형
SMALL

개발자 도구 사용을 막는 방법에 대해 글을 하나 남겼었다 결론은 막지 못한다로 마무리를 지었지만...

ㅎㅎ 계속 파다 보니 해결 방법을 찾아냈다... 물론 내가 만든 소스 코드는 아니고 여기저기 참고하여 짜집기 한거지만

잘 동작하기에 글을 남긴다... 소스 코드는 아래와 같다.

 

아래 소스 코드는 마우스 우클릭 방지, f12 및 특수키 입력 방지, 그리고 개발자 도구 감지 시 강제 로그아웃 이 3가지

기능이 정리되어 있다. 해당 스크립트를 공통으로 사용되는 헤더 스크립트에 추가하면 된다.

 

개발자도구를 어떤 방법으로든 실행을 하면 Detecting 하며, 디택팅 되는 순간 로그아웃을 해버리며 오류 페이지로

전환을 해버리기 때문에 개발자도구를 실행한 클라이언트 브라우져는 해당 에러화면 소스 만 볼수 있다.

728x90

 

SMALL
$(document).ready(function(){
	//마우스 우측 버튼 사용 막기.
	if (window.addEventListener) {
		window.addEventListener('contextmenu', function(e) { try { if (typeof e != 'undefined') { e.preventDefault(); return false; } else { return false; }} catch(e) {} } , false);
	} else {
		window.attachEvent('oncontextmenu', function(e) { try { if (typeof e != 'undefined') { e.preventDefault(); return false; } else { return false; }} catch(e) {} } );
	}
	var handlemouseEvent = function(e) {
		try {
			if (typeof e == 'undefined') {
				if (window.event.button && window.event.button == "2") {
					return false;
				}
			} else if ((e.which && e.which == 3) || (e.button && e.button == 2)) {
				e.preventDefault();
				return false;
			}
	
		} catch (e) {}
	};
	window.onkeydown = handlemouseEvent;
	window.onkeyup = handlemouseEvent;
    
	//로그아웃 시켜버릴 임시 form 생성
	var logOutFrom = document.createElement('form');
	logOutFrom.name= "logOutFrom";
	logOutFrom.id= "logOutFrom";
	logOutFrom.action = ctx+"/logout";
	logOutFrom.method= "POST";
	var input = document.createElement('input');
	input.type = 'hidden';
	input.name = '${_csrf.parameterName}';
	input.value = '${_csrf.token}';
	logOutFrom.appendChild(input);
	document.body.appendChild(logOutFrom);

    //개발자도구 실행 감지.
    console.log(Object.defineProperties(new Error, {
        toString: {value() {(new Error).stack.includes('toString@') && alert('Safari devtools')}},
        message: {
            get() {
                //개발자도구를 감지하면 그냥 홬 로갓 키겨 버리자.
                logOutFrom.submit()
        	}
        },
    }));

 });
 
// Detect Key Shortcuts f12 및 특수키 조합 막기
window.addEventListener('keydown', function(e) {
    if (
        // CMD + Alt + I (Chrome, Firefox, Safari)
        e.metaKey == true && e.altKey == true && e.keyCode == 73 ||
        // CMD + Alt + J (Chrome)
        e.metaKey == true && e.altKey == true && e.keyCode == 74 ||
        // CMD + Alt + C (Chrome)
        e.metaKey == true && e.altKey == true && e.keyCode == 67 ||
        // CMD + Shift + C (Chrome)
        e.metaKey == true && e.shiftKey == true && e.keyCode == 67 ||
        // Ctrl + Shift + I (Chrome, Firefox, Safari, Edge)
        e.ctrlKey == true && e.shiftKey == true && e.keyCode == 73 ||
        // Ctrl + Shift + J (Chrome, Edge)
        e.ctrlKey == true && e.shiftKey == true && e.keyCode == 74 ||
        // Ctrl + Shift + C (Chrome, Edge)
        e.ctrlKey == true && e.shiftKey == true && e.keyCode == 67 ||
        // F12 (Chome, Firefox, Edge)
        e.keyCode == 123 ||
        // CMD + Alt + U, Ctrl + U (View source: Chrome, Firefox, Safari, Edge)
        e.metaKey == true && e.altKey == true && e.keyCode == 85 ||
        e.ctrlKey == true && e.keyCode == 85
    ) {
		e.preventDefault();
		return false;
    }
});

1. 출처: https://stackoverflow.com/a/71794156

 

Find out whether Chrome console is open

I am using this little script to find out whether Firebug is open: if (window.console && window.console.firebug) { //is open }; And it works well. Now I was searching for half an hour...

stackoverflow.com

2. 출처: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties

 

Object.defineProperties() - JavaScript | MDN

Object.defineProperties() 메서드는 객체에 새로운 속성을 정의하거나 기존의 속성을 수정하고, 그 객체를 반환한다.

developer.mozilla.org

3. 출처: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack

 

Error.prototype.stack - JavaScript | MDN

The non-standard stack property of Error objects offer a trace of which functions were called, in what order, from which line and file, and with what arguments. The stack string proceeds from the most recent calls to earlier ones, leading back to the origi

developer.mozilla.org

 

728x90
반응형
LIST
Comments