我正在研究api。 api将由iphone应用程序使用。
api需要登录。我们使用asp.net表单身份验证来保护它。客户端获取cookie以重新发送即将发出的请求。
我们正在使用https,但我猜这个请求仍然可以重播。我如何保护,以便cookie只能由首次登录的客户端使用?
我正考虑在每次请求时更新cookie。但该应用程序有时会异步发送多个请求。所以那不行。
/帕特里克
答案 0 :(得分:1)
可能你不在乎是否可以重放任何动作,例如异步请求可能会获得一些非重要信息。
仍然可以要求应用程序在每次重要操作之前重新登录,这会产生财务或安全后果。
我希望你永远不要通过网络交换身份验证机密(密码)。相反,您向应用程序发送挑战字符串,应用程序使用密码对其进行编码并发回。服务器执行相同操作并比较结果。在任何重要操作之前,此操作很容易重复,甚至作为重要操作的一部分:响应由秘密编码发送。除非窃听者知道这个秘密,否则他不能重播动作,因为服务器发送的挑战会有所不同。
不,我不知道这个方案是否适合asp.net认证机制。
答案 1 :(得分:0)
您可以尝试让客户端为每个事务发送加密或散列保护的序列号和时间戳,并检查服务器端的重复项。
答案 2 :(得分:0)
除了为您的应用程序使用SSL连接以确保没有人开始窃取cookie之外,没有万无一失的方法可以防止使用被盗身份验证cookie的重放攻击。
您最好的选择是将Cookie过期设置为非常低的值,并要求用户在超时后重新输入凭据。理想情况下,这将是一个滑动窗口,但如果您不介意真正关闭用户,则可以将其设为绝对窗口。