2010-12-17 6 views
2

나는 안티 스팸 솔루션을 구현하기위한이 코드에 의견이 필요합니다 : 페이지/폼이 생성 될 때PHP - 보안 문자 교체

  • 는, 임의의 문자열이 생성된다, 예를 들면. $string = md5($_SERVER['REMOTE_ADDR'])
  • 이 문자열 그래서 우리는 페이지로드에 데이터베이스
  • 를 기입하지 않는 데이터베이스에 삽입하고, 이후에 만료의 2 시간을 말할 수 있도록 설정되어 같은 양식의하자, 값이없는 숨겨진 입력 필드가 이름 페이지가 AJAX 요청로드 그것을 spam_check
  • 10, 15 또는 20 초 후에 자동 & DB에서 검색하는 $string 함께 spam_check 입력 값을 기입하는 것을 시도 오프 발사. 양식이 제출 때이 메시지가 스팸 일치하지 않는 경우
  • , 우리는

이 좋은 생각인가 ...,하여 DB에서 $string$_POST['spam_check'] 간의 간단한 검사를 수행? 얼마나 안전합니까? 명백한 장점은하지가 방문자에서, 그 $string 있기 때문에 보안 문자 등

+1

나는 그것이 스팸 일지라도 스팸 도구가 HTML 코드를 받아서 그에 따라 게시물을 작성하기 때문에 그 값이 정확할 것이라고 혼란 스럽습니다. 내가 틀렸어? – Pabuc

+0

잘 생각하면 스팸 봇은 javascript를하지 않으며 양식을 제출하기 전에 10 초 동안 기다리지 않습니다. – Alex

+0

사용자가 매우 빠르게 입력 할 수있는 경우 문제가 발생할 수 있습니다. – robjmills

답변

0

흥미 롭습니다. 나는 그것을 capcha에 대한 스팸/대체에 대한 해결책으로 생각할 때 조심할 것이지만 스팸 발송자의 삶을 더 어렵게 만듭니다.

그러나 자바 스크립트가 사용 중지 된 경우 (잠재적으로 CSS도 가능) (예 : 양식에 div를 할당하고 기본 메시지를 남긴 다음 javascript (onload/pageready를 기다리지 않고 인라인)를 사용하여 양식을 작성합니다.

$ 문자열 = MD5 ($ _ SERVER [ 'REMOTE_ADDR'])

이 임의의 값이 아닌 -와는 변경하지 않을 것이다. 고려하십시오 :

$ string = sha1 ($ _ SERVER [ 'REMOTE_ADDR']. rand (1000) .time());

(sha1은 기본 알고리즘이 더 많은 연산을 필요로 함에도 불구하고 md5보다 약간 빠름).

세션을 사용하는 것이 좋은 생각하고 있습니다. (SESSION_ID() 랜드 (1000) .time())

$ _SERVER [ '문자열'] = SHA1;

+0

감사합니다. 나는 세션에 대해 많이 알지 못한다. 나는 그들이 더 악한 이야기를 들었으므로 나는 더 많은 정보를 찾지 않았다. :) 그러나 나는 지금 할 것이다. – Alex

4

를 읽고 같은 조치를 필요로하지 않는 것이 매우 랜덤이며, AJAX 요청이 보호 기능을 우회하려고 사람에게 표시됩니다 사전에 $string을 검색 한 다음 해당 양식에 스팸 메일을 대량 발송하는 자동화 기능을 쉽게 만들 수 있습니다.

3

내가 많이 좋아하는 한 가지 방법은 CSS를 사용하여 <input type="text"> 요소를 숨기는 것입니다. 봇은 그것이 숨겨진 것인지 아닌지를 알지 못하며 일반 사용자는 결코 그것을 볼 수 없습니다.

이 주제는 이미 광범위하게 작동하지 왜 내가 생각 ... 이유 생각할 수 없다, 당신의 진짜 문제 is this a good idea?을 고려, Practical non-image based CAPTCHA approaches?

어쨌든 논의 곳이 게시물에서보세요 데이터베이스 부분은 필요하지 않지만 이전 링크에서 볼 수있는 다른 방법이 있습니다 ...

+0

나는이 "벌꿀 냄비"기법을 사용하여 매우 효과적이라고 발견했습니다. – robjmills