【发布时间】:2012-07-11 23:00:37
【问题描述】:
我正在尝试实现 Web 服务,需要一些(非常)简单的身份验证来限制对服务的访问。
我发现了 HMAC,我想我知道如何实现它。但我有几个问题。
假设我在消费者端有这个 HTML 表单。向我的服务器发出 GET/POST 请求时。
- 是否足以使用
secret_key创建public_key的哈希? - 或者,我是否需要创建整个
POST变量/数组的哈希?
我认为仅发送 public_key 的哈希就足够了,但只是想确认一下并询问你们。
我打算这样做:
- 创建
public_key的哈希 - 将哈希值与 public_key(或 client_id)和其他 POST/GET 变量一起作为参数放在隐藏字段或 URL 中。
- 在我的服务器上接收并通过使用
secret_key重新创建public_key的哈希值来验证数据库的哈希值。 - 如果哈希匹配,我接受 POST/GET 请求。
你的想法?
澄清:public_key 类似于client unique id,我可以使用它来识别secret key 用于在服务器上生成哈希。
【问题讨论】:
-
HMAC 只使用一个共享密钥。它不使用“公共”密钥。你能澄清一下你在说什么吗?
-
另外,您是否需要防止“中间人”在请求通过网络时对其进行修改?
-
是的,更改 POST 变量将是一种主动的中间人攻击。
-
使用 TLS。它解决了这个问题以及许多您甚至还没有想到的问题。
-
在您考虑推出自己的 hmac 功能之前,请先查看PHP's buildin
hash_hmac()
标签: php web-services security authentication hmac