安全地从一个站点发送数据到另一个站点

时间:2009-06-25 17:37:26

标签: php security php4 data-transfer

我要将一些数据从一个网站发布到另一个网站。我需要一种方法让接收网站确保数据是从发送网站发送的,而不是由其他恶意用户发送的。我使用的是PHP4。

我该怎么做?

谢谢!

5 个答案:

答案 0 :(得分:3)

只需使用双向ssl。客户端使用ssl证书在服务器上进行身份验证,而不仅仅是相反。

所以服务器知道它是正确的客户端,他获得了数据表格。

客户端知道他将数据发送到正确的服务器

答案 1 :(得分:1)

抖动解决方案(双向SSL)有效。但是,一种可能更简单的方法是使用单向SSL(验证接收服务器)和Basic Auth。 SSL提供机密性,Basic Auth对客户端进行身份验证。

答案 2 :(得分:1)

仅适用于PHP的解决方案:

如果您可以保密(两端),那么您可以使用Keyed-Hash Message Authentication Code (HMAC or KHMAC).

的自我实现的变体(是的,变体)

这个概念是,如果你在两端都有相同的秘密,你可以在发送端散列(消息+秘密),并在接收端散列(消息+秘密)。如果哈希值匹配,那么您将收到有效消息。

秘密是关键(双关语)。因为没有这个秘密,攻击者可能会改变消息并生成一个新的哈希,这将在接收端进行验证是不可行的。

以下是一些示例PHP代码:

// On the sending end:
define('SECRET', '12734981273912379128739128739127938794729327492');
$message = 'your-message';
$packet = $message . sha1($message . SECRET);

// On the receiving end:
define('SECRET', '12734981273912379128739128739127938794729327492');
$message = substr($packet, 0, -40);
if(sha1($message . SECRET) != substr($packet, -40))
    throw new Exception("Message Authentication failed!")
else
    do_something_with($message);

如果您希望黑客重新发布相同邮件的额外安全性,您可以为每个请求添加随机请求标识符,并确保不会接受相同的哈希值。

免责声明:与所有安全敏感代码一样,在受到敏感数据信任之前,应对其进行同行评审和验证。通过对该主题的研究,或者更好的是,使用处理此类验证+身份验证的现有库。

答案 3 :(得分:0)

我会考虑使用GnuPG:http://devzone.zend.com/article/1265

答案 4 :(得分:0)

我的投票是针对SSL,但作为替代方案。

如果两个站点都知道密钥(SK),那么,

  1. website1(WS1)可以发送website2(WS2)nonce(N1)
  2. WS2可以向WS1发送包含以下内容的消息:
    • 数据(可以使用密钥加密)
    • md5(SK.N1)(即证明WS2知道SK)
    • md5(SK。数据)(即证明数据未被第三方操纵