【问题标题】:Securing PHP scripts - Shopify保护 PHP 脚本 - Shopify
【发布时间】:2017-09-14 10:06:21
【问题描述】:

基本上我的问题和这个类似:

How to secure php scripts?

稍有不同,另一边是 Shopify。

背景信息: Shopify 用户购买了一些积分(Audible 风格),并想知道他有多少可用积分。他登录到他的帐户,那里显示他有 X 点数。

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

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

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

Shopify 文档上有大量关于以其他方式保护连接的信息,即确保只有正确的脚本才能访问 Shopify 数据库,但没有关于我的问题。

据我所知,我只能访问 Shopify 上的 JS,这会产生问题,因为我发送到服务器的所有内容都对所有人可见。

谢谢

编辑:我刚刚阅读了 CSRF。我可以很容易地对来源和标头进行检查,但是这些都可以伪造,对吧?

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

编辑 3:@deceze 的评论和@Jilu 的回答让我思考。是的,你是对的,我需要这样做,但我无权访问 Shopify 的后端,因此我无法创建会话。但是,我能做的(如果我弄清楚 js 中的方法)是散列它。 PHP 登录脚本在 password_hash 上运行。这样您就不会在数据库中存储密码。密码获取在数据库中再次验证哈希(或您调用的任何内容),它是真或假。如果为真,则表示您已登录。所以我可以尝试使用特定字符串(使其非常长)和用户 ID 生成令牌。将其与请求一起发送,并使用 password_verify 或其他什么,针对用户进行检查。弹出肯定的那个是请求信息的登录用户。那是假设我可以在 Shopify 中隐藏字符串...

【问题讨论】:

  • 您只需要一个身份验证/会话系统。确保用户已通过身份验证并登录(可能使用会话),然后读取他们的并且仅读取他们的数据。完毕。我不知道它在 Shopify 中究竟是如何工作的。

标签: javascript php ajax shopify


【解决方案1】:

Step1:做一个会话登录系统。 Step2:在Ajax之前,在你的表单或者请求页面中生成一个随机token,放入一个input display none,用POST发送。 每次验证令牌是否已设置并且与您获得的相同。

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

【讨论】:

    【解决方案2】:

    您使用共享密钥(Shopify 和服务器都有)和客户端 ID 创建一个令牌。

    在 Shopify 上:

    {% assign my_secret_string = "ShopifyIsAwesome!" | hmac_sha256: "secret_key" %}
    My encoded string is: {{ my_secret_string }}
    

    在服务器上:

    我们将根据数据库中的值检查接收到的哈希值,因此我们需要使用相同的算法和密钥对本地客户端 ID 进行哈希处理(这可能应该在接收到 Customer Creation webhook 时完成)。

    哈希 ID 使用:http://php.net/manual/en/function.hash-hmac.php

    $hashed_id = hash_hmac('sha256', '$client_id', 'secret_key');
    

    比较哈希使用:http://php.net/manual/en/function.hash-equals.php

    $check = hash_equals($hashed_id, $received_id);
    

    然后,所需要的就是遍历数据库,直到找到匹配项。可能有更快的方法。

    【讨论】:

      猜你喜欢
      • 2012-05-22
      • 1970-01-01
      • 2014-10-10
      • 2011-04-23
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多