将pageState公开给客户端是否安全?它是否与原始查询相关联,还是可能会暴露其他数据?在我当前的实现中,客户端可以将任何内容作为pageState发送。
长篇故事: 我在NodeJ上构建了一个REST api,我从Cassandra集群中获取了数据。由于查询有很大的结果,我需要做一些分页。我手动分页工作,但在我当前的实现中,我将pageState发送给客户端,然后将其发送回来以获得下一批结果。
if(req.query.page) {
options.pageState = new Buffer(req.query.page,'hex');
};
client.eachRow(query, [], options, function (n, row) {
arr.push(row);
}, function (err, result) {
res.send({
values: arr,
next: result.pageState
});
});
另一个想法是将其保存在某种缓存中,并将id发送给客户端。我会在服务器和客户端之间发送该ID,并且无法修改pageState。只是想知道这是否是开销,或者实际需要。感谢。
答案 0 :(得分:3)
如pagination docs of the driver中所述(参见最底部的脚注),可以操纵页面状态标记以检索同一列系列中的其他结果,因此将其公开给用户是不安全的。
您不应将页面状态公开为明文值,您应该将其哈希。