2016-09-28 30 views
0

我有一張表格,顯然每行都有ids。當用戶點擊一個表格行時,他會被帶到一個不同的頁面,在那裏它顯示完整的數據(不同的頁面實際上是加載事件之後的同一頁面)。什麼是最簡單的方法來檢查表格數據是否已在螢火蟲中操作

我正在用jquery拾取click事件,然後將id發送給jquery加載,並加載到數據中。

問題是這樣的。如果使用該頁面的人安裝了螢火蟲,他可以操縱桌面上的ID並訪問他不應該訪問的內容。

所以我不得不編寫一個函數來檢查該用戶可以訪問的id。

function checkID($searchColumn,$userColumn,$tablename,$table_id,$user_id) 
{ 
    Global $db; 
    $query = "SELECT `{$userColumn}` FROM $tablename WHERE `{$searchColumn}`=?"; 
    //echo $query; 
    $stmt = $db->prepare($query); 
    $stmt->bind_param('i',$table_id); 
    $stmt->execute(); 
    $stmt->bind_result($myuser_id); 

    if($stmt->fetch()) 
    { 
     if($myuser_id==$user_id): 
      return true; 
     else: 
      return false; 
     endif; 
    } 
} 

基本上上述函數根據用戶是否可以訪問該id給出了true或false。

有沒有更好的方法來檢查數據是否已經在服務器端的螢火蟲中操作?

基本上我想確保發送到服務器的id是表中相同的id,並且沒有被螢火蟲操縱。即使我的功能有效,我仍然認爲可能有一個更簡單的解決方案。專業人員做什麼?

+0

請注意,瀏覽器現在有內置的開發工具,所以用戶甚至不需要安裝Firebug。 –

+0

我同意。 Firebug就是一個例子。我知道那裏有其他人,但我使用firefox,所以我知道螢火蟲。我正在尋找比我使用的驗證ID更簡單的方法,並詢問專業人員做什麼? –

+0

兩個注意事項:1. [Firebug將要離開](https://blog.getfirebug.com/2016/06/07/unifying-firebug-firefox-devtools/),所以在某些時候你必須使用內置[Firefox DevTools](https://developer.mozilla.org/en-US/docs/Tools)。 2.我提供了一個答案,儘管我還不清楚桌子的外觀如何。 –

回答

1

來自客戶端的數據總是需要在服務器端進行驗證和消毒。

I.e.如果$searchColumn,$userColumn,$tablename,$table_id$user_id作爲請求變量進來,您需要檢查其中每一個的有效性。特別是$userColumn$tablename$searchColumn需要仔細檢查SQL注入,因爲它們是在您致電prepare()之前添加的。
如果您不需要靈活性,則應在表格和列名稱中輸入字符串。

您甚至可以在服務器端保留用戶標識(作爲會話變量),並且只在登錄時設置一次,因此您可以完全清除該檢查。儘管如此,引用用戶數據的表仍然需要包含用戶標識的列。

爲確保用戶只能訪問他應該看到的數據,您需要在查詢中包含用戶標識。

例子:

想象一下,你必須在1訂單和訂單項目到m的關係。您向用戶顯示他已完成的訂單清單。當用戶現在選擇顯示其項目的訂單時,可以在查詢中包含用戶標識以確保用戶無法訪問其他用戶的訂單。

然後SELECT語句可能看起來像這樣:

SELECT oi.name, 
     oi.description 
     oi.price 
FROM order_item oi 
INNER JOIN order o ON o.id = oi.order_id 
WHERE o.id = ? 
    AND o.userID = ? 

然後,當用戶提供另一個用戶的訂單的ID,也不會有任何物品退回。

這也可以分兩步完成,首先對order表進行查詢,以檢查訂單是否分配給用戶,如果是,則對訂單項進行查詢。

+0

我的函數檢查的唯一事情是錶行ID。我必須傳入表名和其他所有內容,以便我的函數可以檢查它們。基本上,當我點擊一個表格行時,我正在其他地方看到數據,但如果他們操縱了這個ID,他們可能會看到他們不應該看到的數據。至於衛生,我總是使用準備好的查詢。我已經顯示的代碼是我目前檢查某個ID是否有效的函數。它工作正常,但我正在尋找一個更簡單的解決方案 –

+0

我看到如此使用此方法,如果他們更改id查詢不會帶回任何數據。我剛剛通過你所看到的身份證進行搜索。所以在我的查詢中,我應該搜索id和用戶標識。然後,如果他們更改螢火蟲中的ID,查詢將是空的。爲什麼我沒有想到這個 –

+0

恰恰!您需要檢查數據是否實際分配給用戶。我進一步更新了答案,注意你也可以在兩個單獨的查詢中做到這一點。根據表之間的關係,它可能會變得更復雜,但基本上可以總是查詢數據是否屬於用戶。有時候看到最簡單的答案並不容易。 :-) –

相關問題