我们的应用程序包括在App Engine和Flash客户端上运行的REST Web服务。我们需要确保只有我们的客户端可以向Web服务发出请求并防止重放攻击等情况。
我不是安全专家(到目前为止),所以我想对我提出的安全方案提出一些建议。
系统将使用共享密钥。服务器和客户端将共享相同的密钥。我知道如果密钥暴露出来(例如通过反向工程设计flash客户端),整个系统就会崩溃。最初,客户端向服务器发出登录请求。服务器以挑战(随机数)响应。客户端发回挑战的HMAC-SHA1摘要。如果摘要与服务器匹配,它将发回时间戳。客户端将在消息(和消息摘要 - HMAC-SHA1)中使用此时间戳来缓解重放攻击。
这是真的。是否有意义?服务器查看消息时,时间戳的可容忍时间增量是多少(我在想30秒左右)?还有其他意见吗?
编辑:哦,什么能成为生成密钥的好方法?
感谢。
干杯, 亚历
答案 0 :(得分:1)
我们需要确保只有我们的客户才能向Web服务发出请求
只有一种安全的方法可以做 - 请让最终用户输入用户名/密码,并通过https引导所有内容。
如您所述,共享秘密毫无意义。从flash文件中提取它是微不足道的。当你知道它被打破时,为什么还要打扰这条路呢?