2010-06-13 5 views
1

내 사이트의 기본 설정은 다음과 같습니다. 사용자가 홈페이지에 메시지를 입력하고 Enter 키를 누르면 메시지가 AJAX 요청을 통해 보내지는 like.php이라는 파일로 전송됩니다 다시 사용자에게.무작위로 생성 된 홍수 조절 토큰 사용

사용자가 Enter 키를 눌렀을 때 입력을 사용하지 않도록 설정했지만 사용자가 POST 요청 및 채우기로 계속해서 갑자기 막히는 것을 막을 수있는 것은 아무것도 없습니다.

여기 누군가가 토큰 시스템을 사용하라고 말했지만 어떻게 언급하지 않았습니다. 나는 이것이 효과적이라는 것을 이전에 그리고 내가 아는 것에서 행해지는 것을 보았다.

내가 가진 유일한 문제는 like.php이 올바른 토큰임을 어떻게 알 수 있습니까? 내 코드는 순간이있다 :

$token = md5(rand(0, 9999) * 1000000); 

및 마크 업 :

<input type="hidden" name="token" value="<?php echo $token ?>" /> 

POST를 통해 like.php에 토큰을 보내드립니다. 그러나 like.php은 이것이 유효한 토큰임을 어떻게 알 수 있습니까? 대신 사용자와 연결된 항목을 토큰해야합니까? 그들의 IP 주소 같은거야? 또는 현재 토큰을 토큰으로 사용하여 같은 분인지 확인하십시오. like.php ...

감사합니다. 감사합니다. 감사합니다. :)

답변

1

사용자가 양식 요소만큼 쉽게 삭제하거나 수정할 수 없으므로 가장 좋은 방법은 세션 변수를 사용하는 것입니다. 또는 IP 주소와 시간을 데이터베이스에 저장하고 사용자가 아직 다시 게시 할 수 있는지 확인하십시오.

+0

좋아요, 그렇다면 세션을 사용하면 가장 좋은 토큰은 무엇이 될까요? 나는 그들의 IP 주소를 해싱한다는 생각을 좋아하지만 쉽게 변경할 수있다. 데이터베이스에 세부 사항을 로깅하지 않기를 원했는데, 사이트가 심한 홍수를 겪게되면 데이터베이스에 많은 읽기/쓰기가 발생하여 작업 속도가 느려지 게됩니다. –

+0

>> 사이트가 무거운 홍수를 가져 오기 때문에 데이터베이스를 읽기/쓰기가 많이 느려지므로 작업 속도가 느려지 게됩니다. --- 그렇게 퀴즈 질문을한다면 - 품질이 좋고 빠르지 않은 코드와 사이트가 "불필요한"데이터베이스 읽기 쓰기 없이도 다운 될 것입니다. – zerkms

+0

양식 스팸을 실제로 제어 할 수있는 유일한 방법은 사용자가 계정을 만들고 전자 메일 주소 나 보안 문자를 확인하도록하는 것입니다. 그러나 그것들조차도 한계가 있습니다. 프록시를 사용하여 IP 기반으로 작업 할 수 있습니다. 시간을 기반으로하는 사람들은 긴 타이핑에 걸리거나 확인하기가 어렵다면 게시물을 게시하는 동안 사용자를 차단할 위험이 있습니다. 사용자가 페이지 당 하나의 댓글을 게시 할 수있는 "한 번"시스템을 사용할 수 있습니다. 임의의 해시를 만들어 데이터베이스에 저장하고 게시물과 함께 사용되면 삭제하십시오. 솔루션과 상관없이 주변에는 여러 가지 방법이 있습니다. –

1

휠을 재발 명하지 마십시오. 사용자의 user_id, user_ip에 의해 정의 된이 사용자의 마지막 코멘트 시간을보고 소유 여부를 결정하십시오.

1

1 분은 너무 길어 대부분의 사용자가 대기 할 수없는 것처럼 보입니다. 탭 브라우징, 광대역 인터넷 서비스 및 사용자의 tendency to not read every piece of text they're presented은 모두 1 분 미만의 시간 동안 지루할 가능성이 큰 사용자 집단에 기여합니다.

사용자의 IP 주소를 저장하는 것이 좋습니다.