Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Это ошибка безопасности при работе с api или нет? (https://javascript.ru/forum/misc/80474-ehto-oshibka-bezopasnosti-pri-rabote-s-api-ili-net.html)

micscr 09.06.2020 09:13

Это ошибка безопасности при работе с api или нет?
 
Привет.
Человек выставил свой пример сборки на vue и там данные берутся из API стороннего сервиса. Доступ по ключу, который он в личном кабинете на том сайте получил.
И вот этот ключ прекрасно виден всем посетителям сайта.
На php обычно все такие вещи скрыты, даже от членов одной команды - окружение локальное vs prod.
А тут открытенько.
Ну допустим там информация может не такая ценная, но в общем то - он нарушил тут ? Есть какие то стандарты вот такой работы с закрытым API, когда из js-а виден запрос к API? (когда это не один сайт с аутенификацией и т.д.)

Nexus 09.06.2020 13:11

Если проект для «поиграться», то пофигу светится ли api-key или нет, если нет, то стоит скрыть api-key, например проксируя запросы своим сервером.
Если api-key жестко привязан к конкретному домену, то тут опять пофигу светится он в приложении или нет.

Если у production окружения уведут api-key стороннего сервиса, который никак не защищен, то у злоумышленника появится возможность нарушить работу сервера жертвы, например, путем превышения всевозможных лимитов при работе с api.

micscr 09.06.2020 13:43

Цитата:

Сообщение от Nexus (Сообщение 525610)
Если проект для «поиграться», то пофигу светится ли api-key или нет, если нет, то стоит скрыть api-key, например проксируя запросы своим сервером.

Ну там явно поиграться, но звоночек то неприятный, сам факт что так решил делать
Цитата:

Сообщение от Nexus (Сообщение 525610)
Если api-key жестко привязан к конкретному домену, то тут опять пофигу светится он в приложении или нет.

А как ихний сервер определит с какого домена и откуда этот запрос?
Цитата:

Сообщение от Nexus (Сообщение 525610)
Если у production окружения уведут api-key стороннего сервиса, который никак не защищен, то у злоумышленника появится возможность нарушить работу сервера жертвы, например, путем превышения всевозможных лимитов при работе с api.

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

Nexus 09.06.2020 13:51

Цитата:

Сообщение от micscr
А как ихний сервер определит с какого домена и откуда этот запрос?

С помощью заголовков.

micscr 09.06.2020 13:59

Все эти заголовки, рефереры, подделываются легко

Nexus 09.06.2020 14:03

Цитата:

Сообщение от micscr
Все эти заголовки, рефереры, подделываются легко

Из браузера заголовок Origin подменить не выйдет, другое дело, если это будет сервер.

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

Rise 09.06.2020 14:19

Цитата:

Сообщение от micscr
На php обычно

Причем здесь php? Ты вообще отличаешь клиент-сервер/frontend-backend? frontend он всегда такой html+css+js, а backend он разный php/java/nodejs/... Как на php вещи скрыты, так и на node.js они могут быть скрыты. Да, то что человек сделал - неправильно, но он мог это сделать и при наличии php. Просто js это единственный язык, который можно использовать по обе стороны приложения. nuxt.js это просто абстракция от клиент-серверной архитектуры (введение), чтобы ты на одном языке всё мог писать, которая состоит из vue.js (клиент) + node.js (сервер) + webpack.js (сборщик) + babel.js (компилятор). vue.js это просто пользовательский интерфейс (введение), который ты можешь прикрутить хоть к php. Из-за этой nuxt-абстракции у тебя видимо и такая иллюзия...

micscr 09.06.2020 14:47

Да нет у меня никакой иллюзии. Ноду я не упоминал т.к. с ней не работаю на сервере, а так то понятно что она, что php в этом контексте взаимозаменяемы.
Меня удивило что тот человек такое в коде отморозил, поэтому и поинтересовался, может какой есть хитрый способ на фронте такое проворачивать. Но уже понял что нет, без бэкенда не обойтись, что славно.

As a rule of thumb, never include credentials in client side JavaScript.


Часовой пояс GMT +3, время: 09:04.