2016-03-14 56 views
0

我正在用java創建一個web應用程序。它處理在應用程序中建模的多個業務對象。每個對象在數據庫中都有與之關聯的表。我想展示特定對象的細節,比如說。學生對用戶。爲此,我正在向服務器發送ajax請求並將UserId作爲輸入參數傳遞。在僞代碼看起來類似如下:java web應用程序中的不安全對象引用

1) Get StudentId from request. 
2) Fetch Student details from db for given studentId 
3) Send the student data as response to the user 

我要的是,StudentId不能使用,而不是一個隨機數或其他任何可以使用,可以在服務器端和被映射到學生證因此學生的細節被提取併發送給客戶。我希望這樣,即使studentId被用戶修改/修改,作爲查詢字符串的一部分,用戶也不會獲得任何其他學生數據,因此會向其顯示錯誤消息。

+2

爲什麼不驗證當前用戶被允許訪問,而不是給定的學生嗎? –

+0

也許有用:http://stackoverflow.com/questions/35817200/accessing-url-with-params-in-spring-security – holmis83

+0

使用Spring Security ACL –

回答

1

如果沒有某種形式的身份驗證,攻擊者將只能爲StudentId嘗試不同的值,直到他們找到一個有效的值。通過重複此操作,他們將能夠枚舉不同的StudentIds並檢索所有學生數據。用戶應該只能訪問他們有權訪問的記錄。我強烈建議實施一種可靠的身份驗證方法。

但是,如果您無法實現身份驗證機制,則可以嘗試使枚舉過程更加困難。一種方法是隨機分配StudentIds(爲了避免German Tank Problem),並儘可能長時間地使用它們。像一根長而隨意的字符串就會成爲一個很好的ID。請注意,您擁有的用戶越多,「保護」您的數據的效率就越低。另外,這種方法實際上並不能保護你的數據,它只是使攻擊者(理論上)更難以檢索到所有數據。如果他們猜出正確的ID,他們仍然可以獲得他們不應該的數據。

另外,由於您使用的是Java,因此您可以使用PreparedStatements和參數綁定來避免SQL注入攻擊。

+0

請注意,[GUID是唯一的,不是隨機的](https:// blogs.msdn.microsoft.com/oldnewthing/20120523-00/?p=7553/)。 UUID也是如此 - 規範實際上並不表示它們必須由密碼安全的僞隨機數生成器生成。 – SilverlightFox

+0

偉大的一點,並感謝您的鏈接! –