등록 페이지에서 사용자가 대답해야하는 보안 질문이 있습니다. 그것은 잘 작동하고 스팸 봇을 중지했습니다. 여기 보안 스크립트 : 값을 소문자로 만들고 적용 전에 공백을 제거하십시오.
는 (매우 가벼운) 스크립트입니다 :add_action('register_form', 'add_register_field');
function add_register_field() { ?>
<p>
<label><?php _e('What is the name of the ship in the TV show Firefly?') ?><br />
<input type="text" name="user_proof" id="user_proof" class="input" size="25" tabindex="20" /></label>
</p>
<?php }
add_action('register_post', 'add_register_field_validate', 10, 3);
function add_register_field_validate($sanitized_user_login, $user_email, $errors) {
if (!isset($_POST[ 'user_proof' ]) || empty($_POST[ 'user_proof' ])) {
return $errors->add('proofempty', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question.' );
} elseif (strtolower($_POST[ 'user_proof' ]) != 'serenity') {
return $errors->add('prooffail', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question correctly.' );
}
}
그리고 여기 보이는 방법의 사진입니다 :
serenity
됩니다. 문제는 일부 사용자가
Serenity
으로 입력하거나 임의의 빈 공간을 어딘가에 추가하는 것입니다. 그래서
은 어떻게 값들이 입력 소문자로 변환됩니다 및 공백이 값이 정확한지 확인 이전을 제거 그것을 내 질문을 할 수 있습니까? 이렇게하면 Ser enItY
을 입력하면 문제가되지 않습니다.
strtolower()가 st를 생성합니다. 반지를 소문자로 바꾼다. str_replace() 또는 일부 정규 표현식을 사용하면 string의 공백을 제거하는 데 도움이됩니다. trim()은 문자열의 왼쪽과 오른쪽 공백을 제거하는데도 도움이됩니다. PHP에서이 질문에 태그를 지정 했으므로, 서버 측 함수를 원한다고 가정하고, js 코드가 같은 일을하지 않을 것이라고 가정합니다. – andrew
@andrew 서버 측은 틀림 없습니다. 제안 사항에 대한 답을 적어주십시오. 그렇게한다면 내 코드를 참조로 사용하십시오. –
그것은 몇 명의 사용자를 막을 것입니다 .... 나는 그 질문에 대한 답을 알지 못했고, 나는 그 순간을봤을 때까지 –