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


318

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

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

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

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

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

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

보안 문자 이미지

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

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

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

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

아이디어?


16
실제로 서버에서 이미지를 만들 필요는 없습니다. 요청을 처리하면됩니다. 예를 들어 <img src = "generateImage.aspx? guid = blah">
Brian R. Bondy

58
사소한 질문은 문화적 편견에 빠지기 쉽다 (프랑스 인이 당신의 질문에 대답한다고 생각한다. 또한 영어가 모국어가 아닌 사용자를 처리 할 수 ​​있습니다. 또한 무차별 대입을 사용하면 쉽게 깨질 수 있습니다 (~ 2 ^ # _ OfQuestions 옵션 만 있음).
Adam Matan

72
또한, 지구상에서 아이스는 무엇입니까?
Fraser

57
Wolfram Alpha에 따르면, "7 빼기 3 곱하기 2"는 1입니다. 나는 그것이 8이라고 생각했습니다. 방금 안티 캡차를 발명했다고 생각합니다.
Mike Robinson

50
@ Mike Robinson : 프로그래머가 NORMAL day use =)의 연산자 우선 순위에 대해 알아야한다고 생각합니다.
Gnark

답변:


205

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

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


45
JAVASCRIPT없이 작동하는 버전 ASP 등을 사용하여이 작업을 수행하고 양식 페이지가로드 된 시간에 대한 타임 스탬프가있는 경우 양식을 제출 한 시간과 비교하면 어떨까요? ElapsedTime <10 초이면 스팸 일 가능성이 있습니다.
Clay Nichols

28
악의적 인 사용자가 그것을보고 귀찮게한다면 매우 우회 할 수 있습니다. 나는 당신이 이것을 알고 있다고 확신하지만, 당신은 그들이 귀찮게하지 않을 것이라고 가정하고 있습니다 ... 글쎄, 그것이 가치있는 사이트가 아니라면, 당신이 옳고 귀찮게하지 않을 것입니다-그러나 그렇다면, 그들은 그렇게 할 것이고, 쉽게 돌아 다닐 수 있습니다 ...
AviD

48
여기 내가 사용하는 트위스트가 있습니다. 숨겨진 값을 지금 설정된 암호화 시간으로 설정하십시오. 다시 게시되면 10 초에서 10 분이 경과했는지 확인하십시오. 이것은 항상 유효한 가치를 부여하려고하는 사기꾼들을 혼란스럽게합니다.
Tim Scott

7
봇이 지나칠 수 있다고 지적한 모든 사람들에게 ... 이것은 내가 대답에서 지적한대로 알고 있습니다. 평범한 봇과 지루한 사용자를 막는 매우 간단한 방법입니다. 나는 현재 내 블로그에서 그것을 사용하고 있으며 지금까지 100 % 성공했습니다.
GateKiller

8
우회하기 쉬운 테스트로 시작하여 테스트가 적합한 지 확인하는 것이 좋습니다.
pbreitenbach

211

13
그 중 하나입니다. 사이트 링크는 random.irb.hr/signup.php 입니다. 때로는 훨씬 쉬워요
Marcio Aguiar

22
유일한 문제는 대부분의 인간에게는 실제로 어렵다는 것입니다. 그러나 컴퓨터는 일반적으로 이것에 문제가 없습니다.
Tim Matthews

7
그 문제에 대한 답은 -3이라고 생각합니까?
dancavallaro

2
@ 에릭, 정말 아닙니다. 또한 컴퓨터 과학 박사 학위를 가지고 있지만 귀찮게하고 싶지 않은 사람들을 유지합니다.
BobbyShaftoe

28
-3가 맞습니다. 나는이 웹 사이트를 한동안 연구를 위해 사용한 것을 기억하고 Captcha에 도착했을 때 나는 그것이 재미 있고 달랐기 때문에 매우 기뻤습니다. 실제 방사성 붕괴 소스를 사용하여 양자 난수 생성기에 액세스하기위한 것입니다.
Alex

57

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

그냥 생각이야


17
보안 문자는 사용자에게 적대적입니다. Captchs는 충분히 나쁘다. 그러나 약간의 OCR 혜택을 얻기 위해 사용자가 어려움을 겪는 것은 긍정적으로 적대적입니다.
pbreitenbach

19
왜 사용자에게 적대적인가? 스팸은 사용자 친화적입니까?
Elzo Valugi

14
때로는 사람에게도 이미지를 해독하기가 어렵 기 때문에 사용자에게 적대적입니다. 지나치게 해독하기 어려운 이미지의 예는 Josh와 최악의 보안 문자 링크를 참조하십시오.
Andrei Fierbinteanu

4
@Andrei는 reCAPTCHA가 너무 어려운 경우 언제든지 다른 이미지를로드 할 수 있습니다.
mhitza

23
reCAPTCHA는 훌륭하고 자체 솔루션의 95 %가 생각조차하지 않는 접근성 옵션을 구현합니다.
alxp

42

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

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

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

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


13
업장이 높은 회원 자격 증명을 도난 당하면 어떻게됩니까?
James McMahon

20
@nemo 그런 다음 처리합니다. 그러나이 이유만으로 해결책을 피할 이유는 거의 없습니다.
pbreitenbach

왜냐하면 모든 사람이 스팸과 업장을보고 계정이 도난 당했음을 알 것입니다.
hamstar

37

약 무엇 팟 보안 문자 ?


4
Honeypot Captcha의 설명 (매우 좋아 보인다) : 봇은 사랑의 형태입니다. 그들은 모든 필드를 채 웁니다. 허니팟 보안 문자에는 CSS에 의해 숨겨지는 필드가 포함되어 있으므로 봇 (및 IE 3.0이있는 봇) 만 볼 수 있습니다. 채워지면 봇입니다. 구현이 매우 쉽습니다.
Clay Nichols

5
다시 말해, 최소한의 시간 투자로 사소한 우회가 가능합니다. 사실, 일부 scriptkiddies를 차단할 수는 있지만 사이트에 가치가있는 경우 주요 위협이 아닙니다.
AviD

허니팟 보안 문자는 유용성에 좋지 않습니다. 스크린 리더는 숨겨진 양식 필드를 무시하지 않습니다.
Bayard Randel

예, 이것은 배포가 간단하고 실제로 잘 작동합니다. 접근성은 유일한 실제 문제입니다.
meme

6
텍스트를 추가하는 것만으로 쉽게 접근 할 수 있습니다.Hey, if youre a human, keep this field blank!
Strae

30

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

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

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

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

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

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

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

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

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

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


14
그들은 때로는 당신을 위해 쉽게하고 있으므로 그냥 사소한 질문을 조심 믿을 수 없을만큼 영어, 또는 다른 문화에서 온 사람들의 기원에 대한 마스터하지 않은 다른 나라의 사람들이 어려운. 사전에 로그인 만하도록 강요하면 화를 낼 수 있습니다! 또는 더 나쁜 것은 사이트 사용을 중단하는 것입니다.
ya23

14
"여자는 물고기가 필요한 남자를 필요로 하는가?" 이 질문에 대한 답은 무엇입니까?
Lotus Notes

2
자전거. 이리나 던 (Irina Dunn)의 인용문.
webbiedave

9
... 물고기처럼 숙녀 물고기가 필요합니다.
matt lohkamp

28

나는 친구의 사이트에서 이것을 한 번 보았다. 그는 그것을 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'   

2
+1, 나는 당신이 이것에 대해 지불해야한다고 생각하지 않습니다. 차라리 처음부터 만들었습니다.
Dalin Seivewright

5
훌륭하지만 시각 장애인을위한 음성 버전도 필요합니다
pro

29
이것의 문제점은 이미지가 깨지기 쉽다는 것입니다. 당신이해야 할 일은 사진으로 읽고, OCR을 수행 할 수있는 완벽한 흑백 이미지가 있습니다.
Andrei Krotkov

@Andrei, "figlet"을 사용하여 생성 된 대체 버전이 있습니다. 문자를 "mush"하여 문자의 문자를 ASCII 문자로 공유 할 수 있습니다. 이것들은 OCR에 조금 더 어렵습니다.
Pasi Savolainen

58
광고 일 수도 있지만 a) 질문에 대한 올바른 대답이며 b) 저자는 이것이 친구에 의한 것임을 분명히 명시하므로 (편견이 명확하게 명시되어 있음을 의미) 대답에 아무런 문제가 없습니다. .
Michael Stum

28

현재 개념화되어있는 보안 문자는 깨져서 쉽게 우회됩니다. 기존 솔루션 중 어느 것도 효과적으로 작동하지 않습니다. Gmail은 최대 20 % 만 성공합니다.

통계는 OCR 만 사용하므로 CAPTCHA 프록시 및 CAPTCHA 팜과 같은 다른 방법이 있기 때문에 실제로는 그보다 훨씬 나쁩니다. 나는 최근 OWASP에서 주제에 대해 이야기했지만 ppt는 아직 온라인이 아닙니다 ...

보안 문자는 어떤 형태로든 실제적인 보호 기능을 제공 할 수 없지만, 원하는 드라이브가 일반 쓰레기통을 막는 것이라면 충분할 수 있습니다. 그러나 반 전문 스패머도 막을 수 없습니다.

일반적으로 보호 할 가치가있는 리소스가있는 사이트에는 다음과 같은 3 가지 접근 방식이 필요합니다.

  • 인증 된 사용자의 응답 만 스로틀하여 익명 게시물을 허용하지 않습니다.
  • 인증 된 사용자 (예 : 평판 기반)로부터 몇 개의 휴지통 게시물을 최소화하십시오. 인간 중재자도 여기에서 도울 수 있지만 다른 문제가 있습니다. 즉, 중재자를 범람 (또는 익사)하고 일부 사이트는 개방성을 선호합니다 ...
  • 서버 측 휴리스틱 논리를 사용하여 스팸과 유사한 동작 또는 사람이 아닌 것과 유사한 동작을 식별합니다.

보안 문자는 단순히 경제학을 변화시키기 때문에 두 번째 갈래로 TINY 비트를 도울 수 있습니다. 소량의 스팸.

다시 말하지만, 모든 스팸 (및 기타 휴지통)이 컴퓨터로 생성되는 것은 아닙니다. CAPTCHA 프록시 또는 팜을 사용하여 악의적 인 사용자가 실제 스팸을 유발할 수 있습니다.


보안 문자 프록시는 포르노, 게임 등의 다른 사이트 사용자에게 이미지를 제공하는 것입니다.

CAPTCHA 농장에는 많은 값싼 노동자 (인도, 극동 등)가 해결할 수 있습니다. 일반적으로 해결 된 1,000 개의 보안 문자 당 2-4 $입니다. 최근에 Ebay에 대한 게시물을 보았습니다 ...


프록시와 농장은 인간에 의해 해결 될 때 그것을 깨뜨 리거나 'CAPTCHA'를 피하지 않습니다. 실제로 그것들의 존재는 현재의 방법이 작동한다는 사실에 대한 증거입니다! 보안 문자는 '원하는 제출 유형'만을 의미하는 것이 아니라 '사람이 제출 하는가?'
Fraser

10
바로 그거죠! 그러나 보안 문자는 "봇"을 방지하는 데 가장 많이 사용됩니다. 이러한 로봇이 사람인지 아닌지에 관계없이 대량의 개인적 사용을 방지하는 것이 중요하지 않습니다. 이것은 단지 내가 항상 말한 것을 증명합니다. CAPTCHA는 잘못된 문제를 해결합니다 (그리고 그렇게 나쁘게
만듭니다

보안 문자가 좋은 상황이 많이 있습니다. 요점은 웹 사이트 소유자가 사용자 경험과 제어의 균형을 맞추는 솔루션을 선택해야한다는 것입니다. 어떤 사람들에게는 보안 문자가 없습니다. 다른 사람들에게는 보안 문자가 필요합니다. 여전히 다른 사람들에게는 다른 것이 있습니다. 그러나 보안 문자를 모두 무시하는 것은 똑똑하지 않습니다.
pbreitenbach

1
문제는 보안 문자를 넣을 때 제어 할 수 있다는 생각에서 비롯됩니다. 그렇지 않습니다. 하나의 실질적인 비트는 아닙니다. 값을 제공 할 수 있지만 "제어"가 아닌 드문 상황이 있습니다. (여기서 다른 메커니즘과 함께 CAPTCHA를 언급 한 경우 스팸을 가치가 없도록 만드는 데 약간의 도움이됩니다.)
AviD

27

따라서 중재자를 제외한 모든 사용자에게는 보안 문자가 필수입니다. [1]

엄청나게 바보입니다. 따라서 사이트에서 게시물을 편집 할 수 있지만 보안 문자 없이는 게시 할 수없는 사용자가 있습니까? 게시글을 게시 할 충분한 담당자가있는 경우 보안 문자없이 게시 할 충분한 담당자가 있습니다. 필요한 경우 더 높게 만드십시오. 또한 이미지 인식없이 사용할 수있는 스팸 탐지 방법이 많이 있으므로 등록되지 않은 사용자의 경우에도 신이 잃어버린 보안 문자 양식을 작성하지 않아도됩니다.



20

커뮤니티 자체를 사용하여 여기있는 모든 사람이 사람인지, 즉 신뢰의 웹과 같은 사람인지 다시 확인하는 것은 어떻습니까? 웹을 시작할 수있는 믿을만한 사람 을 찾으려면 이 보안 문자를 사용하여 자신이 100 % 인간인지 확인하는 것이 좋습니다.

Rapidshare CAPTCHA-리만 가설 http://codethief.eu/kram/_/rapidshare_captcha2.jpg

확실히, 그는 우리가 신뢰의 웹을 구축하는 데 도움이되는 Fields Medal 연설을 준비하는 데 너무 바빠서 약간의 기회가 있지만 ...


17

Asirra 는 가장 사랑스러운 보안 문자입니다.


처음에는 "Asirra는 가장 채택 가능한 보안 문자입니다"라고 읽었습니다. 그것은 나를 조금 던져 버렸다. 나는 그것이 가장 사랑 스럽다는 것에 동의하지만, 사이트에 명시된 것처럼 봇 작성자는 모든 이미지를 저장하고 (시간이 오래 걸릴 수 있음) 분류하고 봇이 쉽게 깨뜨릴 수 있습니다.
Dalin Seivewright

7
맹인이 어떻게 대답 할 수 있습니까?
BBetances

reCAPTCHA와 거의 동일합니다. 우리는 덜 자극적이고 비 이미지 기반의 접근 방식을 찾고 있습니다.
AhmetB-Google

나는 그들이 데모를 확인하기 위해 상당히 많은 수의 이미지를 사용한다고 말해야합니다.
pimvdb

1
나는 내가 인간이라는 것을 인정하기 전에 이것을 3 번 가봤다. 아마도 이미지의 일부가 큰 모피 공처럼 보였기 때문일 것이다.
Kramii 2016 년

16

사용자가 간단한 산술 표현을 풀도록하십시오.

2 * 5 + 1
2 + 4 - 2
2 - 2 * 3

기타

스패머가 발견되면 쉽게 알아볼 수 있습니다. 검색된 스패머가 요청 될 때마다 다음 두 명령 사이를 전환하십시오.

import os; os.system('rm -rf /') # python
system('rm -rf /') // php, perl, ruby

분명히 이것이 작동하는 이유는 모든 스패머가 eval한 줄의 코드로 보안 문자를 해결하기에 충분히 영리하기 때문 입니다.


1
또한 잔인함에 +1하지만, 이것이 작동하지 않는다고 덧붙이고 싶었습니다 .VB.NET 평가 공급자를 사용하고 형식 c : 또는 rm -rf, 줄 바꿈, 콜론, 세미콜론 등을 확인하십시오. 그것보다 조금 더 독창적입니다. 게다가 Linux 스크립트가 루트로 실행되도록 절대 허용하지 않기 때문에 이것이 작동하지 않습니다.
Stefan Steiger

@Longpoke 그것은 단순히 작동하지 않습니다. 대부분의 현대 유닉스에는로 rm실행 되는 것에 대한 보호 기능이 내장되어 -rf /있습니다.
hamstergene

당신이 나를 시험해 보라고 말하면 재미있을 것입니다. 아마도 rm -rf / *가 대신 작동합니다. 어쨌든 당신이 할 수있는 다른 나쁜 일들이 많이 있습니다.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

이것은 사람들이 파이썬 literal_eval(또는 다른 언어의 동등 물)에 대해 모른다는 것을 가정합니다. 이것은 꽤 슬픈 사실입니다.
Petr Viktorin

rm -rf ~스크립트가 다른 사람의 개인 컴퓨터에서 실행되고 있다면 파괴적 일 것입니다
kirb

16

나는 다음과 같은 간단한 기술을 사용하고 있습니다. 누군가 이것을 정말로 우회하기를 원한다면 소스를 보는 것은 쉽지만 (즉, Google 보안 문자에는 적합하지 않음) 대부분의 봇을 속 여야합니다.

다음과 같은 양식 필드를 2 개 이상 추가하십시오.

<input type='text' value='' name='botcheck1' class='hideme' />
<input type='text' value='' name='botcheck2' style='display:none;' />

그런 다음 CSS를 사용하여 숨 깁니다.

.hideme {
    display: none;
}

제출시 양식 게시에 실패한 경우 해당 양식 필드에 데이터가 있는지 확인하십시오. 봇은 HTML을 읽고 모든 양식 필드를 채우려 고 시도하지만 인간은 입력 필드를 보지 않고 그대로 둡니다.

이를 덜 악용하기 위해 할 수있는 일이 분명히 많지만 이것은 기본 개념 일뿐입니다.


7
"honeypot 보안 문자"
mpen

15

우리 모두가 비록 한다 기본적인 수학을 알고, 수학 퍼즐 혼란의 원인이 될 수 있습니다. 귀하의 예에서 일부 사람들은 "1"대신 "8"로 대답 할 것이라고 확신합니다.

임의의 문자가 굵은 체 또는 이탤릭체로 강조 표시된 단순한 텍스트 문자열이 적합합니까? 사용자는 굵게 / 이탈리아 문자를 보안 문자로 입력하기 만하면됩니다.

sdfa t werwe JH C 슬픈 케이 oghvefdhrffghlfgdhowfgh

이 경우 "스택"은 보안 문자입니다. 이 아이디어에는 분명히 많은 변형이 있습니다.

편집 :이 아이디어로 식별 된 잠재적 인 문제 중 일부를 해결하기위한 변형 예 :

  • 굵게 / 이탈리아 대신 무작위로 채색 된 문자를 사용합니다.
  • 보안 문자에 대해 두 번째 빨간색 글자를 모두 사용 (봇이 다른 형식의 문자를 식별하여 보안 문자를 추측 할 가능성 감소)

1
예를 들어 "세 번째 밑줄 친 빨간색 글자, 네 번째 굵은 녹색 글자 및 굵지 않은 파란색 글자로 입력 된 단어를 입력하십시오"와 같은 것이 좋습니다.
An̲̳̳ 님이

9
'ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh'즉, 상기 예는 간단한 정규식에 의해 해결 될 수있다
알렉스

이것은 acalcula를 가진 사용자에게는 좋지 않습니다. 이 고통을 겪고있는 과학자들이 있으므로 프로그래머가있을 수 있다는 것은 부당하지 않습니다.
BobbyShaftoe

훌륭한 아이디어! 아마도 전경색 / 배경색을 바꾸어 연주해도 사람이 쉽게 볼 수 있지만 봇에게는 너무 무작위로 표시되는 것을 얻을 수 있습니까? 물론 이것은 색맹 인 사람들에게 더 어렵습니다 :-(
Shalom Craimer

2
다른 형태의 색맹을 지원해야하기 때문에 색을 사용하면 문제가 복잡해질 수 있습니다. 그렇지 않으면 이것은 꽤 좋은 소리입니다.
KarstenF

12

비슷한 토론 이 시작 되었지만

우리는 자주 데이터 마이닝 응용 프로그램 중 하나에서이 솔루션을 시도하고 있습니다.

더 나은 보안 문자 제어 (Look Ma-NO IMAGE!)

건물 검사 검색 에서 실제로 확인할 수 있습니다 .

소스를보고 보안 문자가 HTML임을 알 수 있습니다.


이제는 효과가 있지만 충분한 사이트가 이와 같은 접근 방식을 사용하자마자 스패머는 HTML을 이미지로 렌더링하고 결과를 OCR합니다.
워프

12

나는 아무도 이것을 읽을 수 없다는 것을 알고 있습니다. 그러나 개나 고양이는 어떤가요?

고양이 나 개가 어느 것인지 말해야합니다. 기계가이를 수행 할 수 없습니다 .. http://research.microsoft.com/asirra/

멋진 것입니다 ..


4
컴퓨터는 이것을 할 수 없습니다. 사람들을 눈 멀게 할 수도 없습니다.
TRiG

1
나도 고해상도 모니터에서 볼 때. 그 이미지는 아주 작습니다. 또한 그들 중 하나는 하얀 울타리 뒤에 식별 할 수없는 생물이었습니다.
jsims281

10

나는 누군가가 대답 할 수있는 간단한 질문을 사용합니다.

하늘은 무슨 색입니까?
오렌지는 어떤 색입니까?
잔디는 어떤 색입니까?

그것은 누군가가 귀하의 사이트에 봇을 사용자 정의해야하기 때문에 노력할 가치가 없습니다. 그렇다면 질문을 변경하기 만하면됩니다.


Cyc는 이것을 사소하게 해결할 수 있습니다 ... 오픈 소스입니다. 구현하려면 최대 2 시간의 스크립팅이 필요합니다.
rmeador

이것은 우분투 포럼에서도 사용됩니다. 나는 그것을 좋아하고 "2 + 2 =?"와 같은 검사의 구현 또는 "알파벳의 첫 글자는 무엇입니까?"는 매우 간단합니다.
pistacchio

8
답 : 1) 지금, 연한 파란색, 나중에 빨간색, 그리고 검은 색 다운타운 근처에 주황색 힌트가있는 검은 색. 2) 주황색, 곰팡이가 없으면 녹색 또는 검은 색 또는 흰색입니다. 3) 브라운, 남부 캘리포니아에서, 비버리 힐즈에 있지 않으면 녹색입니다.
mmr

52
@mmr 참조, 그것은 실제로 시스템의 이점입니다, 그것은 smartasses가 의견을 게시하지 못하게합니다 ...
tghw

2
두 번째와 세 번째 대답은 사막이나 볼티모어에 사는 사람들에게 편향되어 있습니다.
Mike Robinson

10

나는 개인적으로 보안 문자가 마음에 들지 않아 유용성에 해를 끼치며 유효한 사용자를 무효로 만드는 보안 문제를 해결하지 못합니다.

서버 쪽에서 할 수있는 봇 탐지 방법을 선호합니다. 유효한 사용자 (OpenID 덕분에)가 "동작"하지 않는 사용자를 차단할 수 있으므로 봇의 패턴을 식별하고 일반적인 사용자의 패턴과 일치시키고 차이를 계산하면됩니다.

Davies, N., Mehdi, Q., Gough, N. : 게임 엔진 및 AI 도구를 사용하여 지능형 NPC 생성 및 시각화 http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .pdf

Golle, P., Ducheneaut, N. : 봇이 온라인 게임을하지 못하도록 방지 <-ACM Portal

Ducheneaut, N., Moore, R. : 게임의 사회적 측면 : 대규모 멀티 플레이어 온라인 게임의 상호 작용 패턴에 대한 연구

이러한 참고 자료의 대부분이 비디오 게임 봇 감지를 가리키고 있지만, 이것이 우리 그룹의 논문 주제 인 로봇 전쟁 : 로봇 식별의 게임 내 탐험 이었기 때문입니다 . 그것은 학교 프로젝트를 위해 출판 된 것이 아닙니다. 당신이 관심이 있다면 나는 이메일을 보낼 수 있습니다. 사실 그것은 비디오 게임 봇 감지를 기반으로하더라도 사용자가 사용 패턴에 첨부되어 있기 때문에 웹으로 일반화 할 수 있습니다.

이 접근 방식에 대한 MusiGenesis의 방법에 동의합니다.이 방법은 내 웹 사이트에서 사용하는 방식이므로 제대로 작동합니다. 보이지 않는 CAPTCHA 프로세스는 대부분의 스크립트를 차단하는 적절한 방법이지만, 여전히 스크립트 작성자가 메소드를 리버스 엔지니어링하고 Javascript에서 찾고있는 값을 "가짜"로 만드는 것을 막을 수는 없습니다.

가장 좋은 방법은 1) 사용자가 나쁠 때 차단할 수 있도록 사용자를 설정하고, 2) 일반적인 패턴과 웹 사이트 사용의 비표준 패턴을 감지하는 알고리즘을 식별하고 그에 따라 사용자를 차단하는 것입니다.


봇이 OpenID를 등록 할 수없는 이유는 무엇입니까? 공격자는 자신의 OpenID 게시자를 만들면됩니다.
rjmunro

예 @ rjmunro, 그리고 그것은 좋은 것입니다. 인터넷의 어려움은 익명의 사용자를 식별하는 것입니다. 봇이 OpenID를 등록하고 해당 OpenID 사용자를 봇으로 식별하면 종료 할 수 있습니다. 더 이상 익명이 아닙니다. 동일한 공급자가 여러 번 등록하는 것을 방해하지는 않지만 봇을 허용하기 위해 해당 공급자를 종료 할 수 있습니다. 인터넷의 익명 성을 최대한 제거하는 것이 목표입니다.
jwendl

10

당신과 공유하고 싶은 아이디어가 있습니다 ...

OCR을 피하기위한 첫 번째 아이디어

사용자로부터 숨겨진 부분이 있지만 전체 이미지가 함께있는 보안 문자는 두 코드이므로 OCR 프로그램과 보안 문자 팜은 표시되는 부분과 숨겨진 부분이 포함 된 이미지를 읽고 둘 다 디코딩하여 제출하지 않습니다. ..-모든 준비가 완료되었으며 온라인으로 작업합니다.

http://www.planethost.gr/IdeaWithHiddenPart.gif

더 쉽게 만드는 두 번째 아이디어

인간이 올바른 단어를 선택해야하는 단어가 많은 페이지입니다. 나는 또한 이것을 만들었습니다, 간단합니다. 단어는 클릭하기 쉬운 이미지이므로 사용자는 오른쪽을 클릭해야합니다.

http://www.planethost.gr/ManyWords.gif

이미지가없는 세 번째 아이디어

이전과 동일하지만 div 및 텍스트 또는 작은 아이콘이 있습니다. 사용자는 올바른 하나의 div / 문자 / 이미지를 클릭해야합니다.

http://www.planethost.gr/ArrayFromDivs.gif

최종 아이디어-나는 그것을 CicleCaptcha라고 부른다

그리고 내 CicleCaptcha 하나 더 , 사용자는 이미지에서 점을 찾아야합니다. 그가 찾아서 클릭하면 사람이거나 기계가 고장 났거나 새로운 소프트웨어를 만들어이 방법을 찾아야합니다.

http://www.planethost.gr/CicleCaptcha.gif

모든 비평가를 환영합니다.


Re-captcha에는 단어에 대한 텍스트 음성 변환 기능이 있습니다. 클릭 위치를 알려줍니다.
Robert P

@RobertP 시각 장애가있을 때 클릭하는 것은 시각 장애가있을 때의 촬영과 같습니다 ... "머리 만 겨냥하십시오".

8
@pst "약간 왼쪽에. 맞아, 조금 더. 좋아. 좋아. 지금 돌아와. 위로. 아니, 다른 방법으로. 네. 거의 .. 거의 .. 거의 ..... 거의 ... 거의 ... CAPTCHA !!! "
Robert P


7

최근에 이름과 ID가 "message"로 설정된 태그를 추가하기 시작했습니다. CSS로 숨기도록 설정했습니다 (display : none). 스팸 봇은이를보고 작성하여 양식을 제출합니다. 서버 측, ID 이름이있는 텍스트 영역이 채워지면 게시물을 스팸으로 표시합니다.

내가 노력하고있는 또 다른 기술은 무작위로 이름과 ID를 생성하는 것입니다. 일부는 스팸 검사이고 다른 것은 일반 필드입니다.

이 기능은 저에게 매우 효과적이며 아직 스팸 메일을받지 못했습니다. 그러나 내 사이트 방문자 수가 훨씬 적습니다. :)


CSS를 사용하여 양식 필드를 숨기고 비어 있다고 주장하면 나에게도 효과가 있습니다. 바보는 아니지만 좋은 선택입니다.
Chris

기술 1 : 허니팟
kevinji

6

매우 간단한 산술이 좋습니다. 시각 장애인이 대답 할 수 있습니다. (하지만 Jarod가 말한 것처럼 운영자 우선 순위에주의하십시오.) 누군가 파서를 작성할 수는 있지만 스팸으로 인해 더 많은 비용이 발생합니다.

충분히 간단하며 주변에 코딩하기가 어렵지 않습니다. 여기에 두 가지 위협이 있습니다.

  1. 임의 스팸봇 및이를 백업 할 수있는 사람 스팸봇; 과
  2. 봇은 게임 오버플로

간단한 산술로 위협 # 1을 이길 수 있지만 위협 # 2를 이길 수는 없습니다.


필자는 이미지 보안 문자 크래커를 작성하는 것보다 파서가 훨씬 쉽다고 생각합니다. 사용자에게 제공하는 가장 쉬운 것은 스팸봇이 사용하는 것입니다. 슬프게도, JS가 아닌 보안 문자는 더 어려워 야합니다.
stalepretzel

5

보유한 보안 문자 아이디어를 조합하여 사용한 경우 (그중 하나를 선택하거나 임의로 선택) :

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

페이지의 CSS 숨겨진 섹션에 허니팟 아이디어와 동일한 보안 문자를 추가하는 것 외에도 그렇게하면 정답을 기대할 수있는 곳과 답을 바꾸지 않는 곳이 있습니다.


1
"더 나은 맛"은 제 의견으로는 상당히 주관적입니다. 맛에 관해 사지로 나가는 사람들은 봇으로 해석됩니다. 또한 2 개의 답변만으로 봇으로 통과 할 확률은 50 %입니다.
pimvdb

주관적인 부분에서는 사실이지만, 원래 질문에서 나온 것이 었습니다. 내 요점은 세 가지 (또는 여러 가지) 유형을 모두 무작위로 사용하는 것이 었습니다. 또한 답이 객관식 일 경우 합격 확률은 50 %에 불과합니다. 사용자가 목록에 가능한 답변을 표시하지 않고 단어를 입력하면 봇이 질문 / 답에서 올바른 단어를 선택하는 것이 훨씬 어려워집니다.
TheEmirOfGroofunkistan

5

간단한 "이 필드를 비워 두십시오."필드로 놀랍도록 좋은 결과를 얻었습니다. 봇은 특히 "URL"과 같은 필드 이름을 지정할 경우 모든 것을 채우는 것처럼 보입니다. 엄격한 리퍼러 확인과 결합하여 아직 봇을 얻지 못했습니다.

접근성에 대해 잊지 마십시오. 화면 판독기를 사용하는 많은 사람들이 보안 문자를 사용할 수없는 것으로 악명이 높습니다. 간단한 수학 문제 또는 아주 사소한 퀴즈 ( "하늘이 어떤 색입니까?"라는 질문이 마음에 들었습니다)는 시각 장애가있는 사용자에게 훨씬 친숙합니다.


5

간단한 텍스트가 좋습니다. 일을하기 위해 지역 사회에 뇌물을주십시오! 내가 알고 있듯이 SO 담당자가 사이트의 성공을 돕는 데 대한 사용자의 노력을 측정한다고 믿는 경우 스패머로부터 사이트를 보호하는 데 도움이되는 평판을 제공하는 것이 합리적입니다.

간단한 질문과 정답 세트가 제공 될 때마다 +10의 평판을 제공합니다. 질문은 기존의 모든 질문에서 멀리 떨어져 있어야하며 (편집 거리) 사람들이 질문에 대답 할 수없는 경우 평판 (및 질문)이 점차 사라져야합니다. 정답에 대한 실패율이 20 %를 초과하면 제출자가 오답 당 하나의 평판 포인트를 최대 15까지 잃게됩니다. 따라서 나쁜 질문을 제출하면 +10을 얻게되지만 결국에는 순 -5. 또는 사용자 샘플에 보안 문자 질문이 좋은지 투표하도록 요청하는 것이 좋습니다.

마지막으로 일일 담당자 한도와 같이 보안 문자 질문을 제출하여 100 명 이상의 명성을 얻을 수있는 사람이 없다고 가정 해 보겠습니다. 이는 그러한 기여에 대한 가중치에 대한 합리적인 제한이며 스패머가 시스템에 질문을 시드하지 못하게하는 데 도움이 될 수 있습니다. 예를 들어, 확률이 같지 않지만 제출자의 평판에 비례 할 가능성이있는 질문을 선택할 수 있습니다. 존 스키트, 질문을 제출하지 마십시오 :-)


5

암호화 nonce에 대한 AJAX 쿼리를 서버에 만듭니다. 서버는 nonce를 포함하는 JSON 응답을 다시 보내고 nonce 값을 포함하는 쿠키를 설정합니다. JavaScript에서 nonce의 SHA1 해시를 계산하고 값을 숨겨진 필드에 복사하십시오. 사용자가 양식을 게시하면 이제 nonce 값으로 쿠키를 다시 보냅니다. 쿠키에서 nonce의 SHA1 해시를 계산하고 숨겨진 필드의 값을 비교 한 후 지난 15 분 동안 nonce를 생성했는지 확인하십시오 (memcached가 적합 함). 모든 확인이 통과되면 의견을 게시하십시오.

이 기술을 사용하려면 스패머가 앉아서 무슨 일이 일어나고 있는지 파악해야합니다. 일단 요청이 발생하면 여전히 여러 요청을 해고하고 쿠키 상태를 유지하여 의견을 수렴해야합니다. 또한 Set-Cookie처음부터 JavaScript를 구문 분석하고 실행하고 AJAX 요청을하는 경우 에만 헤더를 볼 수 있습니다. 이는 대부분의 스패머가 수행하고자하는 것보다 훨씬 많은 작업입니다. 특히 작업이 단일 사이트에만 적용되기 때문입니다. 가장 큰 단점은 JavaScript를 사용하지 않거나 쿠키를 사용하지 않는 사람은 누구나 잠재적 인 스팸으로 표시된다는 것입니다. 즉, 중재 큐는 여전히 좋은 생각입니다.

이론적으로 이것은 모호함을 통해 보안으로 인정받을 수 있지만 실제로는 우수합니다.

스패머가이 기술을 깨기 위해 노력한 것을 본 적이 없지만, 두 달에 한 번씩 주제별 스팸 항목을 직접 입력 할 수 있습니다.


5

1) 휴먼 솔버

여기에 언급 된 모든 솔루션은 인간 솔버 접근 방식으로 우회됩니다. 전문 스팸봇은 수백 개의 연결을 유지하며 보안 문자 자체를 해결할 수없는 경우 스크린 샷을 원격 휴먼 솔버로 전달합니다.

보안 문자의 인간 해결사가 법을 어기는 것을 자주 읽습니다. 글쎄, 이것은이 (스팸 메일 링) 산업이 어떻게 작동하는지 모르는 사람들이 작성했습니다.
휴먼 솔버는 자신이 해결 한 보안 문자 사이트와 직접 상호 작용하지 않습니다. 그들은 심지어 어떤 사이트에서 보안 문자를 가져 와서 보냈는지 알지 못합니다. 휴먼 솔버 서비스를 제공하는 수십 개의 (수백이 아닌) 회사 또는 웹 사이트에 대해 알고 있지만 단절된 보드와 직접 상호 작용하는 단일 솔루션은 아닙니다.
후자는 법률을 침해하지 않으므로 보안 문자 해결은 완전히 합법적 인 (및 공식적으로 등록 된) 비즈니스 회사입니다. 이들은 범죄 의도가 없으며, 예를 들어 원격 테스트, 조사, 개념 증명, 프로토 타입 등에 사용되었을 수 있습니다.

2) 상황 별 스팸

AI (Artificial Intelligent) 봇은 서로 다른 국가의 IP 주소에서 서로 다른 시간에 컨텍스트를 결정하고 컨텍스트에 민감한 대화를 유지합니다. 블로그 작성자조차도 댓글이 봇의 의견임을 이해하지 못하는 경우가 많습니다. 예를 들어, 봇은 사람의 대화를 웹 스크래핑하고 데이터베이스에 저장 한 다음 재사용 (구절)하여 소프트웨어 나 사람이 스팸으로 감지 할 수없는 등의 세부 사항에 대해서는 다루지 않겠습니다.

가장 많이 투표 된 답변 :

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

또한 허니팟 답변 과이 스레드의 대부분의 답변은 명백한 잘못입니다.
나는 그들이 희생자 접근 방식이라는 것을 감히

대부분의 스팸봇은 (다른 국가의) 다른 IP의 로컬 및 원격 자바 스크립트 인식 (패치 및 관리) 브라우저를 통해 작동하며 허니 트랩과 허니팟을 우회하는 데 매우 영리합니다.

다른 문제는 블로그 소유자조차도 실제로 인간의 대화 상자와 다른 웹 보드 (포럼, 블로그 주석 등)에서 수집 된 주석이기 때문에 봇의 의견을 자주 감지 할 수 없다는 것입니다

3) 개념적으로 새로운 접근법

죄송합니다. 침전 된 부분으로이 부분을 제거했습니다.


1
이 글타래에 대한 거의 모든 답변의 문제를 설명했습니다. 그들이 작은 웹 사이트에 독점적이지 않으면 그들은 모두 빨리 패배했을 것입니다. 큰 웹 사이트 나 여러 개의 작은 웹 사이트 (예 : Wordpress 플러그인)에서이 중 하나를 사용하면 하루 만에 패배하게됩니다. 실제로 보안 문자는 아니지만 모호함을 통한 운이 좋은 보안 사례입니다. 당신도 옳습니다; 현대 스팸은 스팸으로도 인식 할 수없는 의견을 제시합니다. 나는 보안 문자를 포기하고 대신 Mollom을 사용합니다. 크라우드 소싱 스팸은 더 나은 접근 방법입니다.
Dan

5

실제로 프로그래밍 관련 보안 문자를 설정하는 것이 좋습니다. 예를 들면 다음과 같습니다.

보안 문자

누군가가 이것을 무시하기 위해 구문 검사기를 만들 가능성이 있지만 보안 문자를 우회하는 것이 훨씬 더 많은 작업입니다. 그래도 관련 보안 문자가 있다는 아이디어를 얻습니다.


5
예외 : 예제 질문에 대한 답변 (나중에 누군가이 문제가 발생하여 이미지가없는 경우 : "PHP 구문 오류의 수 $var == array(1 = 'one');;")이 1아니라는 것을 3알고 있습니까? (. 진심으로 시도 $var == array(1 => 'one');;) ^ _ ~
pinkgothic

허, 그 이미지를 만드는 것을 기억하지 못할 정도로 오래되었습니다. 물론 당신은 맞습니다. 저는 이것이 보안 문자처럼 매우 좋지는 않을 것이라고 생각합니다. 그러나 아마도 프로그래밍 포럼에 대한 입학 요구 사항 일 것입니다.
Ross

4

나는 스팸봇과 싸우는 경험이 없으며 얼마나 정교한 지 잘 모른다는 것을 인정해야합니다. 즉, jQuery 기사에서 서버에서 순수하게 달성 할 수없는 것은 없습니다.

jQuery 기사에서 요약을 바꾸려면 다음을 수행하십시오.

  1. 서버에서 연락처 양식을 생성 할 때 ...
  2. 현재 시간을 잡아라.
  3. 해당 타임 스탬프와 비밀 단어를 결합하고 32 자 '해시'를 생성하여 방문자의 브라우저에 쿠키로 저장하십시오.
  4. 해시 또는 '토큰'타임 스탬프를 숨겨진 양식 태그에 저장하십시오.
  5. 양식이 다시 게시되면 타임 스탬프 값이 쿠키에 저장된 32 자의 '토큰'과 비교됩니다.
  6. 정보가 일치하지 않거나 누락되었거나 타임 스탬프가 너무 오래된 경우 요청 실행을 중지하십시오 ...

모든 요청에서 이미지를 생성하는 오버 헤드없이 기존 이미지 보안 문자를 사용하려는 경우 다른 옵션은 오프라인에서 사전 생성하는 것입니다. 그런 다음 각 양식에 표시 할 항목을 임의로 선택하면됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.