Angular 2 и NoSQL: безопасно ли показывать идентификатор в параметре маршрута?

#angular #firebase #firebase-realtime-database #nosql

#angular #firebase #firebase-realtime-database #nosql

Вопрос:

У меня есть business узел в моей базе данных NoSQL.

введите описание изображения здесь

В моем приложении angular 2 я пытаюсь отобразить данные бизнеса с такой конфигурацией маршрута: /business/:name .

Затем я заметил, что на самом деле я не могу искать бизнес по его имени в NoSQL.

Мой вопрос:

Обычно ли показывать идентификатор объекта в URL для отображения данных о месте? Если да, безопасно ли это (если правила в порядке)?

В этом случае: /business/-KUNqai...

Если нет, можно ли как-то легко отобразить его имя и найти его без зацикливания каждого объекта?

Ответ №1:

Это должно быть безопасно, если ваши правила в порядке. Кто-то все равно может получить его из сетевых журналов в DevTools, даже если вы его не показываете.

Если вы хотите показывать имена, вы могли бы создать friendly_urls узел и хранить ключи там:

 { "some-name": "-KUNqai..." }
  

затем вы можете использовать /business/some-name и искать там его ключ перед загрузкой данных.

Комментарии:

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

2. @AniruddhaDas Лично я не верю в скрытие вещей, это просто дает вам ощущение ложной безопасности. Вы должны предположить, что хакеры знают, что делать, и защитить ваш код от них. С другой стороны, вы можете предположить, что обычный пользователь даже не смотрит на адресную строку (когда вы в последний раз просматривали адресную строку в своем почтовом приложении? :). В какой-то момент вы должны доверять своим пользователям. И, попросив их войти в систему, вы доверяете им, чтобы они не злоупотребляли вашим приложением. Итак, для всего, что не является общедоступным (например, разделяемая ссылка), вы можете просто использовать идентификаторы и не усложнять себе жизнь…

3. согласен, но некоторое время нам нужно защищать каждый бит информации, такой как банковское приложение

4. Я не делаю дружественные URL-адреса из-за «скрытия». Я использую дружественный URL, потому что это улучшает качество продукта и лучше понимает, где вы находитесь. В моем случае это не для SEO, но если вы хотите SEO для своего приложения, вам лучше использовать понятные URL.

Ответ №2:

Добавление пользовательских данных в URL-адрес всегда небезопасно, так как все могут видеть, и это просто параметр запроса.

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

  moveToAnotherPage(value: string, params : any) {
    this.router.navigate([value, params], {skipLocationChange: true});
  }
  

this.router.navigate([значение], {skipLocationChange: true});

вы видите мои подробности по ссылке ниже.

ссылка на код в git

вы можете попробовать этот генератор с помощью

 npm install -g generator-angular2-with-router
yo angular2-with-router
npm instal
npm start
  

Комментарии:

1. Но тогда пользователь не может использовать этот маршрут напрямую, потому что параметров вообще нет?

2. вы можете передать параметры методу и добавить его в свой this.route.navigate(). он принимает параметры

3. добавлен ввод параметров в метод

4. Знание чьего-либо идентификатора пользователя не позволяет вам выдавать себя за этого пользователя. Мой идентификатор в Stack Overflow — это 209103 , эта информация общедоступна. Но если вы не знаете учетные данные, с помощью которых я вхожу в систему, это безвредная информация. Все, что он делает, это идентифицирует мою пользовательскую запись в базе данных Stack Overflow. Нет ничего небезопасного в отображении идентификатора пользователя в URL.

5. Предоставление идентификаторов пользователей в URL-адресах не представляет угрозу безопасности. Это применимо одинаково для всех типов сайтов. Мой идентификатор онлайн-банка — frankvanpuffelen. Знание этого никоим образом не поможет вам, если у вас нет доступа к моим учетным данным и моему второму фактору аутентификации.