Parse platform Parse PHP SDK完全忽略主密钥更改

Parse platform Parse PHP SDK完全忽略主密钥更改,parse-platform,parse-server,Parse Platform,Parse Server,因此,为了保证安全,我们决定更改解析服务器的主密钥 我们的iOS一直在工作,因为它只需要应用程序id,这是意料之中的,但令人惊讶的是,我们的PHP脚本也一直在运行,即使它们是用错误的主密钥初始化的 Parse PHP SDK是否完全忽略主密钥更改 我们怎样才能防止旧的php脚本碰巧有一个应用程序密钥来访问我们的解析和“读取”数据 根据文件: ParseClient::initialize('YOUR_APP_ID', '', 'YOUR_MASTER_KEY'); ParseClient::

因此,为了保证安全,我们决定更改解析服务器的主密钥

我们的iOS一直在工作,因为它只需要应用程序id,这是意料之中的,但令人惊讶的是,我们的PHP脚本也一直在运行,即使它们是用错误的主密钥初始化的

  • Parse PHP SDK是否完全忽略主密钥更改
  • 我们怎样才能防止旧的php脚本碰巧有一个应用程序密钥来访问我们的解析和“读取”数据 根据文件:

     ParseClient::initialize('YOUR_APP_ID', '', 'YOUR_MASTER_KEY');
     ParseClient::setServerURL('http://YOUR_PARSE_SERVER:1337/parse');
    

    我给你的建议如下

    使用
    RestKey
    for
    PHP
    作为第二个参数,然后使用
    clientKey
    作为第二个参数

    只需确保将
    restKey
    clientKey
    添加到构造服务器端

    我的工作迅捷3的例子了

     let configuration = ParseClientConfiguration {
                $0.applicationId = PARSE_APP_KEY
                $0.clientKey = PARSE_CLIENT_KEY
                $0.server = PARSE_URL
                $0.isLocalDatastoreEnabled = true
    
            }
            Parse.initialize(with: configuration)
    
    编辑/引用:

    如果查看
    ParseClient::initialize
    主密钥存储在静态变量
    $masterKey中。
    这用于
    ParseClient::_getRequestHeaders
    (请求使用主密钥时)以主密钥作为值提供
    X-Parse-master-key

    肯定会使用主密钥,但这取决于请求。如果
    $useMasterKey
    对于
    ParseClient::_request
    中的给定请求为false(默认值也为false),则不会将主密钥添加到请求头中。在这种情况下,不会使用主密钥,但这是预期的行为。

    1。)是的,parse php sdk不会对主密钥进行任何验证。验证发生在正在运行的解析服务器一侧。基本上,主密钥的存在允许覆盖中提到的ACL。当发送要求使用主密钥的请求时,会将其提交给服务器

    基本上,如果您发出任何需要覆盖ACL的请求并指示使用主密钥,则会发送主密钥。在其他情况下,不会发送主密钥。您可以通过编写一些将发送主密钥的快速代码来测试这一点,如
    $object->save(true)
    。在这种情况下,如果主密钥与服务器中加载的内容不匹配,则主密钥将失败

    2.)你真的无法阻止别人找出你的应用程序Id。你所寻找的安全性在客户端不如在服务器端。您应该确保设置对象和类ACL,以限制对不希望被任意个人读取(或写入)的所有对象(和类)的访问。角色是将其应用于广泛对象集的一种相当好的方法,例如限制对管理员角色的访问。如果你锁定了你的数据,那就需要有人通过访问给定数据来破坏现有帐户,而不仅仅是使用你的应用程序Id

    这就是说,您应该始终提防可能会设法获取您的主密钥的人,因为这将允许他们绕过您设置的所有ACL(保持安全!)


    我希望这有助于澄清主密钥的作用。

    No PHP SDK不会忽略主密钥。只需检查sdk和解析服务器是否运行相同的密钥。感谢您的回复。这就是问题所在。我们更改了解析服务器主密钥,但将旧的主密钥保留在php的init中。这个脚本不知怎的仍然有效。我们尝试了各种方法来阻止php工作。例如,我们在服务器上启用了RestKey,现在只有在第二个参数中提供了RestKey时,php才能工作。这本可以解决问题,但iOS现在不起作用。需要找到一种在不取消iOS授权的情况下取消php授权的方法。在更改解析服务器后是否重新启动了它?c'mon@Cliffordwh。我们整晚都在重启。我们尝试了错误的主密钥,即使没有主密钥,让我们的php仍然可以运行。我很困惑。ParseClient::initialize('d4n1ts8JiyGSDu9OYKSSrEoXG3dx','');(显然我在发布前更改了appid)我会尝试快速复制!请给我一个简单的答案,并花时间在上面。我们面临的问题是,iOS已经发货并投入生产。您在iOS初始化中传递了什么@bendigijust应用程序id和服务器url。如果我现在能找到一种方法来修补服务器,那也很好。原始文档说不传递客户id,不需要。我希望现在我至少会添加一个空字符串。是的,我知道,但它会起作用!我已经让iOS和php按照上述方式运行。但是,是的,不需要客户端id。只是出于兴趣,当你添加restkey时,你从iOS中得到了什么错误?你提到php然后工作,但不是iOS?谢谢你的答复。我理解ACL的概念,但是你会如何设计它呢。A类包含所有应用程序用户都可以阅读的产品(无论他们是否登录)。但是,单个产品行属于某个用户,仅当该用户登录时才应进行修改。PHPSDK可以读取和修改所有产品(建议使用MasterKey)。您如何防止第三方在没有适当身份验证的情况下读取Class a?我错过什么了吗?没问题!为了确保行只能由用户修改(但所有用户都可以读取),您只需设置ACL,使public可以读取,但只有拥有ACL的用户可以写入。对于第三方读取,只有从ACL中删除公共读取,才能防止这种情况。您可以将其替换为“用户”之类的角色,并确保每个人都在其中,但这将意味着未登录的用户现在将无法阅读。你现在手头有点紧,你必须根据你的情况选择哪些是公开的,哪些不是。谢谢。。只要不变成烫伤,捏一下就好。我真的很感激你花在这件事上的时间。