我正在开发一个RESTful服务,其中需要将数据库中特定表的Id返回给客户端,以便将来访问数据库中的特定条目。我被建议不要使用自动增量并直接返回id,因此我采用以下方式加密和发送ID -
SET @secretKey1 = "some key";
SET @secretKey2 = CONCAT("some other key", AccountNo);
SET @encryptedAccountNo = TO_BASE64(AES_ENCRYPT(AccountNo, @secretKey1));
SET @encryptedId = TO_BASE64(AES_ENCRYPT(Id, @secretKey));
RETURN CONCAT(@encryptedAccountNo, @encryptedId);
(注意:账号是一个没有暴露给客户的足够随机的字段)
使用UUID作为主键更合适吗?如果是这样,是否足够使用UUID或者是否应加密?
或者你会完全使用其他设计吗?
另外,您是否有任何改进现有设计的安全性或性能方面的技巧?
答案 0 :(得分:0)
我想你可能误解了这个建议......
当你说“我被建议不要使用自动增量并直接返回id。”
在使用之前,您应该始终检查Id是否正确使用服务器端;
(即检查具有该Id的文档属于尝试编辑它的用户),
但加密ID本身实际上没有任何用处,因为您的API必须处理加密的(除非您是加密/解密客户端,这对安全无效),因此(恶意)客户端可以发送加密版本并具有完全相同的结果......
我们无法通过查看(小)数据库逻辑来评论代码的安全性。如果您需要进行适当的审核,则必须发布实际进行交互的代码...