一个带路线的Laravel应用程序
Route::put('/api/{deviceMac}/access/update','DeviceController@update');
如果用户A有deviceMac 000000000000
,那么应该只进行PUT
http://www.app.com/api/000000000000/access/update
{deviceMac:000000000000, access: true}
如果用户B有deviceMac 111111111111
,则应该只进行PUT
http://www.app.com/api/111111111111/access/update
{deviceMac:111111111111, access: true}
用户A不应该能够劫持其他用户的路由更新
用户A只能访问000000000000
。
现在,用户A可以调整HTTP请求并将PUT作为用户B
http://www.app.com/api/111111111111/access/update
{deviceMac:111111111111, access: false}
如何防止其他用户像其他用户一样劫持请求负载?
我应该调整我的中间件来处理这个问题吗?
有一个基于令牌的系统。
有一些登录甚至是一些简单的事情,比如当用户打开你的应用程序时,你用你当前用户的MAC地址向服务器发送请求并生成一个令牌(bin2hex(random_bytes(30))
,请注意这将生成一个60个字符的令牌,可能分配给此MAC地址的或者可能看起来不过分。
然后,您可以创建一个custom middleware,用于检查发送的MAC地址是否具有令牌,以及令牌是否与启动时分配给它的MAC地址相匹配。
退出时不要忘记使令牌无效,如果您没有注销,请在时间基础上保持令牌活着(实际上,即使您有明确的注销按钮,也建议采取此步骤)。
最后,我强烈建议您更新到最新版本的Laravel,因为您似乎落后了。与5.1相比,当前版本为5.7。