API1:2023 - Broken Object Level Authorization چیست
API1:2023 - Broken Object Level Authorization
این آسیب پذیری به سبب عدم بررسی مجوز دسترسی به منابع و اشیا رخ می دهد و مهاجم به واسطه آن می تواند به منابع و داده های گروه های کاربری و سیستم دسترسی پیدا نماید. بررسیهای مجوز دسترسی به سطح اشیا باید در هر تابعی که با استفاده از یک شناسه از کاربر به یک منبع داده دسترسی مییابد، در نظر گرفته شود.
مثال:
درخواست GET برای دریافت جزئیات یک محصول با شناسه محصول:
GET /api/products/{product_id} کد آسیب پذیر(NET.): // Non-compliant code public class UserController : ApiController { [HttpGet] public User GetUser(int userId) { User user = UserRepository.GetUserById(userId); return user; } [HttpPut] public IHttpActionResult UpdateUser(User user) { UserRepository.UpdateUser(user); return Ok(); } }
پیشگیری (NET.):
// Compliant code public class UserController : ApiController { [HttpGet] [Authorize(Roles = "Admin")] public User GetUser(int userId) { User user = UserRepository.GetUserById(userId); return user; } [HttpPut] [Authorize(Roles = "Admin")] public IHttpActionResult UpdateUser(User user) { UserRepository.UpdateUser(user); return Ok(); } }
کد آسیب پذیر (جاوا):
// Non-compliant code @RestController public class UserController { @GetMapping("/users/{userId}") public User getUser(@PathVariable int userId) { User user = UserRepository.getUserById(userId); return user; } @PutMapping("/users/{userId}") public ResponseEntity<?> updateUser(@PathVariable int userId, @RequestBody User user) { UserRepository.updateUser(user); return ResponseEntity.ok().build(); } }
پیشگیری (جاوا):
// Compliant code public class UserController : ApiController { [HttpGet] [Authorize(Roles = "Admin")] public User GetUser(int userId) { User user = UserRepository.GetUserById(userId); return user; } [HttpPut] [Authorize(Roles = "Admin")] public IHttpActionResult UpdateUser(User user) { UserRepository.UpdateUser(user); return Ok(); } }
پیشنهادات کلی جلوگیری:
در هر تابع که با استفاده از شناسه کاربر به منبع داده دسترسی مییابد، بررسیهای لازم را برای مجوز دسترسی به سطح اشیا در نظر بگیرید. اطمینان حاصل کنید که کاربر مجاز به دسترسی به این منبع است.
از تأیید صحت شناسهها و مجوزها در هر درخواست استفاده کنید. مطمئن شوید که کاربری که اقدام به دسترسی به یک شیء خاص میکند، مجاز به انجام این عمل است.
از نحوه ارسال شناسه کاربر در درخواستها محافظت کنید. از استفاده از روشهای امن برای انتقال و ذخیره شناسه استفاده کنید، مانند استفاده از توکنهای اعتبارسنجی.