哈希已知纯文本的危险

时间:2017-07-14 17:20:25

标签: rest security

我有很容易猜到的内部标识符(自动增加数字),我想让我的客户根据这些标识符访问资源。

因为我无法为他们提供如下网址:

  

https://example.com/order/13

因为他们可以轻松猜出如何从此网址访问#14号订单。

因此,我考虑为他们提供标识符的盐渍哈希,如:

  

https://example.com/order/4643ef...

其中

4643ef… = sha256(13 + 'supersecretsalt')

从安全角度来看,这是一种好方法吗?

1 个答案:

答案 0 :(得分:2)

首先,您不应仅仅基于uri授予对任何资源的访问权限。换句话说,用户A不应该能够访问属于用户B 的资源,即使他知道相关的uri 。为了缓解这种情况,您应该在允许访问任何(机密?)资源之前添加某种形式的身份验证和授权。

那就是说,如果你仍然想混淆uri,你可以使用GUID来代替生成任何类型的哈希。相反,在每个订单ID之前,只需将GUID与它一起存储,然后只要在URL中使用GUID就查看该ID。

旁注: 如果您确实希望让您的客户仅根据网址查找某些订单详情(即无需识别),您至少可以临时资源的可用性。您可以通过存储例如a 与GUID一起有效,直到 -date。

现在,用户A将能够通过带有guid的网址查看与其资源相关的信息,但也许仅适用于例如3天。其他用户也可以访问它,但它不太可能发生,因为它很难猜测GUID,并且因为它们只有3天的窗口才能这样做。

如果用户A需要稍后再次访问他的资源,也许您可​​以提供一种方法来扩展GUID的有效性,或者只是提供一个指向同一资源的新GUID,但是有效日期不同。

显然,您需要了解这是否符合您的特定情况和安全需求是否真实/可接受。