Безопасность маршрутов на маршрутизаторе Vue

Я изучаю Vue уже 2 недели и не могу найти ответа на этот вопрос о безопасности маршрутизации.

Когда я защищаю маршруты во Vue с помощью мета-полей и защиты маршрутизации, как на экзамене, мне интересно, что может сделать клиент, чтобы все еще видеть компоненты.

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      children: [
        {
          path: 'bar',
          component: Bar,
          // a meta field
          meta: { requiresAuth: true }
        }
      ]
    }
  ]
})



router.beforeEach((to, from, next) => {
  // check if authenticated by jwt from store or localstorage
})

Маршрут /foo/bar защищен перехватчиком beforeEach и метаполем requiresAuth. Но весь этот код находится на стороне клиента (как минифицированная версия, но все еще там). Пользователь мог изменить код и увидеть компонент. Я знаю, что мне нужно снова защитить все маршруты api на Backend, чтобы пользователь не мог получить какую-либо личную информацию. Но пользователь возможно мог видеть защищенный компонент. Насколько я понимаю, нет возможности спрятать компонент от пользователя в 100% безопасности?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
0
3 360
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если пользователь изменяет код внешний интерфейс, тогда составная часть будет доступен для просмотра, да.

Но данные, который будет заполнять этот компонент, должен не быть видимым из-за того, что серверная часть ограничивает доступ к таким данным.

Если бэкэнд не ограничивает его, это большая ошибка безопасности, независимо от Vue (злоумышленник может запросить у API напрямую без JS-клиента).

Что касается маршрутов, аутентификация, которую вы выполняете, в большей степени является проблемой рабочего процесса / удобства использования. Это потому, что, как правило, нет способа предотвратить изменение кода внешнего интерфейса. Вы можете сделать минификацию + углификацию, чтобы усложнить задачу, но это все. (Обычно минификация выполняется для повышения производительности, даже не из соображений безопасности.)

Взгляните на Vue-Router / ленивая загрузка маршрутов, если вы хотите разбить приложение на куски:

When building apps with a bundler, the JavaScript bundle can become quite large, and thus affect the page load time. It would be more efficient if we can split each route's components into a separate chunk, and only load them when the route is visited.

Технически вы можете защитить фрагмент, сделав его доступным для загрузки только с определенными разрешениями. Вы должны спросить себя, действительно ли работа, необходимая для достижения этого, стоит того, хотя .

Спасибо! Это то, что я ищу. Я знаю, что мне нужно защитить бэкэнд, но мне было интересно, будет ли виден компонент без данных бэкэнда мог.

Blackfaded 11.03.2018 19:28

Да, может. Если вы не выполните ту часть, о которой я упоминаю в конце, о «защите куска». Но я даже не знаю, встроено ли оно в фреймворки (полагаю, что нет). Между прочим, безопасность и проверка всегда должны происходить на бэкэнде, так как, как вы знаете, злоумышленник может обойти такие ограничения, если они действуют только во фронтенде.

acdcjunior 11.03.2018 19:32

В моем приложении мне не нужно защищать некоторые компоненты, но представьте себе компонент для администраторов, у которого есть заголовок с заголовком «сотрудники, которых нужно уволить». Сотрудник должен не сможет видеть, что этот компонент вообще существует. Ленивая загрузка звучит неплохо для такого рода задач. Спасибо за разъяснение!

Blackfaded 11.03.2018 19:37

В этом случае заголовок должен быть своего рода данными, поступающими из бэкэнда.

acdcjunior 11.03.2018 19:50

Одна вещь, которую я не понимаю, заключается в том, что если компонент доступен для просмотра из-за вмешательства во внешнем интерфейсе и хук created () в этом компоненте извлекает данные из, скажем, хранилища огня, как следует защитить данные, когда хакер запускает измененный страницу со своего компьютера, потому что технически это тот же компонент, который запрашивает данные?

mcy 14.01.2019 10:49

Это тот же компонент, но вы должны предоставить учетные данные (например, через JWT) бэкэнду для получения данных. Измененная страница получит 401 неавторизованный запрос при запросе защищенных данных без предоставления учетных данных.

Blackfaded 18.01.2019 00:31

Я все еще ищу решение. Разделение на куски не решает проблему, потому что вам нужно ограничить доступ на вашем сервере, где вы можете столкнуться с проблемами, такими как: «Как установить заголовки для импорта?» - тоже вопрос без ответа. ...ПОМОЩЬ!?

Fusseldieb 02.12.2019 19:55

@Fusseldieb, возможно, установит идентификацию в cookie, который должен быть отправлен при запросе блока. Однако вам, вероятно, понадобится какой-то собственный код, чтобы обработать его в вашем бэкэнде (тот, который обслуживает чанки).

acdcjunior 03.12.2019 00:24

@acdcjunior Этот подход действительно сработал !! Если я отправляю файл cookie с сервера Express, браузер отправляет его обратно, независимо от того, пришел он из Vue-Webpack или Axios. Единственный недостаток: вы не можете использовать JWT (по крайней мере, традиционным способом), но он наконец-то работает, вот что важно! Большое спасибо за этот совет. На этот вопрос напишу ответ позже (когда действительно заработает, пока только тестирую). В настоящее время я пишу "app.use", который проверяет запрошенные имена js-файлов, проверяет, существует ли файл cookie аутентификации и, если он действителен, он пропускает файл. Файл js obv. необходимо разбить по маршрутам.

Fusseldieb 03.12.2019 14:52

Я не шучу, @acdcjunior, никто имеет (имел) решение для этого, каким бы смешным оно ни казалось. Все просто обходят вопросы, говоря, что проверки внешнего интерфейса достаточно, и если API защищен, этого должно быть достаточно - но на самом деле так не работает. Подход с использованием файлов cookie, теперь, когда вы упомянули о нем, казался настолько простым (?), Что я даже не думал об этом. Я слишком усложнял (JWT, заголовки и т. д.)

Fusseldieb 03.12.2019 14:56

Другие вопросы по теме