2016-07-27 72 views
0

我正在寫一個離子移動應用程序發送HTTP請求到一個Java servlet。 HTTP請求URL包含用戶信息,並將用於更新後端數據庫。但是我不希望除我的應用程序用戶以外的任何人通過發送來自外部源的HTTP請求來弄亂我的數據庫。用戶無需登錄即可使用我的應用程序,因此我無法驗證發送請求的身份。到目前爲止,我唯一想到的解決方案是發送一個密鑰和請求,然後在servlet上進行驗證。然而,這種硬編碼的方式遠非令人滿意。什麼會更好?還是我連接到後端錯了?我接受所有建議。限制訪問的Java Servlet

回答

1

如果您在不驗證用戶憑證的情況下更新數據,則任何人都可以更新它,因爲它只是修改用戶代理並嗅探有效負載中的祕密密鑰,這與URL本身一樣祕密。您將必須找出一種方法來驗證連接,例如發送數據的哈希值以及使用數據發送的數據,使用在安裝應用程序期間生成的唯一密鑰以及生成的用戶標識進行醃製,然後發送給你在安裝過程中。然後,您可以將唯一密鑰保存在您的數據庫中,並且每當您收到請求時,都會對數據進行散列並匹配散列以確保它是從移動設備發送的。

0

根據我的經驗,在發送一個頭端密鑰,以你的servlet,然後驗證這個祕密是有效的是去一個很好的方式。

你可以存儲有效的祕密名單(如果你有多個客戶端),然後驗證一個被包括在其中被髮送到你的servlet的任何請求頭。

另一件事要記住的是,如果你想溝通是安全的,你應該強制執行HTTPS請求使用(而不是HTTP),否則客戶端祕密會以純文本格式發送。這將使攻擊者很容易看到祕密並在他們自己的請求中使用它。

+1

問題與靜態的祕密是有一次甚至其中的一個被打破,整個操作是脆弱的。然後爲了保護自己,您必須強制所有用戶切換密鑰,通常通過重新安裝應用程序來完成,這本身就很痛苦。 HTTPS確實是需要的,但確定的攻擊者可以繞過它。 –