2009-12-07 47 views
2

我正在尋求最強大的安全措施,以改變網址中的ID以供評論,博客,收件箱等...

有什麼建議嗎?

回答

5

驗證您獲得的數據是一個好主意,如果您期待數字,請確保您獲得數字。

if(isset($_GET['id']) && ctype_digit($_GET['id'])) 
{ 
    $id = $_GET['id']; 
}else 
{ 
    $id = 0; 
} 

如果您關注的是人改變網址,看到的東西,比如請求圖像44時,你只希望向他們展示圖片42,你有幾個選擇:

  • 包括關於各種檢查頁面以確保用戶具有使用該項目的適當權限。
  • 在URL中散列項目以使項目不可變。
  • 請勿使用連號,使用隨機數或散列。
+0

謝謝!偉大的建議...這對我來說是新的,所以你是否說我是否應該在我的if(issest)的末尾添加&& ctype_digit($ _ GET ['id'])) { ?或者我應該這樣做和額外的用戶檢查?如果有,那麼做一個好的方法是什麼? –

+1

添加ctype_digit()檢查將確保用戶只輸入數字。 用戶仍然可以更改URL中的內容(例如,將44更改爲45)。這項檢查不會接受這種修改。 – preinheimer

7

檢查會話權限以查看是否允許他們執行操作?

如果他們被允許這樣做,然後執行該操作。如果沒有,然後給他們一個403.

+1

+1爲正確的答案。您不能在您的網址中放入任何對最終用戶來說不完全可見的信息...您可以做的最好的辦法是試圖掩蓋它。如果你的安全取決於其他人沒有透過默默無聞,你已經失敗了。對用戶進行身份驗證,存儲該信息並使用它來驗證權限。 – Satanicpuppy

2

我想象數字簽署get請求並將其附加到該URL將工作。

用只有您的應用程序已知的私鑰對其進行簽名,然後對GET變量進行哈希處理,並在sig = blahblahblah中提供簽名。

這可能會起作用,但我並不真正瞭解保護GET變量的必要性。如果設計正確,那麼GET變量是什麼都不重要。正確設計的應用程序不應該允許用戶GET變量做任何破壞性的事情。

3

如果它只是一個ID(數字,我猜),所有你需要做的就是驗證它作爲一個整數:

$id = (int) $_GET['id']; 

然後你就可以查詢數據庫。當ID不存在且無效時(因爲在這種情況下$id將爲0),您將獲得空回報集。

+1

(int)將該值轉換爲整數,但不驗證它。如果有人輸入「23a312」,你會得到23. – preinheimer

+0

對不起,這就是我的意思。糟糕的措辭,我想。 – Franz

+0

雖然這仍然可以在我眼中預期。 – Franz

2

首先,不要依賴$ _GET獲取關鍵信息。總是仔細檢查用戶是否有權查看該評論ID,博客ID,無論如何。至於ID過濾 - 簡單intval()將有所幫助(但不要忘記也處理0)

相關問題