我只是想让其他人来处理这件事,以确保我没有遗漏一些明显的东西。我正在使用Payflow链接,它处理所有的信用卡恶意电子商务交易。但是,您通过POST变量将事务的总量传递给PayPal --这似乎是一个潜在的安全漏洞:
我可以通过访问数据库,提取他的购物车项目,重新计算他们的价格,再加上运输和税收,来检查他的手推车的总金额。但是,仅仅为了检查篡改(多个DB查询,再加上每个项目2个web服务调用以获取发货和税收),这将是一件非常繁重的工作。
我的想法:
through.
这有道理吗?我是不是遗漏了什么?
编辑(用于澄清):
显然,基于最初的几个回应,我并没有阐明我的观点。我知道这不是一个理想的设置。我知道其他公司也提供类似的甚至更好的服务。我知道我必须检查变量,我不能简单地相信它们。请注意,如果你要回答,我想要的答案是:
有人能用我的提议演示一个漏洞吗?该漏洞允许恶意用户更改PayPal变量并不被检测到?
这是一个非常直截了当的问题。这就是我要找的。对于任何能够回答这个问题的人,请提前感谢你们的时间和帮助!
发布于 2010-10-04 21:55:42
我看到的一个潜在问题是每次生成SHA-1哈希时都使用相同的salt。如果每次使用相同的salt,攻击者可以非常容易地确定0.99美元(或其他一些低金额)的哈希值,然后将其替换为他们想要支付0.99美元的任何事务。
编辑:很明显,如果您想出了一些确定盐分的算法,那么这个问题就成立了。如果这个算法被破坏了,攻击者也可以利用这个漏洞。
发布于 2012-11-02 14:58:04
我迟到了两年,但我同意作者最初的做法。最近我不得不对PayFlow链接也做了同样的事情。我所做的是根据用户的id、订单总数以及他们购买的内容(购物车)生成一个散列,并将其传递到PayFlow链接用户字段中。我还在另一个字段中传递了一个用于创建此散列的随机盐。后端是代码中的另一个共享密钥,用户永远不会看到。总之..。
hash = (user ID) + (order total) + (cart details) + (random salt) + (shared key)
另一方面,我使用我从Paypal收集到的与他们处理的输入相同的输入再次生成哈希。如果没有任何东西被篡改,哈希应该匹配。
如果安装正确,此方法将完美无缺地工作。这里的密钥是用户永远不会看到的代码中的共享密钥,并且使用随机盐,所以即使使用相同的购买,散列也是不同的,即使是相同的购买。
希望这对将来的人有帮助!
发布于 2010-09-24 04:00:57
您需要在IPN之后使用DB详细信息对计算出的金额进行手动检查,然后用PayPal支付的金额进行验证。没有其他选择,我强烈建议你这样做,否则用户将尝试和游戏的系统。
您可以使用本指南加密PayPal变量:
http://dev.juokaz.com/php/paypal-payment-with-encryption
https://stackoverflow.com/questions/3784015
复制相似问题