Логическая безопасность действий текущего пользователя

Привет, Роберт!

Я проанализировал код плагинов и кодовую базу, касающуюся управления постами (действиями), чтобы определить, где можно усилить безопасность.

Как выяснилось, на стороне фронтенда есть несколько шагов, проверяющих, может ли пользователь редактировать пост:

  • Шаг 1: SiteSetting.post_menu_hidden_items
  • Шаг 2: attrs.canEdit
  • Шаг 3: editPost() - !post.can_edit - контроллеры темы

Однако даже если эти проверки будут обойдены на фронтенде, при отправке запроса на сервер бэкенда в posts_controller.rb, в методе:

def update

Rails снова загружает пост, выполняя окончательные проверки:

  • !guardian.public_send(“can_edit?”, post)
  • guardian.ensure_can_edit!(post)
  • PostRevisor

Спасибо за ваши идеи!
Это очень полезно.