2011-12-21 60 views
3

暴露SQL行的ID號是否存在安全風險?評估在查詢字符串中暴露行標識的安全風險

例如,有與12

它是一個安全問題,如果有人通過http://example.com/events/12訪問它,或有人做一個POST到http://example.com/events/12以更新記錄的ID的事件(假設我允許這當然)?

回答

4

在Web安全上下文中,向用戶公開ID的問題通常稱爲「不安全的直接對象引用」。

OWASP

防止不安全的直接對象引用需要選擇一種方法,用於保護每一個用戶可訪問的對象(例如,對象號,文件名):每用戶或會話間接對象引用

  1. 使用。這可以防止 攻擊者直接針對未經授權的資源。例如,對於 示例,不是使用資源的數據庫密鑰,而是爲當前用戶授權的六個資源的下拉列表可以使用數字1至6來指示用戶選擇了哪個值。 應用程序必須將每個用戶的間接引用映射回服務器上的實際數據庫密鑰 。 OWASP的ESAPI包括 順序和隨機訪問參考映射,開發人員可以使用 來消除直接對象引用。
  2. 檢查訪問權限。每個使用來自 不受信任來源的直接對象引用都必須包含訪問控制檢查,以確保 用戶被授權請求對象。

深入的辦法辯護是做兩個1 & 2.

2

是否顯示,沒關係。

重要的是您檢查呼叫者是否已通過身份驗證並被授權執行正在請求的操作。

有人可能會有一個bot吐出請求到http://example/events/x,其中x是遞增的數字。也許這是一個試圖查看http://payroll/employee/x的史努比員工。

驗證用戶以確保他們是他們所說的他們。表單身份驗證,LDAP,你有什麼。

確保用戶有權在被調用時執行每個操作。通常,用戶屬於有權更新老闆工資,創建貨件或取消信用卡的組。

如果要實現作爲上述措施的id的來源並不重要,無論是對cookie的,隱藏的表單元素,查詢字符串,會話變量等

0

網址和查詢字符串都特別不安全,當你'使用整數標識符。畢竟,如果有12個,幾乎肯定會有11個或10個。GUID使得更難猜測另一個項目,但仍不應被認爲是安全的IMJO。底線:您需要某種身份驗證機制來確保用戶是他自稱的人,並且需要授權機制來確保允許他查看您要向他展示的內容。