2013-02-19 55 views
1

我想一个paypal付款后,提供一些信息给客户,使用贝宝返回URL,而无需客户登入]。如何在没有登录的情况下实现秘密网址以在付款后提供信息?

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

予想到的是这样的:

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

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

此方法是否有意义?或者,您的建议是什么将会提供信息而无需登录,并避免客户猜测其他产品的网址?


虽然他们对哈希一些有趣的答案,仍然存在与这个想法我上面提到的一个问题:贝宝需要接收返回的URL,因此该信息在付款前通过,因此该方法不固定反对欺诈。

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

+0

这是通过默默无闻的安全。 – Yousf 2013-02-19 15:05:36

+0

@Yousf好吧,这是否意味着你推荐一个登录/密码系统? – tucson 2013-02-19 15:09:00

+0

如果使用的事务散列是基于已知数据计算的,那么通过obscurity_它只是_security。如果它随机生成应该是一个安全的方法。 – oktopus 2013-02-19 15:14:31

回答

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(来自PayPal POST数据值)。并为用户提供带有产品ID和verify_sign的URL。

1

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

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

0

包括一个散列参数,其值基于几个参数进行计算。例如,对于您的网址Ø会计算这样的散列:

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

其中$uniqueKeyString是一个秘密值(一些随机的整数),只有自己知道。当请求会发送到你的服务器时,你可以简单地自己计算哈希串并且将它与请求的transactionHash进行比较,不管它是否相同。

+0

是的,为了提高安全性,您可以使用比md5更好的散列函数,并且使用更长的唯一密钥字符串。 – ulkas 2013-02-19 15:04:30

1

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

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

因此,无论用户何时生成这样的唯一ID,他都可以访问该信息一段时间,或者一次。

使用说随机。组织的随机字节功能,可以产生这样的字符串: 6f0d47cf3432d4015e0e798641191bf0e8e0b90b00df23181bcb3401a0dad43d85be711343c3baa9 这几乎是不可能的猜测,即使别人知道包含一个productId和说客

1

使用散列函数,而不需要记录的访问某些存储的信息的emailadress不是一个坏主意。但是不应该根据已知的数据生成散列,例如ID,电子邮件地址或任何用户可能知道或猜测的类似数据。

相反,有必要随机生成足够长的散列值,这些散列值不能被任何已知数据猜出或产生。 来自random.org的已经提到的字节函数可能是一个不错的选择。

相关问题