API6:2023 - Unrestricted Access to Sensitive Business Flows چیست

به واسطه این آسیب پذیری مهاجم امکان بهره برداری از عملکرد های مجاز برنامه را برای هدف های غیر مجاز به واسطه قابلیت های برنامه دارد.


مثال:

درخواست POST برای خرید بلیط هواپیما با ارائه جزئیات مسافر:


POST /api/tickets/buy

Body:

{

  "passenger_name": "John Doe",

  "flight_number": "AB123",

  "departure_date": "2023-07-01"

}


کد آسیب پذیر(NET.):


[Route("api/orders")]

public class OrderController : ApiController

{

    private readonly IOrderService _orderService;



    public OrderController(IOrderService orderService)

    {

        _orderService = orderService;

    }



    [HttpPost]

    public IHttpActionResult CreateOrder(OrderRequest request)

    {

        // Create a new order without proper validation

        Order order = _orderService.CreateOrder(request);



        // Return the created order

        return Ok(order);

    }



    [HttpGet]

    [Route("{orderId}")]

    public IHttpActionResult GetOrder(string orderId)

    {

        // Get the order by ID without proper authorization

        Order order = _orderService.GetOrder(orderId);



        // Return the order

        return Ok(order);

    }



    // Other methods...

}


پیشگیری (NET.):


[Route("api/orders")]

public class OrderController : ApiController

{

    private readonly IOrderService _orderService;



    public OrderController(IOrderService orderService)

    {

        _orderService = orderService;

    }



    [HttpPost]

    [Authorize(Roles = "Admin")]

    public IHttpActionResult CreateOrder(OrderRequest request)

    {

        // Validate the request and create a new order with proper authorization

        Order order = _orderService.CreateOrder(request);



        // Return the created order

        return Ok(order);

    }



    [HttpGet]

    [Route("{orderId}")]

    [Authorize(Roles = "User")]

    public IHttpActionResult GetOrder(string orderId)

    {

        // Authorize the user's access to the order

        // Only users with the "User" role can access the order

        Order order = _orderService.GetOrder(orderId);



        // Return the order

        return Ok(order);

    }



    // Other methods...

}


کد آسیب پذیر (جاوا):


@RestController

@RequestMapping("/api/orders")

public class OrderController {

    private final OrderService orderService;



    public OrderController(OrderService orderService) {

        this.orderService = orderService;

    }



    @PostMapping

    public ResponseEntity<Order> createOrder(@RequestBody OrderRequest request) {

        // Create a new order without proper validation

        Order order = orderService.createOrder(request);



        // Return the created order

        return ResponseEntity.ok(order);

    }



    @GetMapping("/{orderId}")

    public ResponseEntity<Order> getOrder(@PathVariable String orderId) {

        // Get the order by ID without proper authorization

        Order order = orderService.getOrder(orderId);



        // Return the order

        return ResponseEntity.ok(order);

    }



    // Other methods...

}


پیشگیری (جاوا):


@RestController

@RequestMapping("/api/orders")

public class OrderController {

    private final OrderService orderService;



    public OrderController(OrderService orderService) {

        this.orderService = orderService;

    }



    @PostMapping

    @PreAuthorize("hasRole('ROLE_ADMIN')")

    public ResponseEntity<Order> createOrder(@RequestBody OrderRequest request) {

        // Validate the request and create a new order with proper authorization

        Order order = orderService.createOrder(request);



        // Return the created order

        return ResponseEntity.ok(order);

    }



    @GetMapping("/{orderId}")

    @PreAuthorize("hasRole('ROLE_USER') or hasPermission(#orderId, 'READ')")

    public ResponseEntity<Order> getOrder(@PathVariable String orderId) {

        // Authorize the user's access to the order

        // Only users with ROLE_USER or permission to read the order can access it

        Order order = orderService.getOrder(orderId);



        // Return the order

        return ResponseEntity.ok(order);

    }



    // Other methods...

}



پیشنهادات کلی جلوگیری:

اجرای مکانیزم‌های احراز هویت و اعتبارسنجی کاربران قبل از دسترسی به جریان کسب و کار حساس.

بررسی و اعتبارسنجی داده‌ها و ورودی‌های کاربران به دقت، از جمله بررسی اعتبار تاریخ و فرمت‌های ورودی.

اعمال محدودیت‌ها و قوانین منطقی برای دسترسی به جریان کسب و کار حساس.

استفاده از سیستم‌های لاگینگ و مانیتورینگ برای آشکارسازی و پیگیری فعالیت‌های مشکوک یا نامناسب در جریان‌های کسب و کار.

ارائه و استفاده از واسطه‌ها (API Gateways) که قابلیت کنترل و مدیریت دسترسی به جریان‌های کسب و کار را فراهم می‌کنند.

برچسب خورده:
جهت ارسال ديدگاه وارد شويد و يا ثبت نام كنيد.