Monkey-Mouse / mo2

blog with go
MIT License
11 stars 4 forks source link

🐛 [security] wrong authorize logic #282

Closed Chronostasys closed 3 years ago

Chronostasys commented 3 years ago

https://github.com/Monkey-Mouse/mo2/blob/4244627a9b34d63b6a4336d1b929887d6cff7ecc/server/controller/blog.go#L42
这儿逻辑有点问题,只要用户把上传的body里的blog里的authorid字段设置成和自己的id相同就可以绕过检查。
我觉得最好的方法是可以去除这个检查,在这里把blog的authorid设置成cookie里的userid,然后在这一行
https://github.com/Monkey-Mouse/mo2/blob/4244627a9b34d63b6a4336d1b929887d6cff7ecc/database/blogs.go#L73
加一个{"author_id":blog.ID}
另外下方的这一行
https://github.com/Monkey-Mouse/mo2/blob/4244627a9b34d63b6a4336d1b929887d6cff7ecc/database/blogs.go#L82
应该去掉,这行导致现在如果有人利用上方我所说的漏洞绕过验证,他甚至可以改变文章所有者。

easilylazy commented 3 years ago

很重要,还有一个方法,可以通过设定数据库更新时可更改的字段:作者id只有在insert时可以修改,update时不可修改。 正在改…… 参考解决方法:Mongodb upsert only update selected fields, but insert all Duplicate of #

Chronostasys commented 3 years ago

很重要,还有一个方法,可以通过设定数据库更新时可更改的字段:作者id只有在insert时可以修改,update时不可修改。 正在改…… 参考解决方法:Mongodb upsert only update selected fields, but insert all Duplicate of #

easilylazy commented 3 years ago

刚才的改法还是有问题,只避免了修改作者id;但其他部分仍然会被修改