2010-01-29 3 views
5

사람들이 PHP 스크립트를 해킹하여 더 높은 등급을 부여하기 위해 투표를 중단하는 데 사용할 수있는 몇 가지 코드 예제는 무엇입니까?PHP를 사용하여 투표 시스템을 하이재킹하지 못하도록 막으시겠습니까?

+1

음, 나는 질문하지 않습니다. 확실히 스크립트는 사용자가 액세스 할 수없는 서버에서 실행 중입니까? 즉, 그들은 실제 PHP 스크립트에 액세스 할 수 없어야 만 호출 할 수 있습니다. –

+2

당신은 그것보다 훨씬 더 자세하게 들어야 할 것입니다. :) –

답변

4

방어의 첫 번째 줄은 쿠키.

기본적으로 컴퓨터에 쿠키를 설정하고 투표가있는 경우 투표를 사용하지 않도록 설정합니다.

setcookie('cookiename', 'voted=1'); 

// and later 

if(isset($_COOKIE['cookiename']) && $_COOKIE['cookiename'] = "voted=1") 
{ 
    // error 
} 

이렇게하면 투표의 유효성을 검사하기 위해 필요한 데이터베이스 호출이 제거됩니다. 캐싱과 같기 때문에 이것을 유지하는 것이 좋습니다. 소수의 사람들이 데이터베이스에 더 잘 부딪칩니다.

두 번째 방어선은 IP 제한입니다. 기본적으로 데이터베이스의 IP 주소 로그를 확인하고 최근에 투표를했는지 확인합니다.

mysql_query('INSERT INTO TABLE (`IP_ADDR`, `TIME`) VALUES("'.$_SERVER['REMOTE_ADDR'].'", "'.time().'")'); 

// and later 

$results = mysql_query('SELECT IP_ADDR FROM TABLE WHERE IP_ADDR="'.$_SERVER['REMOTE_ADDR'].'"'); 

if(mysql_num_rows($results) != 0) 
{ 
    // error 
} 

당신은 또한 만료 시간 등을 추가해야합니다

if(isset($_COOKIE['cookiename']) && $_COOKIE['cookiename'] = "voted=1") 
{ 
    die("You have voted recently."); 
} 

$results = mysql_query('SELECT IP_ADDR FROM TABLE WHERE IP_ADDR="'.$_SERVER['REMOTE_ADDR'].'"'); 

if(mysql_num_rows($results) != 0) 
{ 
    die("You have voted recently"); 
} 

//Do Voting Stuff Here 
vote($_GET['vote']); 

// Record the vote. 
setcookie('cookiename', 'voted=1'); 
mysql_query('INSERT INTO TABLE (`IP_ADDR`, `TIME`) VALUES("'.$_SERVER['REMOTE_ADDR'].'", "'.time().'")'); 

의 라인을 따라 무언가로 전체 스크립트를 켜기 만의 기본 JIST가있다.

+0

참고 : 데이터베이스에서 최근에 투표 한 쿠키를 찾으면 쿠키를 재설정해야 할 수 있습니다. –

3
  1. 이미 투표 한 사용자에게 쿠키를 설정하고 잠시 동안 투표를 거부하십시오.

  2. 쿠키 추가 보호 기능은 IP 주소 보호 기능을 추가합니다. 단일 IP 주소는 일정 기간 동안 한 번만 투표 할 수 있습니다. ip 보호를위한 좋은 대안은 결합 된 체계 (ip + user_agent + ...)에 의한 보호입니다.

  3. 너무 빠른 동작을 할 때 captcha를 입력하도록 사용자에게 요청하십시오.

+1

Btw., 당신은 전체 IP 로그를 유지할 필요가 없습니다. 지난 1 시간 동안 만 기록을 유지하십시오. 충분하지 않을 수도 있습니다. – Kirzilla

2

아이디어의 몇 :

  1. 를 사용하여 보안 문자 (물론 개인 정보 보호 정책에 따라)
  2. 기록 IP 주소가
1

이렇게하지 못하게하는 유일한 방법은 우수한 사용자 인증 시스템을 갖추는 것입니다. 쿠키가 없으면 Captcha으로 쿠키를 사용하지 못하게 할 수 있습니다.

관련 문제