Shopify 应用程序访问令牌 - 如何使其更安全?
Shopify app access token - how to make it more secure?
当店主安装我的应用程序时,我将访问令牌保存到数据库中供以后使用。从商店获得访问令牌是一项巨大的安全责任,因为拥有这些令牌的任何人都可以从任何 domain/address 修改商店,没有 ip 或域锁定。
我可以使用什么方法使它更安全?我想离线保存令牌,然后仅在需要时上传它(以防我需要对所有商店进行一些全局更新),然后再次删除它。如果商家在管理员中访问应用程序配置,我会将其保存到会话中。有没有更好的方法?
好问题。
我也将它们保存在数据库中,但我使用与 Shopify 应用程序密码不同的密钥对它们进行编码。这样即使有人因为某些后门入口可以访问数据库,他也将无法使用它们。也就是说,如果有人可以访问代码,他将能够弄清楚如何解密它,因为他可以访问密钥。
也就是说,我确保在显示来自服务器的任何响应之前,每个请求都经过身份验证。由于我使用 NodeJS 作为后端,因此我确保没有可以从不同商店访问或修改的全局变量。一切都在单独的函数中整齐地划分范围,以便会话在当前商店的范围内,没有其他人能够弄脏其他商店会话。
此外,我确保有一个 webhook 在客户卸载他的应用程序时触发,以便从我的数据库中清除他商店的任何信息。
我知道有些人为此使用会话(在线方法),但他们提出了我不喜欢的其他问题,所以我坚持使用数据库(离线),因为这是访问应用程序而不是访问应用程序的更快方法多次重定向以保存会话。
至于建议,我可以给你一些我在构建一些基本应用程序时学到的技巧。 (无论如何我都不是这方面的专家)
- 在涉及敏感信息时不要依赖任何 cookie
- 验证来自前端的每个请求
- 不要相信用户并验证来自前端的任何输入
- 不要让您的设置过于复杂,虽然具有高安全性是好事,但如果它让您的应用对用户来说速度变慢并且您会失去客户,那就不好了
- 寻找其他可以引导您找到正确路径的现成可用的流行解决方案
- 不要对应用范围贪得无厌,只请求应用所需的范围
- 记得在可能的情况下自己清理,但不要过度(太多的应用程序修改客户的代码并破坏它只是为了防止之后以任何方式清理它)示例使用 ScriptTag API 而不是使用资产 API 的液体片段。如果您必须使用资产 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
当店主安装我的应用程序时,我将访问令牌保存到数据库中供以后使用。从商店获得访问令牌是一项巨大的安全责任,因为拥有这些令牌的任何人都可以从任何 domain/address 修改商店,没有 ip 或域锁定。
我可以使用什么方法使它更安全?我想离线保存令牌,然后仅在需要时上传它(以防我需要对所有商店进行一些全局更新),然后再次删除它。如果商家在管理员中访问应用程序配置,我会将其保存到会话中。有没有更好的方法?
好问题。
我也将它们保存在数据库中,但我使用与 Shopify 应用程序密码不同的密钥对它们进行编码。这样即使有人因为某些后门入口可以访问数据库,他也将无法使用它们。也就是说,如果有人可以访问代码,他将能够弄清楚如何解密它,因为他可以访问密钥。
也就是说,我确保在显示来自服务器的任何响应之前,每个请求都经过身份验证。由于我使用 NodeJS 作为后端,因此我确保没有可以从不同商店访问或修改的全局变量。一切都在单独的函数中整齐地划分范围,以便会话在当前商店的范围内,没有其他人能够弄脏其他商店会话。
此外,我确保有一个 webhook 在客户卸载他的应用程序时触发,以便从我的数据库中清除他商店的任何信息。
我知道有些人为此使用会话(在线方法),但他们提出了我不喜欢的其他问题,所以我坚持使用数据库(离线),因为这是访问应用程序而不是访问应用程序的更快方法多次重定向以保存会话。
至于建议,我可以给你一些我在构建一些基本应用程序时学到的技巧。 (无论如何我都不是这方面的专家)
- 在涉及敏感信息时不要依赖任何 cookie
- 验证来自前端的每个请求
- 不要相信用户并验证来自前端的任何输入
- 不要让您的设置过于复杂,虽然具有高安全性是好事,但如果它让您的应用对用户来说速度变慢并且您会失去客户,那就不好了
- 寻找其他可以引导您找到正确路径的现成可用的流行解决方案
- 不要对应用范围贪得无厌,只请求应用所需的范围
- 记得在可能的情况下自己清理,但不要过度(太多的应用程序修改客户的代码并破坏它只是为了防止之后以任何方式清理它)示例使用 ScriptTag API 而不是使用资产 API 的液体片段。如果您必须使用资产 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