Javascript 保护PHP脚本-Shopify

Javascript 保护PHP脚本-Shopify,javascript,php,ajax,shopify,Javascript,Php,Ajax,Shopify,基本上,我的问题与此类似: 有一点不同,另一方面是Shopify 背景资料: Shopify用户购买了一些信用卡(声音风格),并想知道他有多少信用卡。他登录到他的帐户,上面说他有X个学分 这个数字来自对我的服务器的AJAX调用(我拥有完全控制权),其中有一个简单的php脚本,用于检查db中的值(使用Shopify的Webhook进行更新,我认为每个Webhook都需要验证,以确保其安全性) 脚本使用客户ID进行查找,该值需要以某种方式传递给脚本,这允许外部人员继续运行它,直到他拥有所有ID和相

基本上,我的问题与此类似:

有一点不同,另一方面是Shopify

背景资料: Shopify用户购买了一些信用卡(声音风格),并想知道他有多少信用卡。他登录到他的帐户,上面说他有X个学分

这个数字来自对我的服务器的AJAX调用(我拥有完全控制权),其中有一个简单的php脚本,用于检查db中的值(使用Shopify的Webhook进行更新,我认为每个Webhook都需要验证,以确保其安全性)

脚本使用客户ID进行查找,该值需要以某种方式传递给脚本,这允许外部人员继续运行它,直到他拥有所有ID和相应的信用值

所以,我的问题是,我该如何阻止这种情况?我如何确保只有经过身份验证的用户才能检查它,并且只能检查他们的ID

Shopify文档中有大量关于以另一种方式保护连接的信息,即确保只有正确的脚本才能访问Shopify db,但与我的问题无关

据我所知,我只能在Shopify上访问JS,这就产生了问题,因为我发送到服务器的所有内容都是所有人都可以看到的

谢谢

编辑:我刚刚读了CSRF。我可以很容易地实现对源代码和标题的检查,但这些都是伪造的,对吗

编辑2:我通过使用元字段解决了这个问题。因此,我没有将所有这些信息存储在服务器的数据库中,而是使用Customer元字段来存储可用的信用。Webhook是安全的,所以这很好。但它仍然无法解决下一阶段的问题。客户仍然需要能够使用他们的信用卡并获得由我的服务器生成的数字产品。所以我仍然需要验证请求


编辑3:由@deceze发表的评论和由@Jilu给出的答案让我思考。是的,您是对的,我需要这样做,但我无法访问Shopify上的后端,因此无法创建会话。然而,我能做的(如果我知道如何在js中)是散列它。PHP登录脚本在密码\u散列上运行。这样,就不会在数据库中存储密码。在db中再次验证密码get哈希(或您调用的任何内容),它要么为true,要么为false。如果为true,则表示您已登录。因此,我可以尝试使用特定字符串(使其非常长)和用户id生成令牌。将其与请求一起发送,并使用密码\u验证或其他方法,对照用户进行检查。pops阳性的用户是请求信息的登录用户。这是假设我可以在Shopify中隐藏字符串…

步骤1:执行会话登录系统。 步骤2:在使用Ajax之前,在表单或请求页面中生成一个随机令牌,将其放入输入显示none,然后随POST一起发送。 每次验证是否设置了令牌并且与您获得的令牌相同

现在,您已经验证了用户是否确实使用会话登录。
你检查了他是否在正确的页面上。

步骤1:建立会话登录系统。 步骤2:在使用Ajax之前,在表单或请求页面中生成一个随机令牌,将其放入输入显示none,然后随POST一起发送。 每次验证是否设置了令牌并且与您获得的令牌相同

现在,您已经验证了用户是否确实使用会话登录。
您检查了他的页面是否正确。

您使用共享机密(Shopify和server都有)和客户端ID创建了一个令牌

关于Shopify: 在服务器上: 我们将根据数据库中的值检查收到的散列值,因此我们需要使用相同的算法和密钥散列本地客户端ID(这可能应该在收到客户创建webhook时完成)

哈希ID使用:

使用以下方法比较哈希:


然后所需要的就是在数据库中循环,直到找到匹配项为止。可能有更快捷的方法。

您可以使用共享机密(Shopify和server都有)和客户端ID创建令牌

关于Shopify: 在服务器上: 我们将根据数据库中的值检查收到的散列值,因此我们需要使用相同的算法和密钥散列本地客户端ID(这可能应该在收到客户创建webhook时完成)

哈希ID使用:

使用以下方法比较哈希:


然后所需要的就是在数据库中循环,直到找到匹配项为止。可能有更快捷的方法。

您只需要一个身份验证/会话系统。确保用户已通过身份验证并登录(可能使用会话),然后仅读取其数据。完成。我不知道这在Shopify中到底是如何工作的。你只需要一个身份验证/会话系统。确保用户已通过身份验证并登录(可能使用会话),然后仅读取其数据。完成。我不知道这在Shopify中到底是如何工作的。
{% assign my_secret_string = "ShopifyIsAwesome!" | hmac_sha256: "secret_key" %}
My encoded string is: {{ my_secret_string }}
$hashed_id = hash_hmac('sha256', '$client_id', 'secret_key');
$check = hash_equals($hashed_id, $received_id);