簡體   English   中英

HMAC在PHP中進行Web服務認證的實現

[英]HMAC Implementation for Web Service Authentication in PHP

我正在嘗試實現Web服務,並且需要一些(非常)簡單的Authenticate來限制對該服務的訪問。

我發現了有關HMAC的知識,我想我知道如何實現它。 但是我有幾個問題在想。

假設我在消費者方面擁有此HTML表單。 向我的服務器發出GET / POST請求時。

  1. 是足以創造的哈希: public_key使用secret_key
  2. 或者,是否需要創建整個POST變量/數組的哈希?

我認為僅發送public_key的哈希值就足夠了,但是只是想確定並詢問你們。

我打算這樣做:

  1. 創建public_key的哈希
  2. 將哈希值與public_key(或client_id)以及其他POST / GET變量一起放在隱藏字段或URL中作為參數。
  3. 在我的服務器上接收並通過使用secret_key重新創建public_key的哈希來驗證數據庫的哈希。
  4. 如果哈希匹配,則我接受POST / GET請求。

你的意見?

澄清: public_key就像client unique id ,我可以在其中使用它標識用於在服務器上生成哈希的secret key

pubkey僅用作識別用戶的替代方法。 順便說一句,它也可能是用戶電子郵件,因為您不希望將用戶數據公開給他們的程序員(或潛在的嗅探者),所以您要為每個用戶創建一個唯一的標識符。 這就是全部。 然后,您需要一個私鑰來對您的哈希簽名。

當然,要使其物有所值,您必須對所有唯一的請求數據進行簽名,否則有人可以更改您的請求正文,而您將無法檢測到它(MITM攻擊)。

您還應該注意創建必須包含在HMAC本身中的時間戳,然后將其與請求一起傳遞。 這樣,您就可以使簽名失效,這樣您就不會受到重放攻擊(有人竊取了該請求,並且未經修改就對服務器進行了回復,多次執行相同的操作……如果這是對服務器的請求,請考慮有什么問題)為您的服務付費,您的用戶會對您非常生氣)。

另外請記住(如果沒有),也要加密HMAC本身內的Request-URI和HTTP方法(也稱為動詞)(如果您使用的是RESTful網絡服務),否則惡意用戶將能夠將請求發送到其他URI或(使用RESTful服務)更改請求的含義,因此有效的GET可能會成為潛在的DELETE。 一個例子可能是:用戶希望查看其所有數據,發出GET請求,中間人讀取請求並使用DELETE更改GET。 如果您不在可以檢查的HMAC內,則沒有機會檢測到某些內容已更改,因此您將收到DELETE請求,並且工作異常 您銷毀所有用戶數據。

因此請始終記住: 對您的請求至關重要的所有內容都必須是有效的,並且如果您依賴HMAC,則必須對信任請求所需要的所有內容進行加密。

還請始終記住要通過拒絕所有請求來開始設計系統,然后如果您可以驗證它們是否執行請求的操作。 這樣,您始終會回退拒絕的請求。 最好有一封用戶電子郵件告訴您,他不能做某些事情,使您的用戶數據在網絡上傳播。

使用TLS。 它可以解決此問題以及您甚至尚未想到的許多問題。

暫無
暫無

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

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