2009-08-05 91 views
0

可以說我有一個網站,其中包含指向我主頁上各種圖書的鏈接。PHP通過獲取通過MySQL唯一ID的安全性

<a href='books.php?id=1'>Book 1</a> 
<a href='books.php?id=2'>Book 2</a> 
<a href='books.php?id=4'>Book 3</a> 

書籍1-3是在我的系統,但ID = 3是分開,我不是顯示或通過該網站的這部分授權另一catelog的。因此,如果用戶點擊Book 3,然後將id = 4更改爲id = 3,他們可以簡單地拉起記錄(假設我沒有正確的會話檢查)。

有沒有一種很好的方法來掩蓋你試圖拉特定記錄時傳遞的獲取ID?它似乎通過傳遞只是id很容易請求頁面,沒有適當的查詢和會話檢查,你將能夠得到另一個結果。

有沒有更好的方法來做到這一點?

乾杯

回答

1

您需要始終,始終檢查用戶是否能夠訪問該頁面。這是驗證您不顯示錯誤數據的唯一方法,因爲即使您以某種方式隱藏了它,也總是可以修改它們將要訪問的鏈接。

只是沒有逃脫它。您總是需要驗證記錄是否可以訪問。

0

只要檢查id是否允許顯示或不顯示。
隨着get的一個很好的做法是當你檢查你可能有的任何參數。

1

你可能會使用md5或其他什麼來加密你的ID或其他東西,以便手動輸入更困難,但這真的不是一個好主意。

您應該做的是在您的books.php腳本中實施服務器端安全性,以防止用戶遭到未經授權的訪問。這是唯一能夠保證您的網站安全。

0

只是想大聲:

  1. 你可以在你的書的MySQL表中的列說在你的用戶表「可見」 ......或用戶級。
  2. 做一個PHP函數,或者聲明:

    if (user is not in user_level) // user is not allowed to see everything 
    { 
        redirect to previous page; 
    } 
    else if (user is in user_level) // user is allowed to see everything 
    {   
        display all items; 
    } 
    
0

你一定要檢查用戶是否被允許查看的頁面。
但是,如果您將不同目錄的ID分開了,該怎麼辦?網址可能類似於books.php?cat = foo & id = 1。這不一定會使事情變得更安全,但它會防止人們意外地發現錯誤的頁面並組織好一些事情。