2009-12-11 196 views
2

我正在開發一個服務器組件,它將服務於嵌入式客戶端的請求,該嵌入式客戶端也在我的控制之下。客戶端和服務器之間的安全連接

現在一切測試和安全是這樣的:

  1. 客戶端通過HTTPS發送的用戶名/密碼。

  2. 服務器返回訪問令牌。

  3. 客戶端使用自定義標頭中的訪問令牌通過http發出進一步的請求。

這是罰款演示,但它有需要修正的釋放它之前的一些問題:

  • 任何人都可以複製 login請求,重新發送它,並得到一個訪問令牌回來。 由於有些用戶回覆說,這不是一個問題,因爲它通過https。我的錯。

  • 任何人都可以通過檢查請求標題來監聽並獲取訪問密鑰。

我能想到的對稱密鑰加密,具有時間戳,所以我可以拒絕重複請求,但是如果有這種情況一些知名的好的做法(這似乎很常見),我想知道。

非常感謝您的洞察力。 PS:我使用Java作爲服務器,客戶端使用C++編碼,以防萬一。

回答

2

我沒有得到第一部分,如果登錄請求是https,那麼任何人都可以複製它?

關於第二部分,t 這是一個非常標準的會話劫持情況。見this question。當然,這裏沒有內置的瀏覽器選項,但基本的想法是相同的 - 或者只在必要時通過安全連接發送令牌,或者以某種方式將令牌與發送設備相關聯。

在瀏覽器中,基本上所有的都是IP地址(這不是很好),但在您的情況下,您可能能夠表達您的設備的特定信息,並根據請求進行驗證以確保相同的標記沒有從其他地方使用。

編輯:你可能在這裏很幸運,並且能夠排除IP地址在代理後面改變,並且實際上將它用於此目的。

但在一天結束時,它是很多更加安全地使用來自知名和審查庫的https,而不是試圖在這裏推出自己的。我意識到https是一種開銷,但是對於攻擊者可以利用的明顯事件來說,滾動你自己會帶來很大的風險。

2

一個共同的建議是 - 使用https

HTTPS男子在一旁用HTTPS整個會話中間人攻擊應該是足夠可靠的。您甚至不需要擔心訪問令牌 - https會爲您處理此問題。

對於進一步的請求使用http似乎會引入一些漏洞。現在任何擁有網絡嗅探器的人都可以攔截你的流量竊取令牌並欺騙你的請求。你可以構建保護來防止它 - 令牌加密,使用一次令牌等,但是這樣做會重新創建https。

回到中間人攻擊的https人 - 這是基於某人能夠將自己插入到您的服務器和客戶端之間,並通過他們的代碼獲取請求。這一切都是可行的,即在攻擊者可以訪問物理網絡的情況下。這樣的攻擊者將面臨的問題是,他將無法給你一個適當的數字證書 - 他沒有你用來簽署的私鑰。當通過瀏覽器訪問https時,瀏覽器會給你一個警告,但仍然可以讓你進入頁面。

就你而言,它是你的客戶端將與服務器通信。並且您可以確保證書的所有適當驗證都已到位。如果你這樣做,你應該罰款

編輯

借調伊沙伊 - 是一些開銷參與,主要是CPU,但如果這額外的開銷推你的服務器在主板,你有更大的問題,您的應用程序

2

第一個問題,只是爲了得到它:如果您對邪惡的客戶端模仿訪問充分關​​心,爲什麼不通過HTTPS執行整個對話?對於這個應用程序來說,最小的性能是否足夠重要,以至於不值得添加安全層?

二,如何重播登錄請求?如果我沒有弄錯,那是通過HTTPS進行的;如果連接設置正確,HTTPS將使用一次性臨時數來防止重放攻擊(請參閱here)。

相關問題