λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
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/";

    κ²°κ³Ό 확인

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

    λ°˜μ‘ν˜•

    λŒ“κΈ€