背景是这样的:

用户有唯一ID,要修改的对象,跟用户表处于两次外键约束。举个例子说,用户拥有房子,房子里面放了桌子,用户要修改这张桌子。

用户提交的时候,显然要告诉服务器桌子的ID,然后服务器根据这个桌子的ID,作类似于这样的处理:

UPDATE 桌子表 SET 啥啥啥=那那那 WHERE ID=桌子的ID

当然,用户可不一定老实的,我们不能信任用户提交的所有数据,如果桌子ID是别的桌子的话,那么用户就可以修改别人房子里面的桌子了。

朴素的想法就是依次查表,检查这个桌子在那个房间,那个房间是不是属于这个用户的。

今天我遇到了类似问题,朴素的想法有些麻烦,于是,我想到了偷懒,用token,校验ID。

用户填表单的时候,服务器给用户的单里面,除了桌子ID外,还有一个token。token是这样生成的:hash( 每次Session随机的salt + 桌子ID + 用户ID)。

服务器收到表单后,校验hash之后的值否则一致,就可以判断ID是否合法了。现在,需要注意的问题是,只在用户需要修改对应的桌子时,才给予这个hash后的token,就可以避免麻烦的数据库查询。

上面是我的想法,自我关键没有逻辑漏洞,如果有,恳请请看官指正!