通过一致性检查,我的意思是消除肯定不会返回任何内容的查询。
例如:
考虑 table boxes
,其中一个可用列是color CHAR(6)
;
用户通过与前端的交互发送此字符串'abcdefg'
以对列进行查询;color
然后,后端将SELECT * FROM boxes WHERE color = ?
使用上述相同的字符串执行类似于 的查询;
至少在我的 PostgreSQL 安装中,我可以执行这个查询,即使知道它永远不会返回任何东西(长度'abcdefg'
为 7)。
目前,前端和后端都在从我们的数据库访问数据之前执行一致性检查(以避免不必要的调用)。
事实上,前端旨在禁止用户请求无效查询。但是假设这些检查没有发生,特别是在后端,这对应用程序有多重要?
PostgreSQL 如何处理这些查询,是否有任何类型的算法在执行此类查询时立即不返回任何内容?或者最好不要调用数据库而只向用户发送类似not found
or的东西invalid request
?
我们已经对从前端接口获取的所有输入进行了清理,因此这不是关于执行这些检查后获得的安全性可能带来的好处/坏处的问题。
我们后端使用的语言是 Go,我相信它在定期执行这些检查时没有问题(即在大多数 HTTP 请求上)。
PS.:我知道你可以在 PostgreSQL 中将十六进制转换为整数,这只是一个假设问题,我用来简化对问题的理解(我希望它确实如此)。
繁华开满天机
相关分类