[英]HMAC Implementation for Web Service Authentication in PHP
我正在嘗試實現Web服務,並且需要一些(非常)簡單的Authenticate來限制對該服務的訪問。
我發現了有關HMAC的知識,我想我知道如何實現它。 但是我有幾個問題在想。
假設我在消費者方面擁有此HTML表單。 向我的服務器發出GET / POST請求時。
public_key
使用secret_key
? POST
變量/數組的哈希? 我認為僅發送public_key
的哈希值就足夠了,但是只是想確定並詢問你們。
我打算這樣做:
public_key
的哈希 secret_key
重新創建public_key
的哈希來驗證數據庫的哈希。 你的意見?
澄清: 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.