-
Notifications
You must be signed in to change notification settings - Fork 7.4k
Open
Description
问题描述
在WxAuthController中的profile接口中,直接不经过任何身份校验传入了用户iduserId,并且根据这个userId查询用户,修改用户数据。如果已登录的用户A通过直接调用接口传递用户B的userId,那么就可能造成潜在的跨用户数据修改的水平越权漏洞。
相关代码片段
- 在下面的代码片段中,直接传入了
userId,而没有添加任何的userid与当前实际登录用户的校验
*/
@PostMapping("profile")
public Object profile(@LoginUser Integer userId, @RequestBody String body, HttpServletRequest request) {
if(userId == null){
return ResponseUtil.unlogin();
}
String avatar = JacksonUtil.parseString(body, "avatar");
Byte gender = JacksonUtil.parseByte(body, "gender");
String nickname = JacksonUtil.parseString(body, "nickname");
LitemallUser user = userService.findById(userId);
if(!StringUtils.isEmpty(avatar)){
user.setAvatar(avatar);
}
if(gender != null){
user.setGender(gender);
}
if(!StringUtils.isEmpty(nickname)){
user.setNickname(nickname);
}
if (userService.updateById(user) == 0) {
return ResponseUtil.updatedDataFailed();
}
return ResponseUtil.ok();
}建议的修复
通过当前用户的登录token获取userId, 而非直接通过controller层接口传递
Metadata
Metadata
Assignees
Labels
No labels