Notice
Recent Posts
Recent Comments
Link
투케이2K
176. (TWOK/LOGIC) [Web] 자바스크립트 크롬 브라우저 키이벤트 및 마우스 우클릭 이벤트 감지 후 기본 개발자 도구 진입 막기 로직 정리 본문
투케이2K 로직정리
176. (TWOK/LOGIC) [Web] 자바스크립트 크롬 브라우저 키이벤트 및 마우스 우클릭 이벤트 감지 후 기본 개발자 도구 진입 막기 로직 정리
투케이2K 2026. 3. 9. 19:34728x90
반응형
[로직 정리]
정리 로직 : Web / JavaScript
상태 : [Web] 자바스크립트 크롬 브라우저 키이벤트 및 마우스 우클릭 이벤트 감지 후 기본 개발자 도구 진입 막기 로직 정리

[설 명]
// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------
1. 제 목 : [Web] 자바스크립트 크롬 브라우저 키이벤트 및 마우스 우클릭 이벤트 감지 후 기본 개발자 도구 진입 막기 로직 정리
2. 테스트 환경 : Web / JavaScript / chrome / devOption
3. 사전) 👉 자바스크립트 addEventListener 간략 설명 :
>> addEventListener() 는 브라우저 DOM 요소(또는 window, document 등) 에 이벤트 핸들러(콜백 함수)를 등록하는 표준 방법입니다.
>> 기본 이벤트 리스너 등록 문법 : target.addEventListener(type, listener, options);
- type : 이벤트 이름 (예: "click", "keydown", "resize" 등)
- listener : 이벤트 발생 시 실행할 함수 (콜백)
- options : 캡처링, 버블링, 한 번만 실행 등 세부 설정(선택)
$ capture: true = 캡처링 단계에서 먼저 이벤트 실행
$ once: true = 이벤트를 딱 한 번만 실행
$ passive: true = 이벤트 핸들러에서 preventDefault() 호출 금지 / 스크롤 성능 최적화용
$ 단순 불린 값 (옛 방식) = element.addEventListener("click", handler, true); // capture 모드 || element.addEventListener("click", handler, false); // bubbling 모드(기본)
>> 브라우저 이벤트 흐름 :
- 캡처 단계 (Capturing phase) : 이벤트가 window → document → body → 목표 요소로 내려옴
- 타깃 단계 (Target phase) : 실제 이벤트 대상 요소에서 실행
- 버블링 단계 (Bubbling phase) : 이벤트가 목표 요소 → body → document → window 로 올라감
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------
1. 자바스크립트에서 웹 브라우저 로딩 감지 window.onload 함수 생성 및 관리자 인증 수행 플래그 값 변수 선언
var ADMIN_AUTH_FLAG = false;
window.onload = async function() {
// ...... 코드 계속 ......
};
2. window.onload 부분에서 브라우저 접속 userAgent 값 확인 수행
var uagent = navigator.userAgent.toLowerCase();
var android_agent = uagent.search("android");
var iphone = uagent.search("iphone");
var ipad = uagent.search("ipad");
// [접속 디바이스 분기 처리 전송 실시]
if (android_agent > -1 || iphone > -1) {
console.log("[접속 환경] : Mobile");
}
else {
console.log("[접속 환경] : PC");
// ...... 코드 계속 ......
}
3. 웹 브라우저를 접속한 환경이 PC 환경 인 경우 [마우스 우클릭] 이벤트 감지 리스너 및 F12, Ctrl+U 등 키 이벤트 감지 리스너 등록 수행
// --------------------------------------
// ✅ 마우스 우클릭 페이지 소스 보기 막기 코드
// --------------------------------------
['mousedown', 'mouseup', 'contextmenu'].forEach(type => {
window.addEventListener(type, (e) => {
try {
console.warn(`[mouse] : ${type} : `, {
button: e.button, // 0=좌, 1=중, 2=우 (없으면 undefined)
buttons: e.buttons, // 비트마스크: 1=좌, 2=우, 4=중
which: e.which, // 과거 호환 (권장X)
defaultPrevented: e.defaultPrevented,
target: e.target && e.target.tagName
}, e);
if (type == 'contextmenu'){
console.log('contextmenu : event : ', e);
const pointerType = e.pointerType || null;
console.log('contextmenu : pointerType : ', pointerType);
if (pointerType == 'mouse'){ // ✅ 마우스 우클릭
// ✅ 메뉴 자체 표시 막기
if (ADMIN_AUTH_FLAG == false){ // ❌ 관리자 인증 플래그 값 변수 체크 : 관리자 인증이 안된 경우
adminAuthPopup("※ 마우스 우클릭 : 관리자 인증 후 사용할 수 있는 기능입니다");
e.preventDefault();
e.stopPropagation();
}
}
}
}
catch(exception){
console.error('[mouse] : Logic : exception : ', exception);
}
}, { capture: true });
});
// --------------------------------------
// ✅ F12, Ctrl+U 키 이벤트 방지 코드
// --------------------------------------
document.addEventListener('keydown', function (e) {
try {
const key = e.key.toUpperCase();
const ctrl = e.ctrlKey || e.metaKey;
// ✅ F12
if (e.key === "F12" || e.keyCode === 123) {
console.warn("keydown : F12 감지됨");
if (ADMIN_AUTH_FLAG == false){ // ❌ 관리자 인증 플래그 값 변수 체크 : 관리자 인증이 안된 경우
adminAuthPopup("※ F12 : 관리자 인증 후 사용할 수 있는 기능입니다");
e.preventDefault();
e.stopPropagation();
}
}
// ✅ Ctrl + U
if (ctrl && key === "U") {
console.warn("keydown : Ctrl + U 감지됨");
if (ADMIN_AUTH_FLAG == false){ // ❌ 관리자 인증 플래그 값 변수 체크 : 관리자 인증이 안된 경우
adminAuthPopup("※ Ctrl + U : 관리자 인증 후 사용할 수 있는 기능입니다");
e.preventDefault();
e.stopPropagation();
}
}
// ✅ Ctrl + Shift + I (개발자 도구)
if (ctrl && e.shiftKey && key === "I") {
console.warn("keydown : Ctrl + Shift + I 감지됨");
if (ADMIN_AUTH_FLAG == false){ // ❌ 관리자 인증 플래그 값 변수 체크 : 관리자 인증이 안된 경우
adminAuthPopup("※ Ctrl + Shift + I : 관리자 인증 후 사용할 수 있는 기능입니다");
e.preventDefault();
e.stopPropagation();
}
}
// ✅ Ctrl + Shift + J (콘솔 패널)
if (ctrl && e.shiftKey && key === "J") {
console.warn("keydown : Ctrl + Shift + J 감지됨");
if (ADMIN_AUTH_FLAG == false){ // ❌ 관리자 인증 플래그 값 변수 체크 : 관리자 인증이 안된 경우
adminAuthPopup("※ Ctrl + Shift + J : 관리자 인증 후 사용할 수 있는 기능입니다");
e.preventDefault();
e.stopPropagation();
}
}
}
catch(exception){
console.error('keydown : Logic : exception : ', exception);
}
});
4. adminAuthPopup 관리자 인증 수행 팝업창에서는 window.prompt 를 사용해 관리자 인증 번호를 입력 받을 수 있는 팝업창 표시 및 관리자 인증 번호 확인 수행
var value = window.prompt("\n" + type + "\n\n" + "※ 관리자 인증 번호를 입력해 주세요." + "\n\n" + "※ 관리자 인증이 정상적으로 되어야 전체 기능 사용이 가능합니다." + "\n");
if (value !== null && value !== undefined && value !== ""){
// ...... 코드 계속 ..... 관리자 인증 번호 일치 체크 ........
}
5. adminAuthPopup 관리자 인증 수행 팝업창에서 정상적으로 관리자 인증이 완료 된 경우 ADMIN_AUTH_FLAG 플래그 값 변경 및 관리자 인증 성공 팝업창 alert 알림 표시
if (value == ADMIN_AUTH_PW){ // 관리자 인증 번호 정상 일치
ADMIN_AUTH_FLAG = true;
const timeAlert3 = setTimeout(() => { // 타이머
alert("\n" + "✅ 관리자 인증이 완료 되었습니다 !!" + "\n");
}, 200 );
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[간단 소스] 자바스크립트 Web 웹 크롬 브라우저 키이벤트 및 마우스 우클릭 이벤트 감지 개발자 도구 진입 막기 코드
https://kkh0977.tistory.com/8669
https://blog.naver.com/kkh0977/224202975940
[크롬 F12 개발자 도구 사용해 로컬 스토리지 , 세션 , 쿠키 저장된 정보 확인 방법]
https://kkh0977.tistory.com/1145
https://blog.naver.com/kkh0977/222476096072?trackingCode=blog_bloghome_searchlist
[크롬 F12 개발자 도구 사용해 네트워크 상태 및 리소드 로드 속도 확인]
https://kkh0977.tistory.com/947
https://blog.naver.com/kkh0977/222423344731?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'투케이2K 로직정리' 카테고리의 다른 글
Comments
