我只是想通过其他人来管理这个,以确保我没有遗漏任何明显的东西。我正在使用Payflow Link,它处理电子商务交易的所有信用卡肮脏。但是,您通过POST变量将事务的总金额传递给PayPal - 这似乎是一个潜在的安全漏洞:
我可以通过访问数据库,拉动购物车商品,重新计算价格加运费和税金来检查购物车的总金额。但是,为了检查篡改(多个数据库查询,每个项目加上2个Web服务调用以获得运费和税收),这是一个繁重的工作。
我的想法:
这有意义吗?我错过了什么吗?
编辑(澄清):
显然,根据前几个回复,我没有说清楚我的观点。我意识到这不是一个理想的设置。我知道其他公司提供类似甚至更好的服务。我知道我必须检查变量,我不能简单地信任它们。如果你要回复,我在答案中寻找的是:
这是一个非常直截了当的问题。这就是我要找的全部。对于任何能够回答这个问题的人,请提前感谢您的时间和帮助!
答案 0 :(得分:3)
我迟到了两年,但我同意作者的原创方法。我最近不得不对PayFlow Link做同样的事情。我所做的是根据用户的ID,订单总数以及他们购买的东西(购物车)生成一个哈希值,并在其中一个PayFlow链接用户字段中传递。我还在另一个字段中传递了一个用于创建此哈希的随机盐。在后端是用户永远不会看到的代码中的另一个共享密钥。总结一下......
hash = (user ID) + (order total) + (cart details) + (random salt) + (shared key)
另一方面,我使用从Paypal收集的相同输入再次生成哈希,他们处理了这些输入。如果没有任何东西被篡改,散列应该匹配。
如果设置正确,这种方法可以完美运行。这里的关键是用户永远不会看到的代码中的共享密钥,以及使用随机盐,因此即使使用相同的购买,哈希也是不同的,即使购买相同也是如此。
希望这可以帮助将来的某个人!
答案 1 :(得分:2)
您需要在IPN后使用您的数据库详细信息对计算出的金额进行人工检查,然后使用PayPal中支付的金额进行验证。实际上没有其他选择,我强烈建议您这样做,否则用户将尝试游戏系统。
您可以使用本指南加密您的PayPal变量:
答案 2 :(得分:2)
我可以看到的一个潜在问题是每次生成SHA-1哈希时都使用相同的salt。如果你每次使用相同的盐,攻击者可以很容易地确定$ 0.99(或其他一些低额)的哈希值,然后将其替换为他们想要支付0.99美元的任何交易。
编辑:如果您想出一些用于确定盐的算法,显然这个问题就成立了。如果该算法以某种方式被破坏,攻击者也可以利用它。
答案 3 :(得分:0)
我亲眼看到了这样的黑客行为。有些老兄以1美元的价格购买了500美元的礼品卡。我们快速添加了将IPN中的订单总数与我们自己的数据进行比较的代码,并在不匹配时将订单标记为可疑。
Payflow Link说明:“您决定是否结算交易”。所以你必须每次检查金额是否正确。
答案 4 :(得分:0)
有一个关于这个主题的研究。 http://www.utdallas.edu/~zhiqiang.lin/spring2012/lec11.pdf。基本上你是正确的,这些收银员服务很脆弱,可能会导致你从电子商务商店失去收入。
你的哈希想法会起作用,但是我会在那里放一些时间戳,以便它改变,你可以验证超时是否已经过期。如果没有任何改变的东西,用户可以例如在他们的购物车中放置一个非常便宜的物品,获得sha1哈希并在他们将昂贵的物品放入购物车后重播它。