在做资源删除的时候,都需要做一个判断, 删除的资源ID,是否属于当前用户.这个时候,我们就需要先查询出此资源信息.对比资源所属用户与当前登录用户是否为同一个用户.然后再对此资源进行删除操作.
而我们在显示删除链接的时候已经查询过此资源了. 确保了此资源所属当前登录用户. 此时,生成了一个删除链接地址:del.php?id=1
这会显示给用户, 正常的用户通过此请求删除id为1的资源.
但是, 用户的输入总是不可信的! 所以, 假设某用户就可能伪造了请求:del.php?id=2
id为2的资源所属用户非当前登录用户的, 此时,del.php中的逻辑为: 查询id为2的资源所属用户是否为当前登录用户. 结果为假. 返回删除失败的信息.
可见, 用上述方式必须在del.php中做一个判断.防止非法用户. 那么, 怎么优化掉那次判断呢? 那就是防篡改了.
假设.当前登录用户uid为2, 当前资源id为1. 生成删除资源链接地址:del.php?id=1&token=<?php echo md5(2 . 1 . ‘secret key’);?>
此时del.php中需要做的就是使用同样的加密算法,计算请求是否合法. 如果合法,则进行删除操作. 如果不合法, 则返回删除失败的信息.
而非法用户,此时想伪造一个链接:del.php?id=2&token=xxx 来删除id为2的资源的时候,肯定通不过token检查.
这样, 我们就节省了一次数据库查询. 一次之前查询过的查询.
Ps: 还有其他的方式, 比如在资源id上做文章~ 这个以后再说.