人们从 url like 获取数据,http://domain/api/user/1
并且1
是id
数据库中的(主键)。我们希望避免这种情况,以防止人们检测到 id。
然后我发现可以将 id 编码/解码为字符串的Hashids,url 可能会更改为http://domain/api/user/D42dhDLdk
乍一看这是一个很棒的解决方案,但是如何在实际应用中使用它呢?
1个编码
当从数据库中检索记录时,我们应该将 id 编码为字符串,这是做这项工作的正确位置吗?我能想到的唯一正确的地方是记录的反序列化,例如,当您提供 的数据时json
,您可以对相关ids
字符串进行编码,但您必须确保应该对哪些字段进行编码。
例如:
{user:{id:1,name:'xx',projects:[{id:1,name:'p1',id:2,name:'p2'}]},icon_id:1}}
the id
of theuser
project
和 theicon_id
应该被编码,没有明确的规则来抽象它。
2 解码
从 db 检索数据时,您必须将字符串解码为 id,我认为我们可以在route
orcontroller
层执行此操作,但是仍然没有明确的规则来制作抽象中间件来处理此问题,因为encoded string
url 或查询参数。
我没有从谷歌找到任何通用的解决方案,所以我想知道你是如何处理这种问题的?
更新:
我正在使用 Mysql,并使用带有 sequelzie 的 Express 作为 ORM 工具。