사용자는 등록 양식을 사용하여 웹 사이트에 등록 할 수 있습니다. 양식이 제출되면 토큰이 생성되어 이메일로 사용자에게 전송되며 토큰 링크를 클릭하여 계정을 활성화해야합니다.여러 악성 요청으로부터 등록 페이지를 보호하는 방법은 무엇입니까?
내 질문에 웹 사이트를 보호하기 위해 Captcha를 사용해야하는 경우 악성 코드가 여러 웹 메일을 내 웹 사이트에 보내도되지만 다른 방법이 있습니까?
사용자는 등록 양식을 사용하여 웹 사이트에 등록 할 수 있습니다. 양식이 제출되면 토큰이 생성되어 이메일로 사용자에게 전송되며 토큰 링크를 클릭하여 계정을 활성화해야합니다.여러 악성 요청으로부터 등록 페이지를 보호하는 방법은 무엇입니까?
내 질문에 웹 사이트를 보호하기 위해 Captcha를 사용해야하는 경우 악성 코드가 여러 웹 메일을 내 웹 사이트에 보내도되지만 다른 방법이 있습니까?
나는이 문제에 대해 전문가는 아니지만,이 솔루션은 나에게 오히려 분명한 것 같다
모두가 CAPTCHA를 사용합니다. 자동화 된 공격으로부터 서버를 보호 할 수있는 다른 방법은 없습니다. 보안 문자를 사용하면 DDoS로부터 보호 할 수는 없지만 CAPTCHA는 CAPTCHA이므로 다른 모든 것들을 처리 할 수 있습니다.
여러 CAPTCHA 솔루션을 사용할 수 있으므로 가장 잘 맞는 솔루션을 선택하십시오.
Velis가 언급 한대로 Captcha를 사용하는 것이 가장 쉬운 방법입니다.
다른 솔루션이 있지만 봇이 귀하의 웹 사이트를 대상으로하는 경우 (예 : 봇에 의해 채워지지만 서버 쪽에서 잡힐 수있는 "이메일 다시 입력"과 같은 숨겨진 필드가있는 경우) 쉽게 공격 할 수 있습니다. 등록을 거부 할 수 있습니다.
마우스 클릭이나 양식을 채우는 데 걸리는 시간과 같은 복잡한 방법도 있지만 중요한 JS 작업이 필요하며 웹 사이트가 봇 타겟이 될 때까지 과도 할 수 있습니다.
보안 문자는 표준 방법 중 하나입니다.
또 다른 방법은 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>
, 당신은 당신이 제출 확인 양식에 대한 고유 한 토큰을 생성 할 수 있습니다. 페이지 당 여러 개의 양식이있는 경우이를 고려해야합니다. 또한 간단한 방법은 제출시 양식/버튼을 비활성화하는 것입니다. 양식이 Ajax를 통해 제출되면 (양식의 조치 매개 변수가 부재하고 따라서 쉽게 수확 할 수 없도록) 더욱 효과적입니다.
자동 제출 (봇)을 방지하려면 Captcha는 아마도 가장 일반적인 방법 중 가장 강력 할 수도 있지만 매우 사용자에 적대적입니다. 대신, 귀하의 사이트가 특별히 타겟으로 삼고 있다고 믿을만한 이유가 없다면, 일반적으로 허니팟 필드 (인간이 채우지는 않지만 보이지 않는 필드, 로봇은 제외) 및 알려진 필드로 채우는 숨겨진 필드를 사용하는 것으로 충분합니다 JS를 사용하여 짧은 지연 후 값 (보통 봇은 JS를 실행하지 않으며 인간과 같은 필드에 입력하는 데 시간이 걸리지 않습니다). 단순히 Ajax를 제출하는 것만으로도 충분합니다. Captcha로 떨어지기 전에 이러한 방법 중 하나 또는 둘을 혼합하여 사용하는 것이 좋습니다.
captcha는 그럴듯한 해결책이지만 대부분의 사람들은 그것을 좋아하지 않습니다. 시스템에 지능을 추가하는 방법 대신 어떻습니까? 이메일 사이에서 재사용 대기 시간을 구현하십시오. 이메일을 보내기 전에 1 분 정도 기다리십시오. 다른 이메일 요청이 오는 경우 다른 분을 기다렸다가 첫 번째 이메일을 보내지 마십시오. (이것이 유일한 방어선 인 경우에만 다른 형태의 공격 일 수 있습니다.) 사람이 마지막 순간에 30 번 등록하려고합니까? 아니. 마지막 등록이 성공하면 다시 등록합니까? No. 등록 사용자의 IP와 결합 할 수도 있습니다. 사용자가 10 분 후에 동일한 IP의 다른 사용자를 위해 10 개의 새 계정을 만들려고합니까? 있을 것 같지 않게.
기업 웹 사이트 인 경우 이메일 스패밍을 방지해야하며 보조 의사 소통 방법을 고려해야합니다. 예를 들어 수단이있는 경우 사용자에게 전자 메일 주소를 SMS로 요청하여 특정 번호로 재설정하여 암호 재설정 요청을 생성 할 수 있습니다.
사용자가 등록을 완료하면 계정을 검색하는 데 사용할 숫자 목록을 생성 할 수도 있습니다. "귀하의 계좌가 분실 된 경우, 해당 번호 중 하나를 RETRIEVE 필드에 입력하여 검색 할 수 있습니다."그런 다음 귀사와 고객에게 기밀이되는 번호 목록을 제공하십시오. Google과 같은 방식입니다.
이러한 메커니즘은 복잡해 질 수 있지만 모든 captcha보다 더 스마트 해집니다. 적응하기 쉽고보다 포괄적입니다. 더하기 측면에서 사용자는 숫자와 문자의 왜곡 된 이미지를 읽지 않아도 고맙다고 생각합니다.
모든 "등록"흐름과 "비밀번호 분실"등을 직접 구현 했습니까? 필자는 스프링 보안에 자바를 작성한 오픈 소스 프로젝트를 작성했다. 보세요 : http://auth-flows-demo.appspot.com/ – OhadR
http://webdesignledger.com/tips/why-you-should-stop-using-captchas. –
@OhadR, 너무 나쁘다. Java EE 프레임 워크로 옮겼다. Spring Security를 사용하지 않아도 작동한다면 좋을 것입니다. 그건 그렇고, 나는 자바 EE 솔루션 만 사용하여 동일한 작업을 수행했다. –