Маркер доступа к приложению Shopify - как сделать его более безопасным? - PullRequest
0 голосов
/ 11 октября 2019

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

Какой метод я могу использовать, чтобы сделать это более безопасным? Я думал сохранить токены в автономном режиме, а затем загружать их только тогда, когда это необходимо (на случай, если мне нужно сделать глобальные обновления для всех магазинов), а затем удалить их снова. В случае, когда конфигурация приложения доступа торговца в пределах администратора, я просто сохранил бы это в сессию. Есть ли лучший метод?

1 Ответ

1 голос
/ 12 октября 2019

Хороший вопрос.

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

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

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

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

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

  • не полагайтесь на какие-либо файлы cookie, когда речь идет о разумной информации
  • проверяет подлинность каждого запроса, поступающего с фронта-end
  • не доверяйте пользователю и не проверяйте любые входные данные, поступающие из внешнего интерфейса
  • не слишком усложняйте ваши настройки, хотя хорошо иметь высокий уровень безопасности, это плохо, еслиэто замедляет работу вашего приложения для пользователя, и вы теряете клиентов
  • обращайтесь к другим готовым к использованию популярным решениям, которые могут направить вас по правильному пути
  • не жадничайте с областями приложений,запрашивайте только те области, которые вам нужны для вашего приложения
  • не забывайте убирать за собой, когда это возможно, но не переусердствуйте (слишком много приложений изменяют код клиентов и нарушают его только для предотвращения какого-либоочистите его потом) Пример использования ScriptTag API вместо жидкого фрагмента с использованием Asset API. Если вам нужно использовать Asset API, добавьте только те части, которые, как вы знаете, не сломают сайт. Создание переменной - это нормально, если вы используете var, если сайт поддерживает IE11, создание переменной с использованием const или let не в порядке, или использование vanilla JS - это нормально, но с использованием jQuery, не зная точно, что сайт имеетон установлен глобально не в порядке.

Более подробную информацию по этому вопросу можно увидеть здесь:

https://help.shopify.com/en/api/getting-started/authentication/oauth/api-access-modes https://community.shopify.com/c/Shopify-APIs-SDKs/Best-way-to-store-shops-that-have-installed-my-app-and-their/m-p/402972

...