所以我有一个用Swift编写的iOS应用程序,它与一个带有SQL数据库的node.js服务器进行通信。该应用程序使用数据库ID从数据库中检索对象。因此,应用程序上的搜索功能将返回一组ID,并且应用程序使用所需对象的ID从服务器请求对象数据。
ID对应于对象表中的自动递增主键整数,例如:
CREATE TABLE database.events (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
description VARCHAR(1000) NOT NULL
);
从我所看到的,有些人认为这是一件非常糟糕的事情,而其他人则认为如果做得正确,这不应该是一个问题。我认为在我的例子中,后者是我同意的。事情'我的意思是将数据库ID暴露给前端(客户端应用程序)。
我的理解是这可能有两个主要问题:
我认为这是唯一真正的问题吗?
对于第一个,我已经(服务器端)进行了必要的检查,以确保用户无法请求或访问他们无权查看的数据。
对于第二个问题,我想更多的是我发布这个问题的原因是如何优雅地处理这个问题。不可否认,它与在URL中公开的ID一样糟糕,因为它需要黑客攻击应用程序以查看它发送和接收的数据。但是我仍然认为这是一个问题,并且希望模糊ID以阻止任何人从ID中获取上述信息。
我在考虑使用hash-id最初从自动递增ID创建一种哈希ID,但如果您只想生成我更喜欢的数字ID,他们建议使用Optimus。然后,应用程序客户端将使用此哈希ID来从服务器请求对象。
我的问题是,这是一个理性而优雅的解决方案吗?有没有更好的办法?或者我是否错过了我正在创建的任何关键漏洞?
答案 0 :(得分:3)
散列ID的想法很好,大多数数据库都使用GUID。另一方面,这些不提供任何安全性,它们只能帮助解决问题2.
有关详细信息,请参阅:http://blog.codinghorror.com/primary-keys-ids-versus-guids/
GUID(和许多哈希)的目标是唯一的,而不是加密安全(不可预测)。问题1只能通过实际的安全认证机制来解决。