2011-04-13 3 views
1

저는 건물에 간단한 captcha를 구현하려고하는데, 스스로 해결할 수없는 문제에 대비해 실행했습니다 . 내가 지금과 같은 임의의 숫자를 생성하는 간단한 코드를 사용하고사용자 입력 보안 문자 값을 세션에 저장된 예상 값과 비교합니다.

....

$randomnr = rand(1000, 9999); 
$_SESSION['randomnr2'] = md5($randomnr); 

.... 그리고 좀 더 코드가 임의의 숫자의 이미지를 생성하고 그것을 표시 페이지. 나는 .... 이런 유효성 반대 내가 세션 randomnr2에 저장된 임의의 숫자에 대해 보안 문자 입력 필드에 입력되었습니다 값을 확인 가야합니까 어떻게

if (strlen($captcha) !== ($_SESSION['randomnr2'])) { 
    $error['captcha'] = "CAPTCHA error. Please try again"; 
} 

해요?

+0

우우 우우! 그건 captcha가 작동하는 방식이 아닙니다. 길이가 아니라 두 문자열의 실제 내용을 확인합니다. 두 번째 문제에 관해서는 id = "captch"에 가 없도록하십시오. captcha를 채우기 위해 입력하는 입력 필드가 바람직합니다. – Khez

+0

당신은 세션에 저장하고있는 $ randomnr의 값을 해시하고 있습니다 ... 또한 $ captcha의 값을 해쉬하고 두 해시 값을 비교해야합니다. –

+0

@Khez - 네, 미안합니다. 확인해야 할 길이가 아닙니다. 내용입니다 :) 고마워요. 아래 답변에서 'int'를 대신 사용해야합니다. 입력 필드에는 라는 용어가 모두 있습니다. 회신을 보내 주셔서 감사합니다 :) – Alan

답변

1

난 당신이 사용자의 번호가 여기에 문자열의 MD5 해시에 대한 문자열의 길이를 확인하지만, $captcha을 가정하는 이유를 모르겠어요, 당신은이 작업을 수행 할 수 있습니다

if(md5($captcha) !== $_SESSION['randomnr2']) { 
    $error['captcha'] = "CAPTCHA error. Please try again"; 
} 
+0

고마워요.하지만 작동하지 않습니다. 내가하려고하는 것은 '$ captcha'변수에 저장되어있는 VALUE - strlen -이 해시 된 난수와 일치하는지 여부를 판단하는 것이다. 변수는 다음과 같이 결정됩니다 ..... $ captcha = $ _POST [ 'captcha']; 여기서 captcha는 양식의 사용자 입력 필드입니다 - . 나는 아마도 다른 접근법을 취해야 할 것임을 알고 있습니다. 다른 도움이되는 영혼이 지적한대로 안전하지 않으므로 안전하지 않습니다.하지만 할 수 있다면 그것을 배우는 방법을 배울 수 있다면 여전히 도움이 될 것입니다. 해당 값을 해시 된 숫자와 비교할 수 있습니까? – Alan

+0

내가 보자, 위에서 쓴 코드는 "해시 된 변수 'captcha'가 'randomnr2'세션에 저장되어있는 해시 된 숫자와 같지 않은 경우 오류 변수를 반환합니다 ..... 그게 맞습니까? 그때 ...하지만 그것은하지 않습니다 : ( – Alan

+0

그것은 작동하지 않습니다. 내 사과와 정보 의이 덩어리 인을 위해 대단히 감사합니다. 바보. 오늘 나는 captcha 스크립트를 변경하고 임의 번호가있는 부분을 삭제했습니다. 세션에 저장 - 난 그냥 일치하도록 원시 숫자를 얻으려고했다. 어쨌든, 저장된 값으로 세션이 없었기 때문에 그것은 작동하지 않을거야하지만 지금은 거기에 매력처럼 작동합니다. 고마워요 :) – Alan

0

PHP는, strlen()에 대한 (가 할 수있는 경우) 문자열로 아무것도를 자동으로 변환합니다 그래서

echo strlen(42); 
echo strlen('42'); 

것 모두 출력 '2', 첫 번째는 정수 비록. 매장 값으로 제출 된 값을 비교하기 위해, 당신은 내부적으로 처리하는 PHP $ _GET/POST 배열에 아무것도 다시 int로 제출 된 값을 캐스팅 할 것 같은 간단한

if ($_SESSION['randomnr2'] === (int)$captcha) { 
    ... it matched ... 
} 

로의 끈.

+0

감사 귀하의 회신 마크에 대한. 내가 물건을 친구가 설정하는 방법은 더 많거나 적은이 방법으로 확인해야합니다 ... 입력 필드 "captcha"의 내용이 저장된 해시 번호와 일치하지 않으면 "다시 시도하십시오 "그밖에 계속 ...... – Alan

0
<div id='captcha_to_show' style='border:1px solid silver;'>gobldeygook</div> 
<input name='captcha' id='captcha'> 

...

scriptmonkey를 통해 부착 ... 오픈 소스 보안 문자 스크립트에

$('document').ready(function(){ 
    $('#captcha').val($('#captcha_to_show').html()); 
}); 

보세요. 당신의 구현은 페이지를 가로 질러 그 captcha를 보내는 것을 요구할 것입니다. 그 값은 페이지를 당기는 것에 의해 볼 수 있고 그 사람/봇/무엇이든 유효성 검사 필드를 채울 수 있습니다. 따라서 실제로는 제로가됩니다. 그래서 captcha는 스크립트로 읽을 수없는 복잡하지 않은 복잡한 이미지를 사용합니다. 또는 ''1과 3의 합이 무엇이라고 말합니까? '와 같은 봇보다 상황에 따라 인간이 더 잘 이해할 수있는 의미 론적 질문을 사용합니다. === 4]. 그리고 예, 더 간단한 이미지 captcha가 설정된 글꼴, 간격 및 크기는 일종의 픽셀 패턴 사전 공격으로 해킹 될 수 있습니다.

관련 문제