대체 봇(C#)

작성자: Christian Wenz

PDF 다운로드

자동화된 봇 석고 웹로그 및 스팸이 있는 기타 웹 사이트, 사용자 상호 작용 없이 메모 양식 제출. ASP.NET AJAX 컨트롤 도구 키트의 NoBot 컨트롤은 이러한 봇과 싸우는 데 도움이 될 수 있습니다.

개요

자동화된 봇 석고 웹로그 및 스팸이 있는 기타 웹 사이트, 사용자 상호 작용 없이 메모 양식 제출. ASP.NET AJAX 컨트롤 도구 키트의 NoBot 컨트롤은 이러한 봇과 싸우는 데 도움이 될 수 있습니다.

단계

봇을 무찌르기 위한 일반적인 방법 중 하나는 CAPTCHA 완전히 자동화된 퍼블릭 튜링 테스트를 사용하여 컴퓨터와 인간을 구분하는 것입니다. 튜링 테스트는 원래 누군가가 통신 파트너가 인간인지 기계인지 결정해야 하는 테스트였습니다. 웹에서 CAPTCHA는 일반적으로 왜곡된 문자가 있는 이미지로 구성됩니다. OCR 알고리즘은 실패하는 반면, 인간만 이미지의 문자를 읽을 수 있다는 것입니다.

이 접근 방식에는 몇 가지 장점과 단점이 있지만 이에 대한 논의는 이 자습서의 scope 넘어선 것입니다. 그러나 비슷한 접근 방식을 NoBot제공하는 ASP.NET AJAX 컨트롤 도구 키트에 컨트롤이 있습니다. CAPTCHA보다 극복하기가 쉽지만, 대부분의 스팸 시도가 무 NoBot 너질 경우 성공으로 간주되는 블로그와 같은 웹 사이트에서 사용하기가 매우 쉽고 요금이 매우 높습니다.

NoBot 는 이러한 조건 중 하나 이상이 충족되는 경우 현재 ASP.NET 웹 양식의 포스트백을 가로채는 것입니다.

  • 브라우저가 JavaScript 퍼즐을 해결하지 못합니다(JavaScript가 비활성화된 경우 instance 경우).
  • 사용자가 양식을 빠르게 제출했습니다.
  • 클라이언트 IP 주소가 특정 기간 동안 양식을 너무 자주 제출했습니다.

이러한 조건에 대해 검사 위해 컨트롤에는 NoBot 이러한 특성이 필요합니다(모두 선택 사항).

  • ResponseMinimumDelaySeconds 포스트백 사이의 최소 시간(초)
  • CutoffWindowSeconds 한 IP의 포스트백이 측정값인 시간 간격의 길이
  • CutoffMaximumInstances 시간 간격당 최대 시간(초)

다음 태그는 포스트백 사이에 최소 2초가 경과하고 30초 간격 내에 5개 이하의 포스트백이 있어야 합니다.

<ajaxToolkit:NoBot ID="nb" runat="server" CutoffMaximumInstances="5"
 CutoffWindowSeconds="30" ResponseMinimumDelaySeconds="2" />

그런 다음, ASP.NET AJAX 라이브러리가 로드되고 컨트롤 도구 키트를 사용할 수 있도록 페이지에 를 포함 ScriptManager 해야 합니다.

<asp:ScriptManager ID="asm" runat="server" />

대부분의 검사는 NoBot 서버 쪽에서 수행되므로 이러한 유효성 검사의 결과를 검사 합니다. 이 작업은 의 IsValid() 메서드를 호출NoBot하여 수행할 수 있습니다. 형식인 하나의 인수( out 매개 변수/ByRef 매개 변수)가 NoBotState있습니다. 문자열 표현에는 검사 실패하고 Valid 그렇지 않은 경우의 이유가 포함됩니다. 다음 코드는 의 결과에 따라 NoBot메시지를 출력합니다.

<script runat="server">
 void Page_Load()
 {
 if (Page.IsPostBack)
 {
 NoBotState state;
 if (!nb.IsValid(out state))
 {
 Label1.Text = "Data refused (" 
 + HttpUtility.HtmlEncode(state.ToString()) + ")";
 }
 else
 {
 Label1.Text = "Data entered.";
 }
 }
 }
</script>

마지막으로 제출할 양식과 메시지를 출력하는 레이블 요소가 필요하며 완료되었습니다.

Your comment:
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"/><br />
<input type="submit" id="Submit1" runat="server" value="Submit Form" /><br />
<asp:Label ID="Label1" runat="server" />

이 스크립트를 실행하고 JavaScript를 비활성화하거나 처음 2초 이내에 양식을 제출하거나 30초 이내에 양식을 7번 제출하면 오류 메시지가 표시됩니다. 그러나 사용자의 약 90-95%만이 JavaScript를 활성화했으므로 사용자의 5-10%가 테스트에 실패 NoBot하므로 이 컨트롤을 현명하게 사용합니다.

이 오류 메시지는 봇에 의해 발생할 수 있습니다.

이 오류 메시지는 봇에 의해 발생할 수 있습니다(전체 크기 이미지를 보려면 클릭).