스팸 발송자로부터 양식을 보호하기 위해 간단한 허니팟을 만드는 방법

이 포스트가 짧고 유용할 것 같아요. 여기의 목표는 웹사이트 양식을 공격할 수 있는 스패머와 봇을 차단하는 데 도움이 되는 간단한 기술을 시연하는 것입니다. 이것은 스팸 방지의 추가 계층이지 주요 리소스가 아닙니다. reCaptcha 등과 같은 다른 도구와 함께 사용하십시오. 단순하기 때문에 이 양식 패턴을 따르는 것이 좋습니다. 따라서 코드를 작성합니다.

다음과 같은 양식 구조가 있다고 상상해보십시오.

<form id="myformid" action="/myformaction">
    <label for="name">Your Name</label>
    <input type="text" id="name" name="name" placeholder="Your name here" required maxlength="100">
    <label for="email">Your E-mail</label>
    <input type="email" id="email" name="email" placeholder="Your e-mail here" required>
</form>


대부분의 단순한 봇은 레이블 일반 이름, 입력 ID, 입력 공통 속성, 필수 필드 등과 같은 일반적인 패턴을 검색하고 봇이 귀하와 귀하의 고객, 스팸 또는 일부를 보내기 위해 가짜 정보로 봇을 채울 것입니다. 악성 코드. 검색하는 가장 일반적인 필드는 "이메일, 전화, 주소"와 같은 이름의 필드입니다...

따라서 이를 속이고 양식 구조를 다음과 같이 변경하여 간단한 허니팟을 만들 수 있습니다.


<style>
    .ohnohoney{
        opacity: 0;
        position: absolute;
        top: 0;
        left: 0;
        height: 0;
        width: 0;
        z-index: -1;
    }
</style>

<form id="myformid" action="/myformaction">
    <!-- Real fields -->
    <label for="nameaksljf">Your Name</label>
    <input type="text" id="nameksljf" name="nameksljf" placeholder="Your name here" required maxlength="100">
    <label for="emaillkjkl">Your E-mail</label>
    <input type="text" id="emaillkjkl" name="emaillkjkl" placeholder="Your e-mail here" required>
    <!-- H o n e y p o t -->
    <label class="ohnohoney" for="name"></label>
    <input class="ohnohoney" autocomplete="off" type="text" id="name" name="name" placeholder="Your name here">
    <label class="ohnohoney" for="email"></label>
    <input class="ohnohoney" autocomplete="off" type="email" id="email" name="email" placeholder="Your e-mail here">
</form>


변경 사항을 살펴보겠습니다.

먼저 물건을 숨기는 클래스를 만들었습니다. .ohnohoney 클래스. 지금 몇 가지를 지적하는 것이 중요합니다.
  • display:none을 사용하지 마십시오. 일부 봇은 display none 필드에 액세스할 수 없고, 다른 봇은 display none 필드를 채우지 않아야 한다는 것을 알고 있습니다. 클래스 이름에 "hidden"을 사용하지 마십시오. 일부 고급 봇은 이를 인식할 수 있습니다.
  • 우리는 "실제 필드"를 만들었습니다. 이것은 보이는 필드와 데이터 측면에서 백엔드와 관련되어야 하는 필드입니다. 이 필드의 ID는 해시로 변경되어야 합니다. 일반적으로 "nameHASH"패턴을 함께 사용합니다. "name-hash"또는 그 변형을 사용하지 마십시오. 간단한 분할은 실제 필드 이름을 노출합니다. 이제 봇은 이 필드가 무엇인지 인식하지 못합니다. 양식에 채워야 하는 필드가 있다는 것만 알고 있습니다. "유형"을 패턴으로 따라야 할 수도 있습니다.
  • "hon e y p o t"필드를 생성하여 스팸 발송자를 식별할 수 있습니다. 중요: 레이블을 비워두고 'ohnohoney' 클래스를 사용하여 모든 가짜 입력을 숨깁니다. 가짜 입력을 가능한 한 가장 단순하고 일반적이며 매력적으로 만드십시오. "이메일, 전화, 이름 등"과 같이 간단하고 일반적인 이름을 사용하고 자동 완성을 비활성화하고(따라서 브라우저가 채우지 않음) 규칙을 비활성화하되 유형은 유지합니다.

  • 이제 양식에는 두 부분이 있습니다. 입력이 해시와 이상한 이름으로 보호되는 실제 필드(원하는 대로 해시 또는 이상한 이름을 구현할 수 있음). 그리고 우리의 허니팟("허니팟"이라고 쓰지 말고, 인식을 피하기 위해 글자를 나누는 것을 선호함). 이제 백엔드에서:
  • "h o n e y p o t"필드가 채워졌는지 확인합니다. 그렇다면 축하합니다. 스팸을 걸러낸 것입니다. 그들 중 대부분은 구별하지 않고 이 모든 필드를 채울 것입니다. 따라서 귀하가 해야 할 일은 "h o n e y p o t"필드가 채워져 있는지 확인하는 것입니다. 그렇다면 스팸입니다. 원하는 경우 클라이언트에서 이 검사를 수행할 수 있습니다. Ajax 형식의 경우 서버 리소스를 사용하여 불필요한 데이터를 계산하는 것을 방지할 수 있습니다(그러나 어쨌든 백엔드 유효성 검사는 유지). 스팸을 받으면 데이터를 보내지 말고 원하는 대로 하십시오. "이메일, 전화 등"과 같은 이름이 백엔드에 중요한 경우 배열을 사용하여 이름을 전사하십시오.

  • 다음은 이 기술을 간단하게 구현한 단일 파일 저장소입니다.
    https://github.com/felippe-regazio/php-honeypot-example

    기억하십시오: 이것은 단순한 방법으로 공격을 방지하기 위한 단순한 계층일 뿐이며 일부 기술은 이러한 패턴도 식별할 수 있으므로 이에 대항할 수 있는 모든 무기를 사용하십시오. 하지만 이 간단한 패턴으로 웹페이지에서 스팸을 50% 이상 피할 수 있다고 생각합니다.

    좋은 웹페이지 즐겨찾기