2012-01-12 38 views
0

我目前正在製作facemash模擬,我發現它很容易作弊^^如果您在瀏覽器中多次輸入:http://domain.com/rate.php?winner=1&loser=2,您可以使照片№1成爲贏家。我知道可以通過cookie和ip-blocking來阻止它,但我不知道具體如何。請幫幫我。謝謝!防止作弊

吳丹的一個例子(不礦): http://facemash.moefelt.dk/

UPD如果需要我可以提供一個源代碼。

UPD 1 rate.php http://jsfiddle.net/6xLR6/ 的index.php http://jsfiddle.net/AvF4M/1/

+0

餅乾不安全它可以被篡改,IP阻塞也使得更少的意義因爲不同的計算機在網絡下可能只有相同的IP地址,我認爲CAPTCHA更有意義 – jerjer 2012-01-12 10:55:52

+0

如果您覺得煩人,然後使用$ _POST和$ _SESSION至少作弊將更難 – jerjer 2012-01-12 11:01:13

+0

@jerjer cl.ly/41391F3U2I2N0Y3P0R2A我只是用$ _POST替換$ _GET? – 2012-01-12 11:10:54

回答

1

,你可以簡單地使用$ _POST的$ _GET instread,作弊將更難!

Cookie可以保存在緩存中,但如果用戶每次都清理它,則可能無用。

編輯:

<form METHOD=POST ACTION="rate.php"> 

<table> 
<tr> 
     <td><img src="images/<?=$images[0]->filename?>" /></td> 
     <td><img src="images/<?=$images[1]->filename?>" /></td> 

<input type="radio" name="winer" value="First"> First<br> 
<input type="radio" name="winer" value="Second"> Second 

<input type="hidden" name="first" value="<?=$images[0]->image_id?>"> 
<input type="hidden" name="second" value="<?=$images[1]->image_id?>"> 
</tr> 
</table> 
</form> 

在rate.php:

<?php 
$winerId = $_POST['winer']; 

if ($_POST['winer'] == $_POST['first']){ 
$looser = $_POST['second'];} 
else { $looser = $_POST['second']; } 
... 

我認爲你有所有你想現在;-)

+0

http://cl.ly/41391F3U2I2N0Y3P0R2A我只是用$ _POST替換$ _GET? – 2012-01-12 11:05:07

+0

是的,並且在調用該頁面的頁面上,將FORM Method =「POST」而不是FORM Method =「GET」;-) – clement 2012-01-12 11:10:55

+0

這並沒有解決問題。並且在我的index.php頁面上沒有FORM Method =「GET」:http://jsfiddle.net/AvF4M/ – 2012-01-12 11:18:20

1

不要使用查詢參數。用戶POST請求將數據發送到服務器。

+0

cl.ly/41391F3U2I2N0Y3P0R2A我只是用$ _POST替換$ _GET? – 2012-01-12 11:06:49

1

你可以試試這個:

<?php 
    session_start(); 

    if(isset($_POST['face'])) 
    { 
     //add another session verifier, at least you can prevent multiple votes in 1 browser session 
     if(!isset($_SESSION['done'])) 
     { 
      $face = trim($_POST['pace']); 
      //store $face votes to db 
      $_SESSION['done'] = true; 
     } 
    } 
?> 


<form method="post"> 
    <input type="hidden" name="face" value="1" /> 
    <input type="image" src="image1.gif" /> 
</form> 

<form method="post"> 
    <input type="hidden" name="face" value="2" /> 
    <input type="image" src="image2.gif" /> 
</form> 
+0

當他提交一些內容時,他必須擁有兩張圖片的ID ;-) – clement 2012-01-12 11:59:36

1

首先的問題是什麼是要防止攻擊?如果是單純爲了提交答案之前,肯定有人加載頁面,你需要:

  • 在這是提交表單(隱藏)
  • 在提交的一部分的頁面生成一個唯一的令牌,檢查令牌是否有效並且以前沒有使用

但是,這並不能阻止某人編寫機器人投票很多次。

如果您想確保真正的人類點擊了每個負載,您需要執行上述操作,並且還需要包含驗證碼以驗證點擊是否爲人。