1

我想在贝宝付款后使用贝宝退货网址向客户提供一些信息,而无需客户登录。

所以我认为我需要一个系统来为每个事务创建 url,并避免猜测另一个事务的 url。

我想到了类似的东西:

http://www.domain.com/product/send.php?productID=12&transactionHash=[thisTransactionHash]

使用可以根据客户的电子邮件和产品唯一 ID 计算的 transactionHash。

这种方法有意义吗?或者您的建议是什么?无需登录即可提供信息,并避免客户猜测其他产品的网址?


尽管它们是关于哈希的几个有趣的答案,但我上面提到的想法仍然存在一个问题:Paypal 需要接收返回 url,因此信息在付款之前传递,因此该方法不能防止欺诈。

我看到的唯一安全方式是 Paypal 交付系统,这就是我接受这个答案的原因。

4

5 回答 5

1

“使用可以根据客户的电子邮件和产品唯一 ID 计算的 transactionHash。”

一旦知道算法,您的系统就会崩溃。我的建议是“安全”又名加密 PRNG + 一些查找表。

于 2013-02-19T14:56:51.770 回答
1

您可以在任何给定时间为用户创建一个随机 id,甚至可以在网络上使用一些真正的随机生成器。

但是你应该做的是让它在特定的时间内成为唯一的,也许使用一个简单的数据库结构,也许将信息存储到你服务器上的文件中,一旦它们被读取一次,就会被同一个脚本删除,取决于根据您的需要。

因此,每当用户生成此类唯一 ID 时,他都可以在一段时间内或仅访问一次该信息。

使用说 random.org 的随机字节函数,您可以生成如下字符串: 6f0d47cf3432d4015e0e798641191bf0e8e0b90b00df23181bcb3401a0dad43d85be711343c3baa9 即使其他人知道产品ID和所述客户的电子邮件地址,这也几乎不可能猜到

于 2013-02-19T15:05:24.210 回答
1

使用哈希来访问一些存储的信息而不需要登录并不是一个坏主意。但是,不应根据已知数据(如 ID、电子邮件地址或任何用户可能知道或猜到的类似数据)生成该哈希值。

相反,有必要随机生成一个足够长的哈希值,该值无法从任何已知数据中猜测或生成。random.org 中已经提到的 byte 函数可能是一个不错的选择。

于 2013-02-19T15:11:58.377 回答
1

如果您只针对 PayPal,为什么不查看即时付款通知指南? https://www.x.com/sites/default/files/ipnguide.pdf

我以前没有使用过 Paypal,但这似乎解决了您的问题。

创建表:| product_id(您产品的唯一 ID)| varchar transaction_hash |

在此示例代码(PHP 示例)中: https ://www.x.com/developers/PayPal/documentation-tools/code-sample/216623

验证付款正确后,在表中插入产品 ID 和 verify_sign(value from paypal POST data)。并为用户提供带有产品 ID 和 verify_sign 的 URL。

于 2013-02-19T15:22:34.310 回答
0

包括一个哈希参数,其值是根据几个参数计算的。例如,对于您的 url,o 会像这样计算哈希:

$uniqueKeyString="some random characters";
transactionHash=md5("domain.com".$productId.time().$uniqueKeyString);

$uniqueKeyString只有你知道的秘密值(一些随机整数)在哪里。比,当请求到达您的服务器时,您可以简单地自己计算哈希字符串并将其与transactionHash请求的哈希字符串进行比较是否相同。

于 2013-02-19T15:02:46.037 回答