2014-04-17 1 views
3

사용자는 등록 양식을 사용하여 웹 사이트에 등록 할 수 있습니다. 양식이 제출되면 토큰이 생성되어 이메일로 사용자에게 전송되며 토큰 링크를 클릭하여 계정을 활성화해야합니다.여러 악성 요청으로부터 등록 페이지를 보호하는 방법은 무엇입니까?

내 질문에 웹 사이트를 보호하기 위해 Captcha를 사용해야하는 경우 악성 코드가 여러 웹 메일을 내 웹 사이트에 보내도되지만 다른 방법이 있습니까?

+1

모든 "등록"흐름과 "비밀번호 분실"등을 직접 구현 했습니까? 필자는 스프링 보안에 자바를 작성한 오픈 소스 프로젝트를 작성했다. 보세요 : http://auth-flows-demo.appspot.com/ – OhadR

+1

http://webdesignledger.com/tips/why-you-should-stop-using-captchas. –

+1

@OhadR, 너무 나쁘다. Java EE 프레임 워크로 옮겼다. Spring Security를 ​​사용하지 않아도 작동한다면 좋을 것입니다. 그건 그렇고, 나는 자바 EE 솔루션 만 사용하여 동일한 작업을 수행했다. –

답변

0

나는이 문제에 대해 전문가는 아니지만,이 솔루션은 나에게 오히려 분명한 것 같다

모두가 CAPTCHA를 사용합니다. 자동화 된 공격으로부터 서버를 보호 할 수있는 다른 방법은 없습니다. 보안 문자를 사용하면 DDoS로부터 보호 할 수는 없지만 CAPTCHA는 CAPTCHA이므로 다른 모든 것들을 처리 할 수 ​​있습니다.

여러 CAPTCHA 솔루션을 사용할 수 있으므로 가장 잘 맞는 솔루션을 선택하십시오.

0

Velis가 언급 한대로 Captcha를 사용하는 것이 가장 쉬운 방법입니다.

다른 솔루션이 있지만 봇이 귀하의 웹 사이트를 대상으로하는 경우 (예 : 봇에 의해 채워지지만 서버 쪽에서 잡힐 수있는 "이메일 다시 입력"과 같은 숨겨진 필드가있는 경우) 쉽게 공격 할 수 있습니다. 등록을 거부 할 수 있습니다.

마우스 클릭이나 양식을 채우는 데 걸리는 시간과 같은 복잡한 방법도 있지만 중요한 JS 작업이 필요하며 웹 사이트가 봇 타겟이 될 때까지 과도 할 수 있습니다.

2

보안 문자는 표준 방법 중 하나입니다.

또 다른 방법은 form의 직접 제출을하지 않는 것입니다. AJAXfied 서버가 양식을 자체적으로 게시하지는 않지만 내부 데이터를 스크램블하는 일부 데이터가있는 경우 & 제출이 지연됩니다. 당신이 원하는 모든 이중 제출을 방지하는 경우

$("#contactForm").submit(function(event) 
{ 
    /* stop form from submitting normally */ 
    event.preventDefault(); 

    /* get some values from elements on the page: */ 
    var $form = $(this), 
     $submit = $form.find('button[type="submit"]'), 
     name_value = $form.find('input[name="name"]').val(), 
     email_value = $form.find('input[name="email"]').val(), 
     phone_value = $form.find('input[name="phone"]').val(), 
     message_value = $form.find('textarea[name="message"]').val(); 


    /* Send the data using post */ 
    var posting = $.post("contact-form-handler.php", { 
         name: name_value, 
         email: email_value, 
         phone: phone_value, 
         message: message_value 
        }); 

    posting.done(function(data) 
    { 
     /* Put the results in a div */ 
     $("#contactResponse").html(data); 

     /* Change the button text. */ 
     $submit.text('Sent, Thank you'); 

     /* Disable the button. */ 
     $submit.attr("disabled", true); 
    }); 
});</script> 
+0

AJAXfield 서버 호출 메서드의 예제를 제공하겠습니까? – Jack

+1

thats javascript/jquery – Rohitdev

4

, 당신은 당신이 제출 확인 양식에 대한 고유 한 토큰을 생성 할 수 있습니다. 페이지 당 여러 개의 양식이있는 경우이를 고려해야합니다. 또한 간단한 방법은 제출시 양식/버튼을 비활성화하는 것입니다. 양식이 Ajax를 통해 제출되면 (양식의 조치 매개 변수가 부재하고 따라서 쉽게 수확 할 수 없도록) 더욱 효과적입니다.

자동 제출 (봇)을 방지하려면 Captcha는 아마도 가장 일반적인 방법 중 가장 강력 할 수도 있지만 매우 사용자에 적대적입니다. 대신, 귀하의 사이트가 특별히 타겟으로 삼고 있다고 믿을만한 이유가 없다면, 일반적으로 허니팟 필드 (인간이 채우지는 않지만 보이지 않는 필드, 로봇은 제외) 및 알려진 필드로 채우는 숨겨진 필드를 사용하는 것으로 충분합니다 JS를 사용하여 짧은 지연 후 값 (보통 봇은 JS를 실행하지 않으며 인간과 같은 필드에 입력하는 데 시간이 걸리지 않습니다). 단순히 Ajax를 제출하는 것만으로도 충분합니다. Captcha로 떨어지기 전에 이러한 방법 중 하나 또는 둘을 혼합하여 사용하는 것이 좋습니다.

+0

Captcha가 사용자가 친숙하지 않다는 것에 동의하지만 (적대적이라고 부르지는 않을 것입니다.) 사람들은 지금까지 거의 익숙하지 않았으며 등록은 일회성 이벤트이므로, 나는 그것이 오늘날 매우 받아 들여지고 있다고 생각합니다. – eitanfar

+0

나는 그것이 구현에 달려 있다고 생각한다. 단순한 숫자 만 사용하는 Captchas는 대소 문자, 숫자 및 모두를 다른 색상으로 사용하는 것보다 훨씬 견딜 수 있습니다. – kaqqao

0

captcha는 그럴듯한 해결책이지만 대부분의 사람들은 그것을 좋아하지 않습니다. 시스템에 지능을 추가하는 방법 대신 어떻습니까? 이메일 사이에서 재사용 대기 시간을 구현하십시오. 이메일을 보내기 전에 1 분 정도 기다리십시오. 다른 이메일 요청이 오는 경우 다른 분을 기다렸다가 첫 번째 이메일을 보내지 마십시오. (이것이 유일한 방어선 인 경우에만 다른 형태의 공격 일 수 있습니다.) 사람이 마지막 순간에 30 번 등록하려고합니까? 아니. 마지막 등록이 성공하면 다시 등록합니까? No. 등록 사용자의 IP와 결합 할 수도 있습니다. 사용자가 10 분 후에 동일한 IP의 다른 사용자를 위해 10 개의 새 계정을 만들려고합니까? 있을 것 같지 않게.

기업 웹 사이트 인 경우 이메일 스패밍을 방지해야하며 보조 의사 소통 방법을 고려해야합니다. 예를 들어 수단이있는 경우 사용자에게 전자 메일 주소를 SMS로 요청하여 특정 번호로 재설정하여 암호 재설정 요청을 생성 할 수 있습니다.

사용자가 등록을 완료하면 계정을 검색하는 데 사용할 숫자 목록을 생성 할 수도 있습니다. "귀하의 계좌가 분실 된 경우, 해당 번호 중 하나를 RETRIEVE 필드에 입력하여 검색 할 수 있습니다."그런 다음 귀사와 고객에게 기밀이되는 번호 목록을 제공하십시오. Google과 같은 방식입니다.

이러한 메커니즘은 복잡해 질 수 있지만 모든 captcha보다 더 스마트 해집니다. 적응하기 쉽고보다 포괄적입니다. 더하기 측면에서 사용자는 숫자와 문자의 왜곡 된 이미지를 읽지 않아도 고맙다고 생각합니다.