[security] 실용적인 비 이미지 기반 보안 문자 접근 방식?

스택 오버플 로에 보안 문자 지원을 추가 할 것 같습니다 . 이는 봇, 스패머 및 기타 악의적 인 스크립트 활동을 방지하는 데 필요합니다. 우리는 인간이 여기에 물건을 게시하거나 편집하기를 원합니다!

첫 번째 방어선으로 JavaScript (jQuery) 보안 문자를 사용합니다.

http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs

이 방법의 장점은 대부분의 사람들에게 보안 문자가 표시되지 않는다는 것입니다!

그러나 JavaScript를 사용하지 않는 사람들에게는 여전히 폴 백이 필요하며 이것이 까다로운 곳입니다.

재사용 할 수있는 ASP.NET에 대한 기존 보안 문자 컨트롤을 작성했습니다 .

보안 문자 이미지

그러나 각 요청마다 서버에서 이러한 모든 이미지를 만드는 오버 헤드를 피하기 위해 텍스트를 사용하는 것이 좋습니다.

나는 이런 것들을 보았다 ..

  • ASCII 텍스트 보안 문자 : \/\/(_)\/\/
  • 수학 퍼즐 : 7 빼기 3 곱하기 2는 무엇입니까?
  • 사소한 질문 : 어떤 맛, 두꺼비 또는 아이스 캔디?

어쩌면 나는 여기서 풍차를 기울이고 있지만 <noscript>가능하면 리소스를 많이 사용하지 않는 비 이미지 기반 호환 보안 문자를 원합니다 .

아이디어?



답변

내가 개발 하고 완벽하게 작동하는 것처럼 보이는 방법은 (아마도 당신처럼 많은 댓글 스팸을 얻지 못하더라도) 숨겨진 필드를 가지고 가짜 값으로 채우는 것입니다.

<input type="hidden" name="antispam" value="lalalala" />

그런 다음 페이지가로드 된 시간 (초)으로 초당 값을 업데이트하는 JavaScript 조각이 있습니다.

var antiSpam = function() {
        if (document.getElementById("antiSpam")) {
                a = document.getElementById("antiSpam");
                if (isNaN(a.value) == true) {
                        a.value = 0;
                } else {
                        a.value = parseInt(a.value) + 1;
                }
        }
        setTimeout("antiSpam()", 1000);
}

antiSpam();

그런 다음 양식을 제출할 때 안티 스팸 값이 여전히 “lalalala”이면 스팸으로 표시합니다. 안티 스팸 값이 정수이면 10 (초) 이상인지 확인합니다. 10 미만이면 스팸으로 표시하고 10 이상이면 통과시킵니다.

If AntiSpam = A Integer
    If AntiSpam >= 10
        Comment = Approved
    Else
        Comment = Spam
Else
    Comment = Spam

이론은 :

  • 스팸 봇은 JavaScript를 지원하지 않으며 보이는 내용을 제출합니다.
  • 봇이 JavaScript를 지원하면 즉시 양식을 제출합니다.
  • 댓글 작성자는 게시하기 전에 적어도 일부 페이지를 읽었습니다.

이 방법의 단점은 JavaScript가 필요하다는 것입니다. JavaScript를 사용하지 않으면 주석이 스팸으로 표시되지만 스팸으로 표시된 주석을 검토하므로 문제가되지 않습니다.

의견에 대한 답변

@MrAnalogy : 서버 측 접근 방식은 상당히 좋은 생각이며 JavaScript에서 수행하는 것과 동일합니다. 좋은 전화.

@AviD :이 방법은 블로그에서 언급 한 것처럼 직접 공격을 받기 쉽다는 것을 알고 있습니다. 그러나 일반적인 스팸 봇은 맹목적으로 찾을 수있는 양식에 맹목적으로 제출합니다.


답변


답변

내가 빠진 것이 아니라면 모든 작업이 외부에서 수행되므로 reCAPTCHA 를 사용하는 것이 잘못되었습니다 .

그냥 생각이야


답변

이 방법의 장점은 대부분의 사람들에게 보안 문자가 표시되지 않는다는 것입니다!

나는이 아이디어를 좋아한다. 우리가 rep 시스템에 연결할 수있는 방법이 없는가? 내 말은, +100 회답을 가진 사람은 누구나 인간 일 가능성이 높습니다. 따라서 담당자가 있으면 보안 문자 측면에서 아무 것도하지 않아도됩니다.

그런 다음 그렇지 않은 경우 보내면 100 개에 도달하는 게시물이 많지 않으며 커뮤니티에서 공격적인 태그로 스팸을 보내는 사람이있을 경우 즉시 “스팸보고”링크를 추가하지 마십시오. 200만큼 다운 모드가 되나요? 스팸봇 업적의 잠금을 해제하십시오.

편집 : 나는 또한 이미지가 아닌 보안 문자에 대한 수학 아이디어를 좋아한다고 덧붙여 야합니다. 아니면 단순한 수수께끼 형 일 수도 있습니다. 게시를 더욱 재미있게 만들 수 있습니다 ^ _ ^


답변

약 무엇 팟 보안 문자 ?


답변

항상 최악의 보안 문자를 피하십시오 .

퀴즈는 괜찮지 만 각각을 작성해야합니다 🙁

누군가 가 써야 할 것입니다.

ReCaptcha가 단어를 인쇄하는 것과 같은 방식으로 사소한 질문을 할 수 있습니다. 그것은 두 단어를 제공하는데, 그중 하나는 대답을 알고 있고 다른 하나는 그렇지 않습니다-두 번째 단어에 충분한 대답을 한 후에는 그에 대한 답도 알게됩니다. 두 가지 사소한 질문을하십시오.

여자는 물고기가 필요한 남자를 필요로 하는가?

오렌지 오렌지 오렌지. 녹색을 입력하십시오.

물론, 이것은 타이머 또는 계산 된 비밀과 같은 다른 기술과 결합 될 필요가있을 수 있습니다. 질문을 순환 / 중지해야하므로 질문을 계속 제공하려면 다음을 추가 할 수 있습니다.

분명한 질문을 입력하십시오.

답이 필요하지 않습니다. 다른 사람들이 당신을 위해 그것을 알아낼 것입니다. “asdf ejflf asl; jf ei; fil; asfas”와 같이 질문을 “너무 어렵다”로 표시해야 할 수도 있습니다.

이제 StackOverflow 게임 봇을 실행하는 사람을 느리게하려면 질문을 IP 주소로 교체해야합니다. 따라서 모든 질문이 다 소진 될 때까지 동일한 IP 주소가 동일한 질문을받지 않습니다 . 이렇게하면 알려진 질문의 사전이 느려져 봇의 인간 소유자가 모든 사소한 질문에 대답하게됩니다.


답변

나는 친구의 사이트에서 이것을 한 번 보았다. 그는 그것을 20 달러에 팔고있다. ASCII 아트입니다!

http://thephppro.com/products/captcha/

  .oooooo.         oooooooo
 d8P'  `Y8b       dP"""""""
888      888     d88888b.
888      888 V       `Y88b '
888      888           ]88
`88b    d88'     o.   .88P
 `Y8bood8P'      `8bd88P'