대체 봇(C#)Fighting Bots (C#)

Christian Wenzby Christian Wenz

코드 다운로드 또는 PDF 다운로드Download Code or Download PDF

자동화 된 bot plaster 웹 로그 및 기타 웹 사이트를 사용 하 여 사용자 개입 없이 주석 양식을 제출 합니다.Automated bots plaster weblogs and other websites with spam, submitting comment forms without any user interaction. ASP.NET AJAX 컨트롤 도구 키트의 NoBot 컨트롤은 이러한 봇을 지 원하는 데 도움이 될 수 있습니다.The NoBot control in the ASP.NET AJAX Control Toolkit can help fight those bots.

개요Overview

자동화 된 bot plaster 웹 로그 및 기타 웹 사이트를 사용 하 여 사용자 개입 없이 주석 양식을 제출 합니다.Automated bots plaster weblogs and other websites with spam, submitting comment forms without any user interaction. ASP.NET AJAX 컨트롤 도구 키트의 NoBot 컨트롤은 이러한 봇을 지 원하는 데 도움이 될 수 있습니다.The NoBot control in the ASP.NET AJAX Control Toolkit can help fight those bots.

단계Steps

Bot 봇의 일반적인 방법 중 하나는 CAPTCHAs 완전히 자동화 된 Public Turing test를 사용 하 여 컴퓨터와 사람을 분리 하는 것입니다.One common approach to defeat bots is to use CAPTCHAs Completely Automated Public Turing test to tell Computers and Humans Apart. Turing 테스트는 원래 통신 파트너가 사람이 나 컴퓨터 인지 여부를 결정 해야 하는 테스트 였습니다.A Turing test was originally a test where someone needed to decide whether a communication partner is a human or a machine. 웹에서 CAPTCHA는 일반적으로 일부 문자가 비틀어 진 이미지로 구성 됩니다.In the web, a CAPTCHA usually consists of an image with some distorted letters on it. 그 이유는 사람이 이미지의 문자를 읽을 수 있는 반면 OCR 알고리즘은 실패 한다는 것입니다.The idea is that only a human can read the letters on the image, whereas OCR algorithms will fail.

이 방법에는 몇 가지 장점과 단점이 있지만이에 대 한 설명은이 자습서의 범위를 벗어나는 것입니다.There are several advantages and disadvantages to this approach, but a discussion of this is beyond the scope of this tutorial. 그러나 ASP.NET AJAX 컨트롤 도구 키트에는 NoBot유사한 방법을 제공 하는 컨트롤이 있습니다.There is however a control in the ASP.NET AJAX Control Toolkit which provides a similar approach: NoBot. CAPTCHA 보다 더 쉽게 극복할 수 있습니다. 그러나 대부분의 스팸 시도 NoBot를 방해 하는 경우 성공으로 간주 되는 블로그 등의 웹 사이트에서는 사용 하기 쉽고 정의 요금를 사용 하는 것이 좋습니다.It is easier to overcome than a CAPTCHA, but is very easy to use and fares extremely well on websites like blogs where it is considered a success if most spam attempts are defeated, which the NoBot control can do.

다음 조건 중 하나 이상이 충족 되는 경우 NoBot는 현재 ASP.NET 웹 폼의 포스트백을 가로챕니다.NoBot intercepts the postback of the current ASP.NET web form if at least one of these conditions is met:

  • 브라우저에서 javascript 퍼즐을 해결 하지 못했습니다 (예를 들어 JavaScript가 비활성화 된 경우).The browser fails to solve a JavaScript puzzle (for instance when JavaScript is deactivated)
  • 사용자가 폼을 빠르게 제출 함The user submitted the form to fast
  • 클라이언트 IP 주소가 특정 기간 내에 너무 자주 양식을 전송 했습니다.The client IP address submitted the form too often in a certain period of time.

이러한 조건을 확인 하기 위해 NoBot 컨트롤에는 다음과 같은 특성이 필요 합니다 (모두 선택 사항).In order to check for these conditions, the NoBot control requires these attributes (all of them optional):

  • 다시 게시 사이의 최소 시간 (초)을 ResponseMinimumDelaySeconds 합니다.ResponseMinimumDelaySeconds minimum amount of seconds between postbacks
  • 한 IP의 다시 게시를 측정 하는 CutoffWindowSeconds 시간 간격입니다.CutoffWindowSeconds length of time interval in which postbacks from one IP are measures
  • 시간 간격 당 최대 시간 (초)을 CutoffMaximumInstances 합니다.CutoffMaximumInstances maximum amount of seconds per time interval

다음 태그는 다시 게시 사이에 최소 2 초가 경과 하 고 30 초 간격 내에 다시 게시를 5 개만 수행 하도록 요구 합니다.The following markup demands that at least two seconds elapse between postbacks and that there are only five postbacks or less within a 30 seconds interval:

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

그런 다음 ASP.NET AJAX 라이브러리가 로드 되 고 Control Toolkit를 사용할 수 있도록 페이지에 ScriptManager를 포함 해야 합니다.Then as usual make sure to include the ScriptManager in the page so that the ASP.NET AJAX library is loaded and the Control Toolkit can be used:

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

서버 쪽에서 대부분의 검사 NoBot 수행 되므로 이러한 유효성 검사의 결과를 확인 해야 합니다.Since most of the checks NoBot is doing occur on the server side, you need to check the result of these validations. NoBotIsValid() 메서드를 호출 하 여이 작업을 수행할 수 있습니다.This can be done by calling NoBot's IsValid() method. NoBotState형식의 인수 하나 (out 매개 변수/ByRef 매개 변수)가 있습니다.It has one argument (as an out parameter/ByRef parameter) which is of type NoBotState. 해당 문자열 표현에는 확인이 실패 한 이유가 포함 되 고, 그렇지 않으면 Valid 있습니다.Its string representation contains the reason when the check fails and Valid otherwise. 다음 코드는 NoBot결과에 따라 메시지를 출력 합니다.The following code outputs a message according to NoBot's result:

<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>

마지막으로 제출할 폼과 메시지를 출력 하는 label 요소가 필요 합니다.Finally, you need a form to submit and a label element to output the message, and you are done!

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 번 전송 하면 오류 메시지가 표시 됩니다.When you run this script and deactivate JavaScript or submit the form within the first two seconds or submit the form seven times within thirty seconds, you will get an error message. 그러나이 컨트롤은 약 90-95%의 사용자만 JavaScript를 활성화 했기 때문에이 컨트롤을 사용 하는 것이 좋습니다. 따라서 5-10%의 사용자는 NoBot테스트에 실패 합니다.However use this control wisely, since only about 90-95% of users have JavaScript activated, therefore 5-10% of users will fail NoBot's test.

이 오류 메시지 봇에 의해 발생 했을 수 있습니다.This error message could have been caused by a bot

이 오류 메시지는 bot로 인해 발생 했을 수 있습니다 (전체 크기 이미지를 보려면 클릭).This error message could have been caused by a bot (Click to view full-size image)