簡體   English   中英

Java Web應用程序中的不安全對象參考

[英]Insecure Object Reference in java web application

我正在用Java創建一個Web應用程序。 它處理在應用程序中建模的幾個業務對象。 每個對象在數據庫中都有與之關聯的表。 我想顯示特定對象的詳細信息,例如。 學生到用戶。 為此,我向服務器發出ajax請求,並將UserId傳遞為輸入參數。 偽代碼如下所示:

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,而是可以使用隨機數或其他任何東西,它們可以映射到服務器端的學生ID,因此獲取學生詳細信息並將其發送給客戶端。 我希望這樣做,以便即使用戶對studentId進行了篡改/修改,作為查詢字符串的一部分,用戶也不會獲得任何其他學生數據,因此會向其顯示錯誤消息。

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

但是,如果您不能實現身份驗證機制,則可以嘗試使枚舉過程更加困難。 一種方法是隨機分配StudentId(避免出現German Tank問題 ),並在實際可行的范圍內使其盡可能長。 諸如長而隨機的字符串之類的東西會成為一個出色的ID。 請注意,您擁有的用戶越多,“保護”數據的效果就越差。 此外,此方法實際上並不能保護您的數據,只是(理論上)使攻擊者更難以檢索所有數據。 如果他們猜測正確的ID,他們仍然可以獲得他們不應該獲取的數據。

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

一種解決方法是使用owasp esapi訪問參考地圖,您會喜歡它的:)

https://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/AccessReferenceMap.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM