λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Lect & Tip/javascript, jQuery

(Javascript)개발자 도ꡬ μ½˜μ†”μ°½ 차단 방법 - μ‚¬μ΄νŠΈ 이동 [κ²½κ³ ] 개발자 도ꡬ가 κ°μ§€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

by 낯선곡간2019 2023. 12. 14.
λ°˜μ‘ν˜•

(Javascript)개발자 도ꡬ μ½˜μ†”μ°½ 차단 방법 - μ‚¬μ΄νŠΈ 이동 [κ²½κ³ ] 개발자 도ꡬ가 κ°μ§€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

개발자 도ꡬ μ°¨λ‹¨μ˜ ν•œκ³„μ™€ μ‹€μš©μ  μ ‘κ·Ό

개발자 도ꡬλ₯Ό μ°¨λ‹¨ν•˜λ €λŠ” 주된 λͺ©μ μ€ λ³΄μ•ˆ κ°•ν™”λ‚˜ HTML 및 CSS의 μˆ¨κΉ€μ„ μœ„ν•¨μΌ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ€‘μš”ν•œ 것은, μ½˜μ†” 창을 λ§‰λŠ” 것이 기술적으둜 μ™„λ²½ν•œ 방법은 μ•„λ‹ˆλΌλŠ” μ μž…λ‹ˆλ‹€. μ‹€μ œλ‘œ, μ–΄λŠ μ •λ„λŠ” 뚫릴 수 μžˆμœΌλ―€λ‘œ, 이 κΈ°λŠ₯은 보쑰적인 μˆ˜λ‹¨μœΌλ‘œλ§Œ ν™œμš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

μ½˜μ†” μ°½ 차단 μ½”λ“œμ˜ μ‚½μž… μœ„μΉ˜μ™€ 예제

Stack Overflow와 같은 μ‚¬μ΄νŠΈμ—λŠ” λ§Žμ€ μ½˜μ†” μ°½ 차단 μ½”λ“œκ°€ μ‘΄μž¬ν•˜μ§€λ§Œ, λΈŒλΌμš°μ €μ˜ μ—…λ°μ΄νŠΈλ‘œ 인해 λŒ€λΆ€λΆ„μ˜ μ½”λ“œκ°€ 무λ ₯ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μƒν™©μ—μ„œ Ukjin Yang κ°œλ°œμžκ°€ λ§Œλ“  μ½”λ“œκ°€ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ½”λ“œλ₯Ό ν™œμš©ν•˜μ—¬ 개발자 도ꡬ μ½˜μ†” 창이 열릴 λ•Œ νŠΉμ • μ‚¬μ΄νŠΈλ‘œ μ΄λ™ν•˜λŠ” κΈ°λŠ₯을 μΆ”κ°€ν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

ν‹°μŠ€ν† λ¦¬ μ‚¬μš©μžμ˜ 경우, μŠ€ν‚¨ νŽΈμ§‘μ— λŒ€ν•œ 기초 지식이 ν•„μš”ν•©λ‹ˆλ‹€. 이에 λŒ€ν•œ μ •λ³΄λŠ” seons-dev.tistory.comμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ½˜μ†” μ°½ 차단 μ½”λ“œλ₯Ό HTML λ¬Έμ„œμ˜ </body> νƒœκ·Έ λ°”λ‘œ μœ„μ— μ‚½μž…ν•˜λ©΄ λ©λ‹ˆλ‹€:

<html>
  <body>
    <!-- 여기에 μ½”λ“œ μΆ”κ°€ -->
  </body>
</html>

μ½˜μ†” μ°½ 차단 슀크립트 예제

λ‹€μŒμ€ μ½˜μ†” μ°½ 차단을 μœ„ν•œ JavaScript 슀크립트의 κΈ°λ³Έ κ΅¬μ‘°μž…λ‹ˆλ‹€:

<script>
!function() {
  function detectDevTool(allow) {
    if(isNaN(+allow)) allow = 100;
    var start = +new Date();
    debugger;
    var end = +new Date();
    if(isNaN(start) || isNaN(end) || end - start > allow) {
      // 여기에 개발자 도ꡬ 감지 μ‹œ μ‹€ν–‰ν•  μ½”λ“œ μ‚½μž…
    }
  }
  if(window.attachEvent) {
    if (document.readyState === "complete" || document.readyState === "interactive") {
      detectDevTool();
      window.attachEvent('onresize', detectDevTool);
      window.attachEvent('onmousemove', detectDevTool);
      window.attachEvent('onfocus', detectDevTool);
      window.attachEvent('onblur', detectDevTool);
    } else {
      setTimeout(argument.callee, 0);
    }
  } else {
    window.addEventListener('load', detectDevTool);
    window.addEventListener('resize', detectDevTool);
    window.addEventListener('mousemove', detectDevTool);
    window.addEventListener('focus', detectDevTool);
    window.addEventListener('blur', detectDevTool);
  }
}();
</script>

νŠΉμ • κΈ°λŠ₯ μΆ”κ°€ν•˜κΈ°

  1. Alert κ²½κ³  λ©”μ‹œμ§€:
    개발자 도ꡬ가 감지될 λ•Œ κ²½κ³  λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•˜λ €λ©΄, μ•„λž˜ μ½”λ“œλ₯Ό 주석 μ²˜λ¦¬ν•œ 뢀뢄에 μ‚½μž…ν•©λ‹ˆλ‹€:
  2. alert('개발자 도ꡬ가 κ°μ§€λ˜μ—ˆμŠ΅λ‹ˆλ‹€!');
  3. νŠΉμ • μ‚¬μ΄νŠΈλ‘œ 이동:
    νŠΉμ • μ‚¬μ΄νŠΈλ‘œ λ¦¬λ””λ ‰μ…˜ν•˜λ €λ©΄, λ‹€μŒκ³Ό 같은 μ½”λ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€:
  4. document.location.href="https://www.tistory.com/";
  5. μ—¬λŸ¬ 이벀트 μΆ”κ°€:
    κ²½κ³  λ©”μ‹œμ§€μ™€ μ‚¬μ΄νŠΈ λ¦¬λ””λ ‰μ…˜μ„ λ™μ‹œμ— μ μš©ν•˜λ €λ©΄, λ‹€μŒκ³Ό 같이 κ΅¬μ„±ν•©λ‹ˆλ‹€:
  6. alert('개발자 도ꡬ가 κ°μ§€λ˜μ—ˆμŠ΅λ‹ˆλ‹€!'); document.location.href="https://www.tistory.com/";

κ²°κ³Ό 확인

이제 μ›Ήμ‚¬μ΄νŠΈμ—μ„œ μ½˜μ†” 창을 μ—΄λ©΄, 디버깅이 μΌμ‹œ μ •μ§€λ˜κ³ , μΌμ‹œ μ •μ§€λ₯Ό ν•΄μ œν•˜κ±°λ‚˜ μ½˜μ†” 창을 λ‹«λŠ” μˆœκ°„ κ²½κ³  λ©”μ‹œμ§€κ°€ λ‚˜νƒ€λ‚˜κ±°λ‚˜ μ§€μ •ν•œ μ‚¬μ΄νŠΈλ‘œ μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 방법은 개발자 λ„κ΅¬μ˜ μ‚¬μš©μ„ μ™„μ „νžˆ 막을 μˆ˜λŠ” μ—†μ§€λ§Œ, μ‚¬μš©μžμ—κ²Œ κ²½κ³ λ₯Ό μ£Όκ±°λ‚˜ λ¦¬λ””λ ‰μ…˜μ„ 톡해 일정 λΆ€λΆ„ λ³΄μ•ˆμ„ κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΅œμ’…μ μΈ λ³΄μ•ˆμ€ μ„œλ²„ μΈ‘ μ‘°μΉ˜μ™€ ν•¨κ»˜ 이루어져야 ν•©λ‹ˆλ‹€.

λ°˜μ‘ν˜•

λŒ“κΈ€