类型: 安全缺陷

    持久性框架(如 Hibernate或JPA)通常会自动更新数据库实体,当系统允许请求参数可以直接自动填充数据库持久实体时,攻击者将能够通过提供附加的请求参数向数据库中注入非预期的值。

    1. public class Order {
    2. String orderId;
    3. List goods;
    4. User User;
    5. ...
    6. }
    7. public class User {
    8. String userId;
    9. String username;
    10. String password;
    11. ...
    12. }
    13. OrderController是处理该请求的Spring控制器类:
    14. @Controller
    15. public class OrderController {
    16. ...
    17. @RequestMapping("/updateOrder")
    18. public String updateOrder(Order order) {
    19. ...
    20. session.save(order);
    21. }
    22. }

    当系统允许请求自动绑定到数据库实体时,攻击者可以通过在该请求中添加如下请求参数来更新其他用户的密码:https://www.shopwebsite.com/myOrder/updateOrder?order.user.userId=1234&order.user.password=newpassword