代码之家  ›  专栏  ›  技术社区  ›  Noldor130884

防止第三方操纵XML文件

  •  1
  • Noldor130884  · 技术社区  · 9 年前

    我今天的问题是,我必须保护我要从我的互联网网站分发的XML文件不受第三方操纵。
    如果我对XML没有任何经验,我将尽可能清楚。

    首先,让我澄清一下,这些XML基本上是作为对下载它们的“客户”的礼貌而分发的,为了插入到他们的数据库中,必须阅读它们。它们基本上是 数据库的条目 。我无法避免这样做。XML文件 以这种方式分配 我无法识别下载它们的“客户”。

    我不知道为什么我的“客户”应该接受其他来源的文件,但是 能够 可能发生的可能性。如果是这样的话,这些其他来源也可以下载、读取、修改我的XML(它是纯文本)的参数,并将修改后的文件转发给最终用户(“客户端”)。

    我以为我可以实现一个校验和方法,但从长远来看,第三方可以找到算法,并提供一个修改过的文件和正确的校验和。
    是否有任何方法对这些XML进行签名,以便在掺假后丢失签名?

    2 回复  |  直到 9 年前
        1
  •  2
  •   gbuzogany    9 年前

    任何公钥加密算法都可以解决您的问题(这是它们可以提供的功能之一,即真实性):

    http://en.wikipedia.org/wiki/Public-key_cryptography

    最重要的一点是,客户需要检查签名是否有效。要么他们手动执行,要么你可以提供一个程序让他们检查它是否有效。

    步骤:

    • 选择您选择的公钥加密算法(例如:RSA、PGP)
    • 生成公钥和私钥。
    • 公钥将被公开放置在您的网站上,因此客户端可以访问它(您可以提供您所拥有的XML文件)。你应该保守私钥的秘密(这保证了没有人可以冒充你)。
    • 使用任何算法创建文件的哈希(例如:SHA256)。
    • 使用私钥为此哈希创建签名。这将确保哈希有效。
    • 任何客户端都可以使用相同的算法创建哈希,并使用公钥检查签名是否有效(文件未被修改,是您签署的)。

    例如,您可以使用OpenSSL来完成以下所有操作:

    要创建哈希(由您签名,由客户验证):

    openssl dgst -sha256 data.txt > hash 
    

    要签名:

    openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in hash > signature
    

    验证签名:

    openssl rsautl -verify -inkey publickey.pem -keyform PEM -in signature
    
        2
  •  0
  •   Community CDub    7 年前

    如果文本数据的安全性至关重要,那么它必须通过可信信道带外传输。

    您的客户可以根据需要从您的网站获取记录,您可以使用加密哈希对其进行数字签名,如@ gbuzogany .

    然后,让用户定期连接到您的网站,以检索个性化密钥,他们可以使用该密钥从数据库中提取数据。

    通过这种方式,您可以控制访问密钥的生命周期,但任何客户都可以免费使用数据。任何第三方数据都不会从您的主密钥生成哈希,应用程序也不会成功读取。

    然后,应用程序将忽略使用获取的密钥验证的未经验证的记录。

    参见: