wen*_*ert 0 php security authentication web-services hmac
我正在尝试实现一个Web服务,并需要一些(非常)简单的Authenticate来限制对服务的访问.
我发现了HMAC,我想我明白了如何实现它.但我想到了几个问题.
假设我在消费者方面有这个HTML表单.向我的服务器发出GET/POST请求时.
public_key使用secret_key?POST变量/数组的哈希?我认为发送public_key唯一的哈希就足够了但只是想确定并问你们.
我打算这样做:
public_keypublic_key使用secret_key.你的意见?
澄清: public_key就像client unique id我可以用来确定secret key在服务器上生成哈希的内容.
小智 6
pubkey仅用作识别用户的替代方法.它也可能是用户电子邮件,顺便说一句,因为您不希望将用户数据暴露给程序员(或潜在的嗅探器),因此您为每个用户创建了唯一的标识符.这就是它的意思.然后你需要一个私钥来签署你的哈希.
当然为了使它值得,你必须签署所有唯一的请求数据,否则有人可能会改变你的请求体,你将无法检测它(MITM攻击).
您还应该创建一个必须包含在HMAC本身中的时间戳,然后将其与请求一起传递.通过这种方式,您可以使签名过期,因此您不会受到重播攻击(有人窃取请求而不修改请求会对服务器进行回复,操作多次相同的操作...如果是请求,请考虑问题是什么?支付你的服务,你的用户会非常生气你).
还记得(没人做)加密HMAC本身内部的Request-URI以及HTTP方法(也就是动词)如果你正在使用RESTful webservice,否则恶意用户将能够将请求发送到其他URI或(使用RESTful服务)改变请求的含义,因此有效的GET可以成为潜在的DELETE.一个例子可能是:用户希望查看其所有数据,发出GET请求,中间人阅读请求并使用DELETE更改GET.如果您的HMAC中没有可以查看的东西,您没有机会检测到某些内容已被更改,因此您收到DELETE请求并且热潮!你销毁所有用户数据.
所以永远记住:一切都是必不可少的,您的请求必须是有效的 .如果您依赖HMAC,那么您必须加密您信任请求所需的一切.
还要记住通过拒绝所有请求来开始设计系统,然后如果您可以验证它们执行请求的操作.通过这种方式,您可以始终依赖拒绝的请求.最好让用户电子邮件告诉您他不能做一些让您的用户数据在网络上传播的内容.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3032 次  |  
        
|   最近记录:  |